Linux設備驅(qū)動簡介

linux中三種驅(qū)動設備

linux系統(tǒng)將設備分為3類:字符設備箱蝠、塊設備、網(wǎng)絡設備吃粒。


  • 字符設備
    字符設備是能夠像字節(jié)流(類似文件)一樣被訪問的設備巧娱,有字符設備驅(qū)動程序來實現(xiàn)這種特性。字符設備驅(qū)動程序通常至少要實現(xiàn)open逾滥、close峰档、read、write系統(tǒng)調(diào)用寨昙。字符設備可以通過文件系統(tǒng)節(jié)點來訪問讥巡,這些設備文件和普通文件之間的唯一差別在于對普通文件的訪問可以前后移動訪問位置,而大多數(shù)字符設備是一個只能順序訪問的數(shù)據(jù)通道舔哪。一個字符設備是一種字節(jié)流設備欢顷,對設備的存取只能按順序按字節(jié)的存取而不能隨機訪問,字符設備沒有請求緩沖區(qū)捉蚤,所有的訪問請求都是按順序執(zhí)行的抬驴。但事實上現(xiàn)在一些高級字符設備也可以從指定位置一次讀取一塊數(shù)據(jù)。

  • 塊設備
    塊設備也是通過設備節(jié)點來訪問缆巧。塊設備上能夠容納文件系統(tǒng)布持。在大多數(shù)unix系統(tǒng)中,進行I/O操作時塊設備每次只能傳輸一個或多個完整的塊陕悬,而每塊包含512字節(jié)(或更2的更高次冪字節(jié)的數(shù)據(jù))题暖。linux可以讓應用程序向字符設備一樣讀寫塊設備,允許一次傳遞任意多字節(jié)的數(shù)據(jù)捉超。因而胧卤,塊設備和字符設備的區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方式,也就是內(nèi)核及驅(qū)動程序之間的軟件接口狂秦,而這些不同對用戶來講是透明的灌侣。在內(nèi)核中,和字符驅(qū)動程序相比裂问,塊驅(qū)動程序具有完全不同的接口侧啼。存儲設備一 般屬于塊設備,塊設備有請求緩沖區(qū)堪簿,并且支持隨機訪問而不必按照順序去存取數(shù)據(jù)痊乾,比如你可以 先存取后面的數(shù)據(jù),然后在存取前面的數(shù)據(jù)椭更,這對字符設備來說是不可能的哪审。Linux下的磁盤設備都是塊設備,盡管在Linux下有塊設備節(jié)點虑瀑,但應用程序一般是通過文件系統(tǒng)及其高速緩存來訪問塊設備的,而不是直接通過設備節(jié)點來讀寫塊設備上的數(shù)據(jù)湿滓。

  • 網(wǎng)絡設備
    網(wǎng)絡設備不同于字符設備和塊設備滴须,它是面向報文的而不是面向流的,它不支持隨機訪問叽奥,也沒有請求緩沖區(qū)扔水。由于不是面向流的設備,因此將網(wǎng)絡接口映射到文件系統(tǒng)中的節(jié)點比較困難朝氓。內(nèi)核和網(wǎng)絡設備驅(qū)動程序間的通訊魔市,完全不同于內(nèi)核和字符以及塊驅(qū)動程序之間的通訊,內(nèi)核調(diào)用一套和數(shù)據(jù)包傳輸相關(guān)的函數(shù)而不是read赵哲,write待德。網(wǎng)絡接口沒有像字符設備和塊設備一樣的設備號,只有一個唯一的名字枫夺,如eth0将宪、eth1等,而這個名字也不需要與設備文件節(jié)點對應橡庞。

字符設備與塊設備的區(qū)別

  1. 字符設備是面向流的涧偷,最小訪問單位是字節(jié);而塊設備是面向塊的毙死,最小訪問單位是512字節(jié)或2的更高次冪燎潮。
  2. 字符設備只能順序按字節(jié)訪問,而塊設備可隨機訪問扼倘。
  3. 塊設備上可容納文件系統(tǒng)确封,訪問形式上,字符設備通過設備節(jié)點訪問再菊,而塊設備雖然也可通過設備節(jié)點訪問爪喘,但一般是通過文件系統(tǒng)來訪問數(shù)據(jù)的。
  4. 網(wǎng)絡設備沒有設備節(jié)點是因為纠拔,網(wǎng)絡設備是面向報文的秉剑,很難實現(xiàn)相關(guān)read、write等文件讀寫函數(shù)稠诲。所以驅(qū)動的實現(xiàn)也與字符設備和塊設備不同侦鹏。

字符設備與塊設備的區(qū)分

每一個字符設備或者塊設備都在/dev目錄下對應一個設備文件。讀者可以通過查看/dev目錄下的文件的屬性臀叙,來區(qū)分設備是字符設備還是塊設備略水。使用cd命令進入/dev目錄,并執(zhí)行l(wèi)s -l命令就可以看到設備的屬性

