天天看點

一文帶你走進裝置驅動模型與sysfs

作者:linux上的碼農

裝置驅動模型與sysfs

Linux在2.6版本引入了裝置驅動模型,裝置驅動模型負責統一實作和維護一些特性,諸如:熱插拔、對象生命周期、使用者空間和驅動空間的互動等基礎設施

1.裝置驅動模型基本概念

裝置驅動模型主要包含:類(class)、總線(bus)、裝置(device)、驅動(driver),它們的本質都是核心中的幾種資料結構的“執行個體”

類的本質是class結構體類型,各種不同的類其實就是class的各種執行個體

總線的本質是bus_type結構體類型,各種不同的總線其實就是bus_type的各種執行個體

裝置的本質是device結構體類型,各種不同的裝置其實就是device的各種執行個體

驅動的本質是device_driver結構體類型,各種不同的驅動其實就是device_driver的各種執行個體

2.sysfs基本概念

sysfs其實就是/sys目錄,其主要作用就是:展示裝置驅動模型中各元件的層次關系,并将各元件的本體——核心中的資料結構以檔案形式呈現,友善使用者層檢視及操作

更多linux核心視訊教程文檔資料免費領取背景私信【核心】自行擷取.

一文帶你走進裝置驅動模型與sysfs
一文帶你走進裝置驅動模型與sysfs

Linux核心源碼/記憶體調優/檔案系統/程序管理/裝置驅動/網絡協定棧-學習視訊教程-騰訊課堂

3./sys目錄結構與裝置驅動模型

/sys目錄結構很好的展示了驅動裝置模型,如圖:

一文帶你走進裝置驅動模型與sysfs

注意:同一個裝置可能在/sys中存在多個裝置檔案,比如一顆led的裝置檔案可能在/sys/bus/platform/devices/led1,同時還有一個在/sys/class/leds/led1。雖然他們都是同一顆led的裝置檔案,但是他們的來源、機制、原理都是不同的,不能混為一談

4.各元件的特性與聯系

kobject:裝置驅動模型各執行個體的最基本單元,提供一些公用型服務如: 提供該執行個體在sysfs中的操作方法(show和store);提供在sysfs中以檔案形式存在的屬性,其實就是應用接口;提供各個執行個體的層次架構,讓sysfs中弄出目錄結構。裝置驅動模型中每個執行個體内部都會包含一個kobject

總線、裝置、驅動,這三者有着密切的聯系。在核心中,裝置和驅動是分開注冊的,注冊 裝置的時候,并不需要驅動已經存在,而驅動被注冊的時候,也不需要對應的裝置已經被注冊。而總線就是連接配接裝置和驅動之間的紐帶,如圖:

一文帶你走進裝置驅動模型與sysfs

5.為什麼要讓總線比對驅動和裝置?

這麼做是為了讓算法和資料分離,驅動源碼中不攜帶資料,隻負責算法(對硬體的操作方法);而裝置則負責攜帶硬體資訊。這樣最大程度保持驅動的獨立性和适應性,并且可以實作一個驅動對應多個裝置

- - 核心技術中文網 - 建構全國最權威的核心技術交流分享論壇

轉載位址:一文帶你走進裝置驅動模型與sysfs - 圈點 - 核心技術中文網 - 建構全國最權威的核心技術交流分享論壇

一文帶你走進裝置驅動模型與sysfs