• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于嵌入式Linux的 platform驅(qū)動(dòng)設(shè)計(jì)與應(yīng)用

    2018-05-14 13:45:55王曉君王星李玉瑩
    科技風(fēng) 2018年25期

    王曉君 王星 李玉瑩

    摘要:如今的驅(qū)動(dòng)程序已經(jīng)無(wú)法滿(mǎn)足越來(lái)越多的高度集中的片上系統(tǒng)SOC的要求。本文主要敘述了基于嵌入式 Linux的platform驅(qū)動(dòng)程序的設(shè)計(jì)方法和應(yīng)用開(kāi)發(fā)過(guò)程。在platform總線(xiàn)架構(gòu)下溫濕度采集驅(qū)動(dòng)設(shè)計(jì)的基礎(chǔ)上,詳細(xì)闡述了嵌入式 Linux下platform總線(xiàn)驅(qū)動(dòng)設(shè)計(jì)中的platform總線(xiàn)、platform設(shè)備及platform驅(qū)動(dòng)注冊(cè)和卸載等,并驗(yàn)證設(shè)備驅(qū)動(dòng)的正確性。

    關(guān)鍵詞:platform總線(xiàn);platform設(shè)備;platform驅(qū)動(dòng)

    中圖分類(lèi)號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A

    Platform的管理是在Linux基礎(chǔ)之上完成。platform 在Linux 設(shè)備模型中管理外設(shè)資源和系統(tǒng)的外圍設(shè)備。引入platform之后更加便于管理。platform驅(qū)動(dòng)架構(gòu)有利于這些設(shè)備驅(qū)動(dòng)的改寫(xiě)、維護(hù)與擴(kuò)展,提高設(shè)備驅(qū)動(dòng)開(kāi)發(fā)[1]的效率。因而,在此基礎(chǔ)上完成了驅(qū)動(dòng)設(shè)計(jì)的溫度和濕度采集的實(shí)驗(yàn)。

    1 platform總體設(shè)計(jì)

    Linux設(shè)備驅(qū)動(dòng)負(fù)責(zé)設(shè)備的維護(hù)和實(shí)現(xiàn),如:電源管理、熱插拔、對(duì)象生命周期、用戶(hù)空間和內(nèi)核空間[2]的交互等。設(shè)備驅(qū)動(dòng)主要是用于驅(qū)動(dòng)程序的編寫(xiě)和管理,但是實(shí)現(xiàn)相對(duì)復(fù)雜??偩€(xiàn)、設(shè)備、驅(qū)動(dòng)就是設(shè)備驅(qū)動(dòng)模型的三個(gè)主要部分,[35]其組織關(guān)系總結(jié)為:

    (1)devices:描述了設(shè)備如何連接系統(tǒng);

    (2)drivers:系統(tǒng)中可用的驅(qū)動(dòng);

    (3)buses:負(fù)責(zé)匹配設(shè)備與驅(qū)動(dòng),連接到每個(gè)總線(xiàn)上;

    (4)classes:設(shè)備功能類(lèi)。

    1.1 platform總線(xiàn)

    platform 總線(xiàn)在內(nèi)核中用platform_bus_type 結(jié)構(gòu)表示,其實(shí)platform_bus_type就是一個(gè)關(guān)于platform的實(shí)例,platform總線(xiàn)啟動(dòng)時(shí)由platform_bus_init()進(jìn)入,具體調(diào)用函數(shù)的流程如下。

    圖1 platform總線(xiàn)流程圖

    Fig.1 platform bus flow processes

    1.2 platform設(shè)備與platform驅(qū)動(dòng)

    分析設(shè)備使用platform_device 和驅(qū)動(dòng)使用platform_driver,并在此基礎(chǔ)上對(duì)其進(jìn)行詳細(xì)的分析和闡述。

    其中針對(duì)platform_device,首先在需要包含頭文件platform_device.h的頭文件,然后設(shè)計(jì)一個(gè)命名為platform_device的結(jié)構(gòu)體。結(jié)構(gòu)體中必須包含設(shè)備平臺(tái)的名稱(chēng)name,設(shè)備所需要的id號(hào),并且需要一個(gè)用于設(shè)置相關(guān)項(xiàng)的內(nèi)置的結(jié)構(gòu)體,還需要結(jié)構(gòu)體包含大的數(shù)量和資源指針,以及驅(qū)動(dòng)設(shè)備的相關(guān)的匹配列表id_table表。

    其中針對(duì)platform_driver,也必須包含頭文件platform_device.h,然后設(shè)計(jì)一個(gè)命名為platform_driver的結(jié)構(gòu)體。結(jié)構(gòu)體中必須包含設(shè)備平臺(tái)中platform的探測(cè)函數(shù)probe,與之相反的就是卸載platform的函數(shù)remove,platform需要對(duì)電源進(jìn)行管理,包括電源的的設(shè)備和狀態(tài)的選擇,并且需要一個(gè)用于設(shè)置相關(guān)項(xiàng)的內(nèi)置的結(jié)構(gòu)體,還需要結(jié)構(gòu)體包含大的數(shù)量和資源指針,以及總線(xiàn)設(shè)備的相關(guān)的列表id_table表。

    2 platform總線(xiàn)架構(gòu)下溫濕度驅(qū)動(dòng)實(shí)現(xiàn)

    2.1 設(shè)備平臺(tái)資源

    在tiny4412相關(guān)的硬件設(shè)備中對(duì)其進(jìn)行驅(qū)動(dòng)程序的開(kāi)發(fā)和設(shè)計(jì),從而進(jìn)一步的調(diào)試和完善platform總線(xiàn)架構(gòu)的溫濕度采集驅(qū)動(dòng)。溫度傳感器采用DHT11直接外接到嵌入式GPB4引腳上,通過(guò)溫度采集驅(qū)動(dòng)控制外圍設(shè)備,控制臺(tái)實(shí)現(xiàn)溫濕度的采集。Platform總線(xiàn)架構(gòu)需要一整套系統(tǒng)的的設(shè)計(jì)開(kāi)發(fā)過(guò)程:首先需要對(duì)總線(xiàn)platform bus進(jìn)行初始化,將 platform_device注冊(cè)到內(nèi)核,然后再把 platform 設(shè)備掛到 platform bus(虛擬總線(xiàn))上。最后注冊(cè)并編寫(xiě) platform 的驅(qū)動(dòng)程序,實(shí)現(xiàn)兩者的綁定。

    2.2 實(shí)現(xiàn)platform設(shè)備

    platform 設(shè)備是注冊(cè)到 platform 總線(xiàn)的,使用 struct platform_device 定義平臺(tái)設(shè)備,通過(guò)platform_device_alloc()初始化函數(shù)中調(diào)用 platform_device_add()完成設(shè)備向內(nèi)核注冊(cè),設(shè)備注冊(cè)成功后,platform 總線(xiàn)會(huì)有 tiny4412dht11 的設(shè)備。platform設(shè)備定義及注冊(cè)核心代碼如下:

    static int __init platform_dev_init(void)

    {int ret;

    my_dht11_dev=platform_device_alloc("platform_dht11",1);

    ret = platform_device_add(my_dht11_dev);

    if(ret) platform_device_put(my_dht11_dev);

    return ret;

    }

    2.3 實(shí)現(xiàn)platform驅(qū)動(dòng)

    platform驅(qū)動(dòng)定義結(jié)構(gòu)體xing_dht11_drv,核心代碼如下所示:

    struct platform_driverdevice_dht11_drv = {

    .probe =xing_dht11_probe,

    .remove =xing_ dht11_remove,

    .driver = {

    .owner =the_module,

    .name = "platform_dht11",

    },

    };

    在tiny4412_dht11_driver中tiny4412_dht11_probe()主要完成查詢(xún)系統(tǒng)中是否有相應(yīng)設(shè)備,如果檢測(cè)到相應(yīng)設(shè)備,則說(shuō)明初始化完成。溫濕度采集驅(qū)動(dòng)采用register_chrdev()向內(nèi)核注冊(cè)驅(qū)動(dòng),實(shí)現(xiàn)溫濕度采集的open(),read()等功能,在read()函數(shù)中實(shí)現(xiàn)溫濕度的讀取。tiny4412_dht11_probe()核心代碼為:

    驅(qū)動(dòng),并能與platform_dht11設(shè)備建立連接,能在控制臺(tái)上打印溫濕度采集結(jié)果。結(jié)果如圖2所示:

    圖2 溫濕度采集結(jié)果

    Fig.2Temperature and humidity collection results

    3 結(jié)語(yǔ)

    基于嵌入式Linux的platform驅(qū)動(dòng)設(shè)計(jì)與應(yīng)用中實(shí)現(xiàn)了在API上獲取設(shè)備中的信息,將SOC上的設(shè)備添加到虛擬總線(xiàn)上,使得總線(xiàn)到設(shè)備到驅(qū)動(dòng)的順序模式到更加廣泛的使用,驅(qū)動(dòng)代碼的編寫(xiě)和放置位置可以與其他硬件代碼的隔離開(kāi)來(lái)。溫濕度采集中關(guān)于驅(qū)動(dòng)程序的設(shè)計(jì)和調(diào)試,證明了platform驅(qū)動(dòng)的移植性良好,而且具有很高的可拓展性。

    參考文獻(xiàn):

    [1]李樺,高飛,孫磊.嵌入式Linux設(shè)備驅(qū)動(dòng)程序研究[J].微計(jì)算機(jī)信息,2010,26(14):6870.

    Linux中用戶(hù)空間與內(nèi)核空間的通信實(shí)現(xiàn)[J].微機(jī)發(fā)展,2005(05):7576+130.

    [2]宋寶華.Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].人民郵電出版社,2008.0824.

    [3]趙波,高真香子,項(xiàng)伯陽(yáng),等.Linux platform驅(qū)動(dòng)架構(gòu)的解析與應(yīng)用[J].大連工業(yè)大學(xué)學(xué)報(bào),2013,32(01):7174.

    [4]周德榮,夏齡.Linux platform驅(qū)動(dòng)架構(gòu)實(shí)現(xiàn)機(jī)制研究與應(yīng)用[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版),2010,26(10):2830.

    [5]李建文,李外云,劉宏博,等.基于TinyOS2.x的溫濕度傳感器的底層驅(qū)動(dòng)與應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013,13(07):2831.

    作者簡(jiǎn)介:王曉君(1973),男,河北張家口人,教授。

    *通訊作者:王星

    加查县| 华亭县| 沂水县| 美姑县| 隆子县| 淳化县| 秭归县| 鄂尔多斯市| 西和县| 德令哈市| 景德镇市| 大丰市| 灵山县| 镶黄旗| 界首市| 常德市| 鹿泉市| 枣阳市| 祁东县| 阜平县| 濮阳县| 尼勒克县| 保亭| 和静县| 合江县| 将乐县| 临安市| 三明市| 绥江县| 衡东县| 阳谷县| 合江县| 富川| 博兴县| 密山市| 莆田市| 朝阳市| 那曲县| 长子县| 安多县| 太湖县|