[root@tom /]# cd /dev                           /*進入/dev目錄*/  
[root@tom dev]# ls -l                           /*列出/dev中文件的信息*/劝萤、 
 /*第1字段     2    3    4      5    6         7      8  */  
crw-rw----+     1 root root    14,  12  12-21 22:56 adsp  
crw-------      1 root root    10, 175  12-21 22:56 agpgart  
crw-rw----+     1 root root    14,   4  12-21 22:56 audio  
brw-r-----      1 root disk   253,   0  12-21 22:56 dm-0  
brw-r-----      1 root disk   253,   1  12-21 22:56 dm-1  
crw-rw----      1 root root    14,   9  12-21 22:56 dmmidi

ls -l命令的第1個字段中的第1個字符c表示設備是字符設備渊涝,b表示設備是塊設備;
第234字段對驅(qū)動程序開發(fā)來說沒有關(guān)系;
第5跨释,6字段分別表示設備的主設備號和次設備號胸私;
第7字段表示文件的最后修改時間。第8字段表示設備的名字鳖谈。
由第1和8字段可知盖文,adsp是字符設備,dm-0是塊設備蚯姆。其中adsp設備的主設備號是14,次設備號是12洒敏。

混雜設備

在linux系統(tǒng)中龄恋,存在一類字符設備,它們共享一個主設備號(10)凶伙,但次設備號不同郭毕,我們稱這類設備為混雜設備(miscdevice)。所有的混雜設備形成一個鏈表函荣,對設備訪問時內(nèi)核根據(jù)次設備號查找到相應的miscdevice設備显押。

  • 混雜設備與字符驅(qū)動的區(qū)別:
  1. 相對字符驅(qū)動而言,內(nèi)核封裝好了api傻挂,相對更容易開發(fā)乘碑;
  2. 由于只占用一個從設備號,故而每一個驅(qū)動都只能用于一個設備金拒,無法和字符驅(qū)動比兽肤,能夠用于多個設備;


驅(qū)動開發(fā)流程

  1. 查看原理圖绪抛,理解設備的工作原理资铡。
  2. 定義主設備號。
    設備由一個主設備號和一個次設備號來標識幢码。主設備號唯一標識了設備類型笤休,即設備驅(qū)動程序類型,它是塊設備表或字符設備表中設備表項的索引症副。次設備號僅
    由設備驅(qū)動程序解釋店雅,區(qū)分被一個設備驅(qū)動控制下的某個獨立的設備。
  3. 實現(xiàn)初始化函數(shù)贞铣。在驅(qū)動程序中實現(xiàn)驅(qū)動的注冊和卸載底洗。
  4. 設計所要實現(xiàn)的文件操作,定義file--operations結(jié)構(gòu)咕娄。
  5. 實現(xiàn)所需的文件操作調(diào)用亥揖,如read,write等。
  6. 實現(xiàn)中斷服務费变,并用request--irq向內(nèi)核注冊摧扇,中斷并不是每個設備驅(qū)動所必需的。
  7. 編譯該驅(qū)動程序到內(nèi)核中挚歧,或者用insmod命令加載模塊扛稽。
  8. 測試該設備,編寫應用程序滑负,對驅(qū)動程序進行測試在张。

參考

linux驅(qū)動開發(fā)流程
linux設備驅(qū)動第一篇:設備驅(qū)動程序簡介
Linux設備驅(qū)動開發(fā) - 混雜設備驅(qū)動

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市矮慕,隨后出現(xiàn)的幾起案子帮匾,更是在濱河造成了極大的恐慌,老刑警劉巖痴鳄,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟斜,死亡現(xiàn)場離奇詭異,居然都是意外死亡痪寻,警方通過查閱死者的電腦和手機螺句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橡类,“玉大人蛇尚,你說我怎么就攤上這事」嘶” “怎么了佣蓉?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亲雪。 經(jīng)常有香客問我勇凭,道長,這世上最難降的妖魔是什么义辕? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任虾标,我火速辦了婚禮,結(jié)果婚禮上灌砖,老公的妹妹穿的比我還像新娘璧函。我一直安慰自己,他們只是感情好基显,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布蘸吓。 她就那樣靜靜地躺著,像睡著了一般撩幽。 火紅的嫁衣襯著肌膚如雪库继。 梳的紋絲不亂的頭發(fā)上箩艺,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音宪萄,去河邊找鬼艺谆。 笑死,一個胖子當著我的面吹牛拜英,可吹牛的內(nèi)容都是我干的静汤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼居凶,長吁一口氣:“原來是場噩夢啊……” “哼虫给!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侠碧,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤抹估,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舆床,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡嫁佳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年挨队,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿往。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡盛垦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓤漏,到底是詐尸還是另有隱情腾夯,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布蔬充,位于F島的核電站蝶俱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏饥漫。R本人自食惡果不足惜榨呆,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庸队。 院中可真熱鬧积蜻,春花似錦、人聲如沸彻消。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宾尚。三九已至丙笋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背不见。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工澳化, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稳吮。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓缎谷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灶似。 傳聞我的和親對象是個殘疾皇子列林,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容