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

        ?

        Linux platform驅動架構的解析與應用

        2013-09-19 08:53:20波,高子,項陽,于
        大連工業(yè)大學學報 2013年1期
        關鍵詞:驅動程序內核調用

        趙 波,高 真 香 子,項 伯 陽,于 忠 得

        (1.大連工業(yè)大學 信息科學與工程學院,遼寧 大連 116034;2.大連交通大學 電氣信息學院,遼寧 大連 116028)

        0 引 言

        為統(tǒng)一管理Linux中的所有設備,Linux開發(fā)了設備模型。Linux設備模型可描述為:總線—設備—驅動程序編程接口,內核設備支持被清晰地結構化為總線、設備和驅動程序[1]。platform驅動架構是Linux設備模型中的重要組成部分,用于片上系統(tǒng)的外圍設備控制器驅動的實現(xiàn)。隨著片上系統(tǒng)(SOC)的集成度越來越高,越來越多的外圍設備控制器被集成進SOC,現(xiàn)有的驅動程序已無法滿足使用需求,研究platform驅動架構有利于這些設備驅動的改寫、維護與擴展,本文實現(xiàn)了基于platform驅動架構的LCD驅動。

        1 platform驅動架構

        Linux設備模型,實質上就是系統(tǒng)地管理Linux中所有設備,將設備間的層次關系抽象出來。內核設備驅動模型按層次可劃分為總線、設備、驅動三層架構,其基本關系可簡要概括為[2]:

        (1)驅動核心可以注冊多種類型的總線;

        (2)每種總線下面可以掛載許多設備(通過kset devices);

        (3)每種總線下可以使用多種設備驅動(通過包含一個kset drivers);

        (4)每個驅動可以處理一組設備。

        平臺設備(platform)驅動架構的實現(xiàn),是在Linux設備模型的基礎上,通過對總線、設備、驅動3個概念的再定義而實現(xiàn)的[3],在Linux內核中,這3個概念通過platform總線、platform_device(platform設備)、platform_driver(platform驅動)3個部分實現(xiàn)。

        1.1 platform總線

        Linux操作系統(tǒng)中,platform總線負責將platform驅動架構注冊進系統(tǒng)內核,在內核識別platform總線之后,才能進行platform設備、platform驅動的識別與自動匹配,所以,platform總線應該在系統(tǒng)上電后自動啟動。platform總線的生成與注冊過程如圖1所示。

        圖1 platform總線的生成與注冊過程Fig.1 Platform bus formation and registration process

        在系統(tǒng)上電后,Linux內核會自動運行/init/main.c程序,完成一些基本啟動配置,然后調用/drivers/base/init.c文件中的driver_init()函數(shù),進行內核驅動機制初始化,其中就會通過調用/drivers/base/platform.c文件的 device_register()函數(shù),將platform總線與platform驅動架構注冊進Linux內核。其中,platform總線作為設備的一種,通過platform_bus結構體表示;platform驅動架構通過platform_bus_type結構體來實現(xiàn),這兩個結構體均在platform.c中被定義為全局對象。

        1.2 platform設備

        platform設備主要包括LCD、串口等可以被CPU總線直接尋址的集成于片上系統(tǒng)(SOC)的外圍設備控制器等[4]。Linux內核中,platform設備通過platform_device結構體實現(xiàn),代碼路徑:/include/linux/platform_device.h,具體定義如下:

        其中,設備名稱name是platform設備與platform驅動自動匹配的關鍵,只有name值相同時,platform設備與platform驅動才能匹配上。

        Linux系統(tǒng)中,通過結構體的互相包含方式,實現(xiàn)了面向對象思想的繼承。在platform設備結構體中,就包含了struct device結構體,實現(xiàn)了對Linux中設備概念(struct device)的繼承。在struct device dev中dev->platform_data與dev->driver_data是兩個void型變量,可用于存儲具體設備的硬件信息、驅動信息等,如LCD的分辨率、刷新率等,可定義一個FS2410_fb_mach_info結構,記錄LCD的硬件信息(屏幕尺寸、屏幕信息、LCD配置寄存器)等,并將該結構體賦值給platform_device中的dev->platform_data。

        *resource是具體設備的資源,如中斷號IRQ、地址資源等。通過platform_device_register()可以自動將platform_device結構體(硬件配置信息)注冊進內核空間。

        platform設備必須在platform驅動之前注冊入內核空間,否則無法自動匹配。

        1.3 platform驅動

        platform驅動完全遵照設備驅動模型的約定[3],通過platform_driver_register()函數(shù)完成platform_driver的注冊,platform驅動的封裝結構體為 platform_driver,代碼路徑為:/include/linux/platform_device.h,具體定義如下:struct device_driver driver,實現(xiàn)了對 device_driver的繼承,為具體的platform驅動提供了統(tǒng)一內核接口;同時,提供了(*suspend)、(*resume)等函數(shù)指針,可用于休眠、喚醒等智能電源管理功能。在具體應用中,只需驅動開發(fā)人員實現(xiàn)設備底層功能函數(shù),同時將功能函數(shù)填充platform_driver結構體的接口中,就可以由Linux內核自動進行platform驅動的管理,大大減輕了工作難度與強度。

        對于platform_driver的注冊,可以通過調用platform_driver_register(&platform_driver)來實現(xiàn),其主要涉及的數(shù)據(jù)流程參見圖2。

        圖2 注冊platform驅動的內核數(shù)據(jù)流程Fig.2 Kernel data flow of Platform driver register

        在platform驅動的注冊過程中,會在_driver_attach()中通過調用driver_match_device(drv,dev)來匹配platform設備中name與platform驅動中的name值,如果相同,platform設備與platform驅動就綁定成功,底層的設備就可以正常地運行。

        2 采用platform驅動架構的LCD驅動實現(xiàn)

        本研究以優(yōu)龍FS2410開發(fā)板為硬件平臺,Linux 2.6.31為內核版本,外接8寸夏普LCD顯示屏,采用Platform驅動架構的LCD驅動實現(xiàn)。在FS2410中,LCDC(LCD控制器)是集成于SOC的外圍設備控制器,被CPU總線直接尋址,按照platform驅動架構的一般步驟,有四個環(huán)節(jié):定義platform 設備(platform_device)、注冊platform設備、定義platform驅動(platform_driver)、注冊platform驅動,同時必須保證platform設備在platform驅動之前注冊進內核空間。

        2.1 定義platform設備

        代碼路徑:/arch/arm/plat-s3c24xx/Devs.c。

        在Devs.c統(tǒng)一定義了S3C24xx架構的platform_device,在這個文件里,可定義

        在同文件的如下程序中定義了Lcdc所持有的資源(CPU尋址地址、IRQ中斷號)。

        同時,定義一個FS2410fb_mach_info結構體,記錄LCD的屏幕信息、分辨率、LCD配置寄存器等信息,并填充到platform_device的dev->platform_data中,供內核空間調用。

        2.2 注冊platform設備

        代碼路徑:/arch/arm/mach-s3c2410/mach_smdk2410.c。

        在 mach-smdk2410.c中,通過platform_add_devices(smdk2410_devices,…)將 smdk2410_devices注冊進內核空間,其中smdk2410_devices[]={&s3c_device_usb,&s3c_device_lcd,…},即所有2410平臺的platform設備,都被裝填入smdk2410_devics[]這個數(shù)組,在platform_add_devices()中統(tǒng)一注冊進內核空間。

        2.3 定義platform驅動

        代碼路徑:/drivers/video/s3c2410fb.c。

        在s3c2410fb.c對platform_driver進行了定義:

        在此結構體中,具體填充了probe驅動探測函數(shù),suspend、resume電源管理函數(shù),對于驅動開發(fā)人員,不需關心內核對它的調用,只需關心具體功能函數(shù)的實現(xiàn),并填充到標準接口即可。在.driver中.name=”FS2410-lcd”,這個值需要與platform_device中的name完全一致。在suspend、resume部分,實行了Linux電源管理,在具體驅動開發(fā)中,可以在此處實現(xiàn)智能節(jié)電措施,可以采用如安卓操作系統(tǒng)(Android)中的喚醒鎖(wakelock)等機制。

        S3c2410fb_probe()的調用實現(xiàn),是在將platform驅動注冊進內核空間,并和內核已維護的platform_device鏈表中的name相匹配后。其具體實現(xiàn)流程:

        2.4 注冊platform驅動

        在/drivers/video/s3c2410fb.c中通過調用platform_driver_register()實現(xiàn)了platform_driver的注冊,具體實現(xiàn)如下:platform_driver_register(&s3c2410fb_driver)。

        2.5 移植驗證

        采用platform驅動架構,移植LCD驅動,修改相應 Makefile、Kconfig[5],編譯內核,并通過USB下載到FS2410開發(fā)板后,串口打印顯示LCD驅動加載成功。圖3為在移植后的8寸夏普LCD屏上運行QT/E應用程序,顯示結果清晰、穩(wěn)定,無撕裂現(xiàn)象。

        圖3 移植實驗結果Fig.3 Porting experiment results

        3 結束語

        采用platform驅動架構,具有框架代碼復用、設備資源與驅動獨立性強、代碼精簡、具有統(tǒng)一內核接口、易于維護與擴展等特點。在開發(fā)具體驅動時,只需專注完成底層設備操作函數(shù)集,并與platform_driver結構體提供的內核接口一一對應,保證device.name與driver.name相一致,platform設備在platform驅動之前注冊進內核空間,就可以使驅動良好、穩(wěn)定地運行,大大減輕了工作強度,壓縮新產(chǎn)品的研發(fā)時間。移植試驗證明,采用該架構的驅動具有很好的移植性、可維護性、擴展性。

        [1]VENKATESWARAN S.Essential Linux Device Drivers[M].Boston:Prentice Hall,2008:71-77.

        [2]CORBET J,RUBINI A,HARTMAN G K.Linux設備驅動程序[M].3版.魏永明,譯.北京:中國電力出版社,2006:359-388.

        [3]韋東山.嵌入式Linux應用開發(fā)完全手冊[M].北京:人民郵電出版社,2008:476-490.

        [4]宮莉莉,趙勇.基于嵌入式Linux系統(tǒng)的LCD驅動實現(xiàn)[J].微計算機信息,2008,24(35):1-3.

        [5]蘇哲欣,劉鴻飛,薛曉.基于嵌入式Linux的LCD驅動分析與實現(xiàn)[J].工業(yè)控制計算機,2009,22(2):29-30.

        猜你喜歡
        驅動程序內核調用
        萬物皆可IP的時代,我們當夯實的IP內核是什么?
        強化『高新』內核 打造農(nóng)業(yè)『硅谷』
        核電項目物項調用管理的應用研究
        基于嵌入式Linux內核的自恢復設計
        Linux內核mmap保護機制研究
        LabWindows/CVI下基于ActiveX技術的Excel調用
        測控技術(2018年5期)2018-12-09 09:04:46
        基于系統(tǒng)調用的惡意軟件檢測技術研究
        利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
        驅動程序更新與推薦
        驅動程序更新與推薦
        免费无码av一区二区| 麻豆av在线免费观看精品| 一本之道日本熟妇人妻| 胸大美女又黄的网站| 欧洲日本一线二线三线区本庄铃| 浪荡少妇一区二区三区| 日本不卡一区二区三区在线观看| 色噜噜亚洲男人的天堂 | 亚洲av无码日韩精品影片| 岛国精品一区二区三区| 免费国产不卡在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 免费拍拍拍网站| 中文字幕国产91| 精品蜜桃在线观看一区二区三区 | 亚洲乱码日产精品一二三| 亚洲av日韩精品久久久久久 | 在线观看人成网站深夜免费| 国内久久婷婷六月综合欲色啪| 野花社区视频在线观看| 日韩在线第二页| 亚洲大片一区二区三区四区| 国产一区二区黄色录像| 国产特级毛片aaaaaaa高清| av天堂精品久久久久| 一区二区亚洲熟女偷拍| 亚洲欧洲成人a∨在线观看| 日韩精品无码一区二区三区视频| 成激情人妻视频| 偷拍美女上厕所一区二区三区| 国产激情视频一区二区三区| 亚洲性啪啪无码AV天堂| 日韩精品自拍一区二区| 中文人妻熟女乱又乱精品| 正在播放国产对白孕妇作爱| 放荡人妻一区二区三区| av影院手机在线观看| 亚洲国产一区二区a毛片| 国产精品视频免费的| 亚洲国产国语对白在线观看| 午夜射精日本三级|