亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        王曉君 王星 李玉瑩

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

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

        中圖分類號:TP316文獻(xiàn)標(biāo)識碼:A

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

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

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

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

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

        (3)buses:負(fù)責(zé)匹配設(shè)備與驅(qū)動,連接到每個(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總線啟動時(shí)由platform_bus_init()進(jìn)入,具體調(diào)用函數(shù)的流程如下。

        圖1 platform總線流程圖

        Fig.1 platform bus flow processes

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

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

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

        其中針對platform_driver,也必須包含頭文件platform_device.h,然后設(shè)計(jì)一個(gè)命名為platform_driver的結(jié)構(gòu)體。結(jié)構(gòu)體中必須包含設(shè)備平臺中platform的探測函數(shù)probe,與之相反的就是卸載platform的函數(shù)remove,platform需要對電源進(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ū)動實(shí)現(xiàn)

        2.1 設(shè)備平臺資源

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

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

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

        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ū)動

        platform驅(qū)動定義結(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è)備,如果檢測到相應(yīng)設(shè)備,則說明初始化完成。溫濕度采集驅(qū)動采用register_chrdev()向內(nèi)核注冊驅(qū)動,實(shí)現(xiàn)溫濕度采集的open(),read()等功能,在read()函數(shù)中實(shí)現(xiàn)溫濕度的讀取。tiny4412_dht11_probe()核心代碼為:

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

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

        Fig.2Temperature and humidity collection results

        3 結(jié)語

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

        參考文獻(xiàn):

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

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

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

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

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

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

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

        *通訊作者:王星

        久久aⅴ无码av免费一区| 精品高朝久久久久9999 | 国产亚洲一本大道中文在线| 亚洲一区二区三区国产精华液| 国产精品天天看大片特色视频| 性色av成人精品久久| av网站免费在线浏览| 不卡一卡二卡三乱码免费网站| 久久精品夜夜夜夜夜久久| 亚洲色欲色欲欲www在线| av在线免费观看男人天堂| 亚洲av成人片色在线观看高潮| 真人二十三式性视频(动)| 大伊香蕉精品视频一区| 国产精品麻豆一区二区三区| 天堂中文а√在线| 亚洲av无码一区二区三区在线| 免费a级毛片无码a∨免费| 中文字幕人妻互换av| 99国产精品自在自在久久| 久久福利青草精品免费| 99久久无色码中文字幕鲁信| 亚洲高清国产一区二区| 国产午夜精品一区二区三区| 久久精品无码一区二区乱片子| 国产在线观看免费不卡视频| 极品少妇被黑人白浆直流| 欧美天欧美天堂aⅴ在线| 久久精品国产屋| 青青草视频在线观看入口| 亚洲色成人网站www永久| 在线成人福利| 精品av一区二区在线| 中文字幕亚洲无线码在线一区| 在线观看国产成人av片| 中文字幕午夜AV福利片| 一区二区三区在线视频观看 | 中文字幕在线乱码av| 天天鲁在视频在线观看| 欧美日韩区1区2区3区| 亚洲性感毛片在线视频|