Linux设备驱动模型2——总线式设备驱动组织方式
以下內(nèi)容源于朱有鵬嵌入式課程的學習,如有侵權(quán),請告知刪除。
更深入理解資料:http://blog.csdn.net/oqqhutu12345678/article/details/78933386
1、總線
(1)物理上的真實總線及其作用(英文bus);
(2)驅(qū)動框架中的總線式設(shè)計;
- 相當于中間的管理者,管理設(shè)備和驅(qū)動,包括兩者的匹配等內(nèi)容。
(3)bus_type結(jié)構(gòu)體
- 關(guān)鍵是match函數(shù)(負責設(shè)備和驅(qū)動的匹配)和uevent函數(shù)。
(4)總線管理設(shè)備(有一個設(shè)備鏈表)、驅(qū)動(有一個驅(qū)動鏈表)
- 它們之間通過名字來匹配。
2、設(shè)備
(1)struct device是硬件設(shè)備在內(nèi)核驅(qū)動框架中的抽象;
(2)device_register,由內(nèi)核開發(fā)者提供的框架提供,用于向內(nèi)核驅(qū)動框架注冊一個設(shè)備;
(3)通常device不會單獨使用,而是被包含在一個具體設(shè)備結(jié)構(gòu)體中,如struct usb_device。
3、驅(qū)動
(1)struct device_driver是驅(qū)動程序在內(nèi)核驅(qū)動框架中的抽象;
(2)關(guān)鍵元素1:name
- 驅(qū)動程序的名字,很重要,經(jīng)常被用來作為驅(qū)動和設(shè)備的匹配依據(jù);
(3)關(guān)鍵元素2:probe
- 驅(qū)動程序的探測函數(shù),用來檢測一個設(shè)備是否可以被該驅(qū)動所管理(該設(shè)備是否正常、以及一些初始化,見頂頭的博文描述);
4、類
(1)相關(guān)結(jié)構(gòu)體:struct class(類) 和 struct class_device(類下面的某個設(shè)備)
(2)udev的使用離不開class;
(3)class的真正意義在于作為同屬于一個class的多個設(shè)備的容器。
- 也就是說,class是一種人造概念,目的就是為了對各種設(shè)備進行分類管理。
- 當然,class在分類的同時還對每個類貼上了一些“標簽”,這也是設(shè)備驅(qū)動模型為我們寫驅(qū)動提供的基礎(chǔ)設(shè)施。
5、總結(jié)
(1)模型思想很重要,其實就是面向?qū)ο蟮乃枷?/strong>;
(2)全是結(jié)構(gòu)體套結(jié)構(gòu)體,對基本功(語言功底和大腦復雜度)要求很高
總結(jié)
以上是生活随笔為你收集整理的Linux设备驱动模型2——总线式设备驱动组织方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keil4如何设置自动缩进_在Keil中
- 下一篇: Linux设备驱动模型4——平台总线实践