999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

王曉君 王星 李玉瑩

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

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

中圖分類號(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)的改寫、維護(hù)與擴(kuò)展,提高設(shè)備驅(qū)動(dòng)開發(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ì)象生命周期、用戶空間和內(nèi)核空間[2]的交互等。設(shè)備驅(qū)動(dòng)主要是用于驅(qū)動(dòng)程序的編寫和管理,但是實(shí)現(xiàn)相對(duì)復(fù)雜??偩€、設(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è)總線上;

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

1.1 platform總線

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

圖1 platform總線流程圖

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)的名稱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ù)量和資源指針,以及總線設(shè)備的相關(guān)的列表id_table表。

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

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

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

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

platform 設(shè)備是注冊(cè)到 platform 總線的,使用 struct platform_device 定義平臺(tái)設(shè)備,通過platform_device_alloc()初始化函數(shù)中調(diào)用 platform_device_add()完成設(shè)備向內(nèi)核注冊(cè),設(shè)備注冊(cè)成功后,platform 總線會(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()主要完成查詢系統(tǒng)中是否有相應(yīng)設(shè)備,如果檢測(cè)到相應(yīng)設(shè)備,則說明初始化完成。溫濕度采集驅(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é)語

基于嵌入式Linux的platform驅(qū)動(dòng)設(shè)計(jì)與應(yīng)用中實(shí)現(xiàn)了在API上獲取設(shè)備中的信息,將SOC上的設(shè)備添加到虛擬總線上,使得總線到設(shè)備到驅(qū)動(dòng)的順序模式到更加廣泛的使用,驅(qū)動(dòng)代碼的編寫和放置位置可以與其他硬件代碼的隔離開來。溫濕度采集中關(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中用戶空間與內(nèi)核空間的通信實(shí)現(xiàn)[J].微機(jī)發(fā)展,2005(05):7576+130.

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

[3]趙波,高真香子,項(xià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),男,河北張家口人,教授。

*通訊作者:王星

主站蜘蛛池模板: 一区二区三区四区在线| 久久久久国产精品熟女影院| 制服丝袜无码每日更新| 国产xx在线观看| 天天干天天色综合网| 一区二区三区成人| 国产一区自拍视频| 高清久久精品亚洲日韩Av| 奇米影视狠狠精品7777| 青青草91视频| 亚洲最大看欧美片网站地址| 亚洲区第一页| 国产精品久久久精品三级| 国产在线麻豆波多野结衣| 麻豆国产精品视频| 日本AⅤ精品一区二区三区日| 性色生活片在线观看| 国产精品视频导航| 日韩黄色精品| 亚洲人成网址| 亚洲国产中文精品va在线播放| 亚洲欧洲自拍拍偷午夜色| 91精品啪在线观看国产91| 永久免费av网站可以直接看的 | 99青青青精品视频在线| 呦系列视频一区二区三区| 一本色道久久88| 欧美日韩第三页| 91视频青青草| 亚洲av日韩av制服丝袜| 国产欧美亚洲精品第3页在线| 日本一本正道综合久久dvd | 欧美亚洲日韩中文| 国产成人喷潮在线观看| 精品少妇人妻av无码久久| 亚洲色图狠狠干| 五月婷婷伊人网| 黄色网页在线播放| 毛片基地视频| 午夜老司机永久免费看片| 日本三区视频| 国产9191精品免费观看| 视频在线观看一区二区| 亚洲动漫h| 9啪在线视频| 国产成人做受免费视频| 久久综合五月| 精品人妻一区无码视频| 日韩国产精品无码一区二区三区| 无码精油按摩潮喷在线播放| 亚洲成aⅴ人在线观看| 国产第一福利影院| 精品国产黑色丝袜高跟鞋| 熟妇无码人妻| 亚洲黄色片免费看| 欧美精品二区| 女人18毛片久久| 亚洲精品中文字幕无乱码| 天天干伊人| 欧美亚洲欧美| 日韩福利在线观看| 又粗又大又爽又紧免费视频| 中文字幕在线播放不卡| 97超碰精品成人国产| 操国产美女| 亚洲第一香蕉视频| 日本一区二区不卡视频| 久久精品嫩草研究院| 丁香亚洲综合五月天婷婷| 亚洲人人视频| 四虎成人精品| 青青草原国产一区二区| 国产日韩欧美一区二区三区在线| 国产美女精品在线| 色综合激情网| 国产欧美日韩专区发布| 无码丝袜人妻| 中文无码伦av中文字幕| 亚洲国产精品日韩欧美一区| 日本精品视频| 日本成人在线不卡视频| 老色鬼久久亚洲AV综合|