嵌入式Linux設(shè)備驅(qū)動開發(fā)之:設(shè)備驅(qū)動概述
11.1.5設(shè)備驅(qū)動程序與外界的接口
每種類型的驅(qū)動程序,不管是字符設(shè)備還是塊設(shè)備都為內(nèi)核提供相同的調(diào)用接口,因此內(nèi)核能以相同的方式處理不同的設(shè)備。Linux為每種不同類型的設(shè)備驅(qū)動程序維護相應(yīng)的數(shù)據(jù)結(jié)構(gòu),以便定義統(tǒng)一的接口并實現(xiàn)驅(qū)動程序的可裝載性和動態(tài)性。Linux設(shè)備驅(qū)動程序與外界的接口可以分為如下3個部分。
n 驅(qū)動程序與操作系統(tǒng)內(nèi)核的接口:這是通過數(shù)據(jù)結(jié)構(gòu)file_operations(在本書后面會有詳細介紹)來完成的。
n 驅(qū)動程序與系統(tǒng)引導的接口:這部分利用驅(qū)動程序?qū)υO(shè)備進行初始化。
n 驅(qū)動程序與設(shè)備的接口:這部分描述了驅(qū)動程序如何與設(shè)備進行交互,這與具體設(shè)備密切相關(guān)。
它們之間的相互關(guān)系如圖11.2所示。
圖11.2設(shè)備驅(qū)動程序與外界的接口
11.1.6設(shè)備驅(qū)動程序的特點
綜上所述,Linux中的設(shè)備驅(qū)動程序有如下特點。
(1)內(nèi)核代碼:設(shè)備驅(qū)動程序是內(nèi)核的一部分,如果驅(qū)動程序出錯,則可能導致系統(tǒng)崩潰。
(2)內(nèi)核接口:設(shè)備驅(qū)動程序必須為內(nèi)核或者其子系統(tǒng)提供一個標準接口。比如,一個終端驅(qū)動程序必須為內(nèi)核提供一個文件I/O接口;一個SCSI設(shè)備驅(qū)動程序應(yīng)該為SCSI子系統(tǒng)提供一個SCSI設(shè)備接口,同時SCSI子系統(tǒng)也必須為內(nèi)核提供文件的I/O接口及緩沖區(qū)。
(3)內(nèi)核機制和服務(wù):設(shè)備驅(qū)動程序使用一些標準的內(nèi)核服務(wù),如內(nèi)存分配等。
(4)可裝載:大多數(shù)的Linux操作系統(tǒng)設(shè)備驅(qū)動程序都可以在需要時裝載進內(nèi)核,在不需要時從內(nèi)核中卸載。
(5)可設(shè)置:Linux操作系統(tǒng)設(shè)備驅(qū)動程序可以集成為內(nèi)核的一部分,并可以根據(jù)需要把其中的某一部分集成到內(nèi)核中,這只需要在系統(tǒng)編譯時進行相應(yīng)的設(shè)置即可。
(6)動態(tài)性:在系統(tǒng)啟動且各個設(shè)備驅(qū)動程序初始化后,驅(qū)動程序?qū)⒕S護其控制的設(shè)備。如果該設(shè)備驅(qū)動程序控制的設(shè)備不存在也不影響系統(tǒng)的運行,那么此時的設(shè)備驅(qū)動程序只是多占用了一點系統(tǒng)內(nèi)存罷了。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論