Linux设备驱动模型1——简介和底层架构
以下內(nèi)容源于朱有鵬《物聯(lián)網(wǎng)大講堂》課程的學習整理,如有侵權,請告知刪除。
一、linux設備驅動模型簡介
1、什么是設備驅動模型?
(1)類class、總線bus、設備device、驅動driver;
- 分別對應四個結構體,用來表述這四個概念。
(2)kobject(結構體)和對象生命周期
- 高度抽象的結構體,表示內(nèi)核的一個總的父類。
(3)sysfs
(4)udev
2、為什么需要設備驅動模型?
- 早期內(nèi)核(2.4之前)沒有統(tǒng)一的設備驅動模型,但照樣可以用(那時候設備比較少);
- 2.6版本中正式引入設備驅動模型,目的是在設備越來越多,功耗要求等新特性要求的情況下讓驅動體系更易用、更優(yōu)秀。
- 設備驅動模型負責統(tǒng)一實現(xiàn)和維護一些特性,諸如:電源管理、熱插拔、對象生命周期、用戶空間和驅動空間的交互等基礎設施。
- 設備驅動模型目的:簡化驅動程序編寫,但是客觀上設備驅動模型本身設計和實現(xiàn)很復雜。
3、驅動開發(fā)的2個點
- 驅動源碼本身編寫、調(diào)試,重點在于對硬件的了解。
- 驅動什么時候被安裝、驅動中的函數(shù)什么時候被調(diào)用,怎樣被調(diào)用(比如probe()函數(shù)還是直接調(diào)用?)。之前是寫應用程序來安裝,現(xiàn)在希望自動安裝、卸載(熱插拔),這些跟硬件無關,完全和設備驅動模型有關。
二、設備驅動模型的底層架構
三個結構體
1、kobject
(1)定義在linux/kobject.h中,是最基本的結構體,被其他結構體作為元素。
(2)各種對象最基本單元,提供一些公用型服務如
- 對象引用計數(shù)(引用計數(shù)為0時,可以釋放,生命周期結束);
- 維護對象鏈表(因此可以遍歷);
- 對象上鎖(占用對象資源,不被其他占用);
- 對用戶空間的表示;
(3)設備驅動模型中的各種對象其內(nèi)部都會包含一個kobject(作為元素)。
- 因此各對象可以使用kobject所提供的功能。
- 地位相當于面向對象體系架構中的總基類。
2、kobj_type
(1)很多書中簡稱為ktype,每一個kobject都需要綁定(即用一個指針指向,而不是作為子元素)一個ktype來提供相應的功能;
(2)關鍵點1:sysfs_ops,提供該對象在sysfs中的操作方法(show和store);
(3)關鍵點2:attribute,提供在sysfs中以文件形式存在的屬性,其實就是應用接口;
(4)release函數(shù),查看引用計數(shù),去釋放對象所占用的內(nèi)存。
(5)總結:提供屬性文件,提供/sys/……操作方法。
3、kset
(1)kset的主要作用是做頂層kobject的容器類。
(2)kset的主要目的是將各個kobject(代表著各個對象)組織出目錄層次架構。
(3)可以認為kset就是為了在sysfs中弄出目錄,從而讓(設備驅動模型中的)多個對象能夠有層次有邏輯性的組織在一起。
總而言之,以上三個內(nèi)容是/sys/下所有的內(nèi)容的實現(xiàn)機制。包括目錄的組織,操作方法,數(shù)據(jù)結構等。
總結
以上是生活随笔為你收集整理的Linux设备驱动模型1——简介和底层架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (客户端)发送请求====>(到服务器端
- 下一篇: linux shell 判断ELF文件,