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

        ?

        嵌入式Linux驅(qū)動程序框架研究綜述*

        2012-11-07 02:56:14戴明華李長云曾志浩崔海燕
        長沙大學(xué)學(xué)報 2012年2期
        關(guān)鍵詞:網(wǎng)絡(luò)設(shè)備驅(qū)動程序字符

        戴明華,李長云,曾志浩,崔海燕

        (湖南工業(yè)大學(xué)計算機(jī)與通信學(xué)院,湖南 株洲 412008)

        嵌入式Linux驅(qū)動程序框架研究綜述*

        戴明華,李長云,曾志浩,崔海燕

        (湖南工業(yè)大學(xué)計算機(jī)與通信學(xué)院,湖南 株洲 412008)

        嵌入式Linux的驅(qū)動框架能縮短開發(fā)周期,因此構(gòu)建框架對驅(qū)動開發(fā)有著很重要的意義.介紹了目前驅(qū)動研究現(xiàn)狀,闡述了構(gòu)建嵌入式Linux驅(qū)動框架的方式并進(jìn)行了評價,探析了未來基于Linux內(nèi)核的Android操作系統(tǒng)的驅(qū)動框架實現(xiàn).

        嵌入式驅(qū)動框架;Android驅(qū)動;實現(xiàn)方法;可移植

        以嵌入式操作系統(tǒng)為核心的嵌入式系統(tǒng),能運(yùn)行于各種不同體系結(jié)構(gòu)的微處理器上,兼容性好,內(nèi)核體積小,效率比較高,具有高度的模塊化和可擴(kuò)展性.對設(shè)備的支持需要相應(yīng)的驅(qū)動程序.嵌入式 Linux是以Linux為基礎(chǔ)的嵌入式系統(tǒng),在原來的Linux基礎(chǔ)上裁剪而成的精簡的操作系統(tǒng),它被廣泛應(yīng)用在移動電話、機(jī)頂盒、數(shù)據(jù)網(wǎng)絡(luò)、遠(yuǎn)程通信、醫(yī)療電子、交通運(yùn)輸計算機(jī)外設(shè)、工業(yè)控制、媒體播放器、消費(fèi)性電子產(chǎn)品以及航空航天等領(lǐng)域中.目前,嵌入式Linux開發(fā)主要集中在設(shè)備驅(qū)動開發(fā)上;在嵌入式Linux中,驅(qū)動占有內(nèi)核代碼的70%以上,驅(qū)動開發(fā)的質(zhì)量關(guān)系到整個系統(tǒng)的穩(wěn)定[1],大多數(shù)驅(qū)動沒有標(biāo)準(zhǔn)化,在移植的時候,驅(qū)動代碼一般由硬件制造者而不是專業(yè)內(nèi)核編程者編寫.由于Linux驅(qū)動和內(nèi)核共享地址空間等原因造成移植開發(fā)的驅(qū)動穩(wěn)定性不夠[2],為了更快且較穩(wěn)定地開發(fā)驅(qū)動,建立驅(qū)動框架來減少開發(fā)周期和增強(qiáng)穩(wěn)定性就很有研究價值.本文非常全面地介紹了嵌入式驅(qū)動程序框架,分析優(yōu)點的同時也對框架存在的問題和未來研究方向提出了我們的觀點.

        1 嵌入式Linux驅(qū)動程序研究現(xiàn)狀

        1.1 嵌入式Linux相關(guān)概念

        嵌入式Linux驅(qū)動程序是操作系統(tǒng)內(nèi)核和硬件之間的接口,連接硬件設(shè)備和文件系統(tǒng),是硬件的一部分特殊響應(yīng)定義好的內(nèi)部編程接口.硬件設(shè)備在Linux看來只是一個設(shè)備文件,這些文件一般稱作設(shè)備文件,使得應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作.嵌入式Linux系統(tǒng)的驅(qū)動程序分為字符設(shè)備驅(qū)動、塊設(shè)備驅(qū)動和網(wǎng)絡(luò)設(shè)備驅(qū)動三種,字符設(shè)備是指存取時沒有緩存的設(shè)備;塊設(shè)備的讀寫都有緩存來支持,并且塊設(shè)備必須能夠隨機(jī)存取.典型的字符設(shè)備包括鼠標(biāo)、鍵盤、串行口、音頻設(shè)備等.塊設(shè)備主要包括硬盤軟盤設(shè)備、CD-ROM以及各種flash等.

        1.2 嵌入式Linux設(shè)備驅(qū)動程序的編寫

        設(shè)備驅(qū)動是作為文件系統(tǒng)的一個模塊存在的,它既負(fù)責(zé)和硬件的交互,同時通過掛載在文件系統(tǒng)上和內(nèi)核聯(lián)系起來.

        驅(qū)動程序的構(gòu)成主要包括三個重要部分[3]:1)初始化.在靜態(tài)鏈接驅(qū)動中由__init修飾的函數(shù)和在可加載驅(qū)動中用入口點函數(shù)init_module()對驅(qū)動進(jìn)行初始化,初始化包括硬件相關(guān)參數(shù)、申請內(nèi)存、注冊.2)獨(dú)立的設(shè)備的接口.該接口由struct file_operations這個數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),系統(tǒng)調(diào)用和驅(qū)動程序通過數(shù)據(jù)結(jié)構(gòu)struct file_operations聯(lián)系起來.這個結(jié)構(gòu)的每一個成員的名字都對應(yīng)著一個系統(tǒng)調(diào)用,系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號找到相應(yīng)的設(shè)備驅(qū)動程序.3)硬件相關(guān)部分.這一部分和硬件直接相關(guān),包括I/O服務(wù)和中斷服務(wù).

        這是Linux的設(shè)備驅(qū)動程序編寫工作的基本原理.因此設(shè)備驅(qū)動程序的實現(xiàn)首先要初始化,然后實現(xiàn)file_operations的各個域,最后靜態(tài)鏈接或動態(tài)加載驅(qū)動程序.

        1.3 嵌入式Linux框架的實現(xiàn)方式

        框架的方式一種是從驅(qū)動開發(fā)的角度,從同類型設(shè)備中找出相似點,包括數(shù)據(jù)結(jié)構(gòu)、接口函數(shù)、注冊與注銷函數(shù)、中斷的申請與釋放函數(shù),使用模塊化編程思想.

        另一種是從面向?qū)ο蟮慕嵌龋?qū)動中建立可重用的類庫,用來封裝常用的數(shù)據(jù)結(jié)構(gòu)和算法,將程序的加載、初始化、卸載等相關(guān)流程進(jìn)行封裝管理[4].

        2 嵌入式Linux驅(qū)動程序框架實現(xiàn)方法

        從能否動態(tài)加載的角度看,Linux中的驅(qū)動程序可分為可動態(tài)加載和卸載的內(nèi)核模塊和靜態(tài)鏈接的內(nèi)核,而根據(jù)Linux對驅(qū)動的管理方式則可以把驅(qū)動分為字符驅(qū)動、塊設(shè)備驅(qū)動和網(wǎng)絡(luò)驅(qū)動,應(yīng)用程序?qū)ψ址O(shè)備的每一個I/O操作,都會傳遞給系統(tǒng)內(nèi)核對應(yīng)的驅(qū)動程序,而對于塊設(shè)備的操作,要經(jīng)過系統(tǒng)的緩沖區(qū)管理,間接傳遞給驅(qū)動程序處理.網(wǎng)絡(luò)驅(qū)動則是基于BSD UNIX的套接字機(jī)制,在系統(tǒng)和驅(qū)動程序之間定義有專門的數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)傳輸,系統(tǒng)提供流量控制機(jī)制和多協(xié)議支持.可見字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備所用的驅(qū)動差別很大,因此在構(gòu)建驅(qū)動框架的時候分類型構(gòu)建框架更加容易找到通性.

        2.1 字符框架

        字符設(shè)備驅(qū)動程序是最基本、最常用的驅(qū)動程序結(jié)構(gòu),只要是不掛載文件系統(tǒng)的設(shè)備,都可以用字符設(shè)備去描述.

        一個字符設(shè)備是一種可以當(dāng)作一個字節(jié)流來存取的設(shè)備就如同一個文件,這樣的驅(qū)動常常實現(xiàn)常用的系統(tǒng)調(diào)用,串口是最為常見的字符設(shè)備,它很好地展現(xiàn)了字節(jié)流的抽象.字符設(shè)備通過文件系統(tǒng)結(jié)點來存取,相對于可以隨機(jī)存取普通文件,字符設(shè)備僅僅是數(shù)據(jù)通道,因此只能順序存取.

        文獻(xiàn)[5]給出嵌入式設(shè)備驅(qū)動驅(qū)動程序的共性,包括:讀、寫、中斷、時鐘.實現(xiàn)嵌入式設(shè)備驅(qū)動流程,總結(jié)了傳統(tǒng)驅(qū)動基本組成部分:模塊初始化函數(shù);模塊卸載函數(shù);設(shè)備驅(qū)動程序接口,李健等人[6]在基于嵌入式實時操作系統(tǒng)的驅(qū)動框架中通過屏蔽底層硬件處理器、規(guī)范總線接口、抽象設(shè)備訪問接口,結(jié)合設(shè)備驅(qū)動表、設(shè)備表、文件描述符表、總線驅(qū)動支持、設(shè)備中斷處理機(jī)制給出設(shè)備驅(qū)動基本框架.該驅(qū)動框架包括1、I/O標(biāo)準(zhǔn)接口2、文件描述符管理3、設(shè)備表、驅(qū)動表4、文件系統(tǒng)管理5、通信協(xié)議層6、協(xié)議適配層7、底層驅(qū)動層8、實時操作系統(tǒng)支持接口.該框架支持了目前主流的總線及設(shè)備,支持集成了傳統(tǒng)I/O系統(tǒng)的文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等模塊,能夠支持各種設(shè)備,又能使各子系統(tǒng)信息互通,增強(qiáng)了可移植性.

        文獻(xiàn)[4]從代碼的可重用的角度出發(fā),用面向?qū)ο蟮姆椒?,封裝對驅(qū)動生命周期和行為管理的驅(qū)動框架,將C++語言引入到內(nèi)核中,加速了開發(fā)速度,該方法改變了傳統(tǒng)上使用c語言開發(fā)內(nèi)核,使用c++來實現(xiàn)驅(qū)動與內(nèi)核的兼容,內(nèi)核能對c++編碼的驅(qū)動進(jìn)行加載卸載,同時,c++的繼承等重要特性依然保留在驅(qū)動程序中.

        在字符程序的框架中,按照代碼的框架來寫只適合用來開發(fā)比較簡單的驅(qū)動,在復(fù)雜驅(qū)動的開發(fā)中,至少要使用文獻(xiàn)[6]中的框架或者用可重用的面向?qū)ο蟮姆椒ǎ拍懿会槍γ恳粋€具體的硬件作出大范圍的修改,硬件開發(fā)者也不需要了解太多關(guān)于硬件的細(xì)節(jié)也可進(jìn)行驅(qū)動的開發(fā).

        2.2 塊設(shè)備框架

        關(guān)于塊設(shè)備驅(qū)動的研究甚少,主要由于有部分塊設(shè)備驅(qū)動可以用字符驅(qū)動形式來開發(fā),如PCI、LCD等.

        在塊設(shè)備中比較典型的有flash,它由于芯片的存儲布局以及存儲操作與字符型完全不同,不能按照字符型設(shè)備驅(qū)動進(jìn)行開發(fā).以flash為例,驅(qū)動主要功能包括[7]:初始化、用接口函數(shù)和內(nèi)核函數(shù)完成內(nèi)核與用戶之間的數(shù)據(jù)交換以及檢測設(shè)備錯誤信息.塊設(shè)備都以塊作為單位進(jìn)行數(shù)據(jù)讀寫,要構(gòu)建緩存來存放臨時數(shù)據(jù),塊設(shè)備中大容量的數(shù)據(jù)使得糾錯機(jī)制成為塊設(shè)備驅(qū)動不可忽視的一部分[8].

        2.3 網(wǎng)絡(luò)設(shè)備框架

        網(wǎng)絡(luò)設(shè)備與字符與塊這兩種I/O驅(qū)動完全不同,在Linux里有專門的處理機(jī)制.Linux的網(wǎng)絡(luò)系統(tǒng)主要是基于BSD unix的socket機(jī)制.系統(tǒng)支持對發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的緩存,提供流量控制機(jī)制,提供對多協(xié)議的支持.文獻(xiàn)[9]中網(wǎng)絡(luò)設(shè)備驅(qū)動體系結(jié)構(gòu)可以分為四個層次,即協(xié)議接口、網(wǎng)絡(luò)設(shè)備接口、驅(qū)動功能層、網(wǎng)絡(luò)媒介,網(wǎng)絡(luò)設(shè)備被抽象為一個接口,是一個對網(wǎng)絡(luò)設(shè)備的操作集合.如下圖:

        圖1 網(wǎng)絡(luò)設(shè)備驅(qū)動體系結(jié)構(gòu)圖

        從Linux的結(jié)構(gòu)來看,Linux所有網(wǎng)絡(luò)驅(qū)動程序都使用了通用的接口,每個設(shè)備都有自己的數(shù)據(jù)和方法,對于網(wǎng)絡(luò)設(shè)備程序,由于Linux網(wǎng)絡(luò)的驅(qū)動程序結(jié)構(gòu)本來有網(wǎng)絡(luò)協(xié)議接口、網(wǎng)絡(luò)設(shè)備接口,提供實際功能的功能層、網(wǎng)絡(luò)設(shè)備媒介,因此在網(wǎng)絡(luò)框架上都是在原來的基礎(chǔ)上略加改進(jìn).

        3 總結(jié)與展望

        從Linux的出現(xiàn)到學(xué)者開始在Linux架構(gòu)的基礎(chǔ)上開始驅(qū)動的改進(jìn)和驅(qū)動新框架的提出,Linux的三大類驅(qū)動都產(chǎn)生了新的開發(fā)方式.

        本文介紹了驅(qū)動的相關(guān)概念,闡述了驅(qū)動的構(gòu)成,同時從諸多文獻(xiàn)實現(xiàn)框架的方式中,綜合了各種類型驅(qū)動的框架結(jié)構(gòu),進(jìn)行了相應(yīng)評價.現(xiàn)在基于Linux內(nèi)核的嵌入式操作系統(tǒng)正在興起,這些操作系統(tǒng)下的驅(qū)動有著和Linux相似之處.因此,Linux驅(qū)動框架的研究能夠推動其它如Android嵌入式操作系統(tǒng)驅(qū)動框架的研究.

        Android內(nèi)核是在標(biāo)準(zhǔn)Linux內(nèi)核的基礎(chǔ)上修改而成的且適應(yīng)嵌入式硬件環(huán)境.Android驅(qū)動框架的形成增強(qiáng)了可移植性,提高了效率.由于這是在底層開發(fā),因此在框架構(gòu)建和可移植性上,主要有以下兩個需要了解:

        Android不同于Linux主要體現(xiàn)在沒有使用Linux的C庫——glibc,增加了模擬CPU和文件系統(tǒng).在驅(qū)動支持方面,既開發(fā)了基于OpenBinder框架的Android Binder驅(qū)動,還擁有電源管理、低內(nèi)存匿名共享、連續(xù)物理內(nèi)存等專有驅(qū)動.在Android系統(tǒng)中,需要有基本的屏幕、觸摸屏、鍵盤等驅(qū)動程序,以及音頻、攝像頭、Event、電話的 Modem、Wifi、藍(lán)牙等多種設(shè)備驅(qū)動程序.當(dāng)進(jìn)行嵌入式軟件開發(fā)時,可移植性是要重點考慮的問題.良好的軟件移植性應(yīng)該比較好,減少與外圍設(shè)備的相關(guān)性.軟件的通用性和軟件的性能通常是矛盾的.Linux驅(qū)動研究比較充分,而以Linux為內(nèi)核的其它操作系統(tǒng)開始發(fā)展,因此研究應(yīng)以Linux驅(qū)動框架的研究為基礎(chǔ).

        [1]Chou A,Yang J,Chelf B,et al.An empiracle study of operating system errors[J].ACM SIGOPS Operating Systems Review,2001,(5):73-88.

        [2]Herder J N,Bos H,Gras B,et al.Construction of a highly dependable operating system[A].Proceedings of the Sixth European Dependable Computing Conference[C].Coimbria:IEEE,2006.

        [3]梁金千,張躍,甄成.Linux設(shè)備驅(qū)動程序架構(gòu)的研究[J].計算機(jī)工程與應(yīng)用,2002,(8):119 -122.

        [4]袁麗慧,彭磊.可重用 Linux設(shè)備驅(qū)動程序框架[J].計算機(jī)工程,2008,(10):89 -94.

        [5]李橋.嵌入式Linux設(shè)備驅(qū)動程序的開發(fā)研究[J].計算機(jī)與數(shù)字工程,2009,(2):87 -97.

        [6]李健,李明祿,張激,等.基于嵌入式實時操作系統(tǒng)的驅(qū)動框架[J].計算機(jī)工程,2007,(21):273 -275.

        [7]李勝朝,黃先祥,周召發(fā).嵌入式Linux下塊設(shè)備驅(qū)動程序的開發(fā)[J].機(jī)電工程技術(shù),2007,(6):26 -28.

        [8]鄭千洪,王黎,高曉蓉.嵌入式平臺上NAND FLASH的驅(qū)動實現(xiàn)[J].微計算機(jī)信息,2009,(11):103 -105.

        [9]張俊才,馬強(qiáng).Linux下網(wǎng)絡(luò)設(shè)備驅(qū)動程序研究[J].實驗科學(xué)與技術(shù),2008,(4):51 -53.

        TP311

        A

        1008-4681(2012)02-0052-02

        2011-12-06

        戴明華(1985-),男,湖南寧鄉(xiāng)人,湖南工業(yè)大學(xué)計算機(jī)與通信學(xué)院碩士生.研究方向:可信軟件.

        (責(zé)任編校:晴川)

        猜你喜歡
        網(wǎng)絡(luò)設(shè)備驅(qū)動程序字符
        尋找更強(qiáng)的字符映射管理器
        一種基于C# 的網(wǎng)絡(luò)設(shè)備自動化登錄工具的研制
        字符代表幾
        一種USB接口字符液晶控制器設(shè)計
        電子制作(2019年19期)2019-11-23 08:41:50
        消失的殖民村莊和神秘字符
        數(shù)據(jù)中心唯“快”不破
        基于列車監(jiān)測網(wǎng)絡(luò)設(shè)備的射頻功放模塊設(shè)計
        基于三層交換技術(shù)架構(gòu)數(shù)字化校園網(wǎng)絡(luò)設(shè)備的配置與管理
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        久久国产女同一区二区| 免费1级做爰片1000部视频| 亚洲综合久久精品无码色欲| 激情亚洲一区国产精品| 欧洲国产成人精品91铁牛tv| 色婷婷综合久久久久中文| 亚洲日韩图片专区小说专区| 中国免费一级毛片| 中文字幕人妻被公喝醉在线| 一级r片内射视频播放免费| 大屁股人妻女教师撅着屁股| 少妇被躁爽到高潮无码文| 欧美性xxx久久| 五月激情在线观看视频| 所有视频在线观看免费| 337p人体粉嫩胞高清视频| 亚洲精品无码不卡av| 日韩精品无码久久久久久| 亚州五十路伊人网| 亚洲熟妇av一区二区三区hd| 老熟妇乱子伦牲交视频| 人人爽人人澡人人人妻| 在线a亚洲视频播放在线观看| 亚洲国产日韩av一区二区| 亚洲国产区中文在线观看| 亚洲av中文无码乱人伦在线视色| 欧美另类高清zo欧美| 2022国内精品免费福利视频| 亚洲全国最大的人成网站| 日韩中文字幕在线观看一区| 欧美精品亚洲精品日韩专区| 亚洲黄色电影| 亚洲成av人片在线天堂无| 国产精品一区二区三区播放| 特黄熟妇丰满人妻无码| 亚洲狠狠婷婷综合久久| 中文字幕一区二区网站| 一区二区二区三区亚洲| 国产做国产爱免费视频| 国产精品后入内射日本在线观看 | 日本一极品久久99精品|