一、驅(qū)動(dòng)程序三種基本類型
字符設(shè)備(Char Device)
塊設(shè)備(Block Device)
網(wǎng)絡(luò)設(shè)備(Net Device)
二、設(shè)備驅(qū)動(dòng)程序功能
對(duì)設(shè)備初始化和釋放
把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)
讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)
檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤
訪問(wèn)特定硬件:
訪問(wèn)特定硬件就是訪問(wèn)物理地址(如處理器內(nèi)設(shè)備的寄存器、外設(shè)的地址映射)。然而由于MMU的內(nèi)存映射以及對(duì)操作系統(tǒng)的保護(hù),運(yùn)行在用戶態(tài)的應(yīng)用程序一般不能直接訪問(wèn)硬件地址。因此需要驅(qū)動(dòng)程序作為應(yīng)用程序和訪問(wèn)硬件之間的媒介。
三、驅(qū)動(dòng)程序的內(nèi)核模塊機(jī)制(開(kāi)發(fā)模式)
靜態(tài)編譯、動(dòng)態(tài)加載
Linux提供了一種內(nèi)核模塊機(jī)制。一個(gè)模塊被編譯成單獨(dú)的內(nèi)核模塊后,一開(kāi)始可以不編譯到整個(gè)內(nèi)核中,當(dāng)內(nèi)核需要加入該模塊的時(shí)候,不需要重新編譯整個(gè)內(nèi)核,只需要將該內(nèi)核模塊插入(加載)到正在運(yùn)行的內(nèi)核中。同樣,也可以從正在運(yùn)行的內(nèi)核中卸載。
Linux設(shè)備驅(qū)動(dòng)可以使用兩種方式被編譯和加載:
直接編譯到Linux內(nèi)核,隨Linux啟動(dòng)時(shí)加載,隨時(shí)可以使用該驅(qū)動(dòng)程序;
編譯成一個(gè)可加載和刪除的模塊,用insmod加載,rmmod刪除。

四、驅(qū)動(dòng)程序框架
三個(gè)主要部分
1、設(shè)備初始化/釋放:
負(fù)責(zé)對(duì)設(shè)備進(jìn)行初始化和釋放
初始化檢測(cè)所要驅(qū)動(dòng)的硬件設(shè)備是否存在、能否正常工作。如果設(shè)備正常,則對(duì)設(shè)備及相關(guān)驅(qū)動(dòng)程序
需要的軟件狀態(tài)進(jìn)行配置/初始化。
2、上半部分:服務(wù)于文件系統(tǒng)I/O
負(fù)責(zé):通過(guò)文件系統(tǒng)從應(yīng)用程序讀取數(shù)據(jù),把數(shù)據(jù)通過(guò)文件系統(tǒng)回送給應(yīng)用程序(文件系統(tǒng)層<->設(shè)備驅(qū)動(dòng)層)
這部分由文件系統(tǒng)相關(guān)的系統(tǒng)調(diào)用執(zhí)行,和調(diào)用進(jìn)程屬于同一個(gè)進(jìn)程,具有調(diào)用進(jìn)程的運(yùn)行環(huán)境,只是由用戶態(tài)變成了內(nèi)核態(tài)。
3、下半部分:服務(wù)于硬件設(shè)備的I/O
負(fù)責(zé):把數(shù)據(jù)從內(nèi)核傳送到硬件,從硬件讀取數(shù)據(jù)到內(nèi)核(設(shè)備驅(qū)動(dòng)曾<->硬件層)
這部分可以通過(guò)中斷方式實(shí)現(xiàn),對(duì)于多數(shù)設(shè)備可以提高CPU處理效率。
這部分也可以不通過(guò)中斷方式實(shí)現(xiàn),只要能完成設(shè)備驅(qū)動(dòng)層和硬件之間的數(shù)據(jù)通信即可。

1、字符設(shè)備驅(qū)動(dòng)程序框架

2、塊設(shè)備驅(qū)動(dòng)程序框架

3、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序框架

審核編輯:彭菁
-
模塊
+關(guān)注
關(guān)注
7文章
2823瀏覽量
52854 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7316瀏覽量
94048 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7338瀏覽量
128742 -
硬件
+關(guān)注
關(guān)注
11文章
3558瀏覽量
68778 -
Linux驅(qū)動(dòng)
+關(guān)注
關(guān)注
0文章
46瀏覽量
10438
原文標(biāo)題:Linux系統(tǒng)中驅(qū)動(dòng)框架基本概述
文章出處:【微信號(hào):嵌入式開(kāi)發(fā)愛(ài)好者,微信公眾號(hào):嵌入式開(kāi)發(fā)愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux之PWM驅(qū)動(dòng)
linux驅(qū)動(dòng)框架是什么
Linux 驅(qū)動(dòng) = 軟件框架 + 硬件操作
想要駕馭Linux驅(qū)動(dòng)開(kāi)發(fā),必須深刻理解Linux總線設(shè)備驅(qū)動(dòng)框架
Linux DMA Engine框架的介紹
你對(duì)Linux總線設(shè)備驅(qū)動(dòng)框架是否了解
如何使用Linux內(nèi)核實(shí)現(xiàn)USB驅(qū)動(dòng)程序框架
OpenHarmony系統(tǒng)HDF驅(qū)動(dòng)框架概述
OpenHarmony HDF 驅(qū)動(dòng)框架概述及加載過(guò)程分析
嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)從基礎(chǔ)到框架
看看Linux為相機(jī)提供的驅(qū)動(dòng)框架
Linux的PWM驅(qū)動(dòng)框架及實(shí)現(xiàn)方法
Linux驅(qū)動(dòng)分析之RTC框架
Linux Regmap 驅(qū)動(dòng)框架

Linux驅(qū)動(dòng)框架以及概述
評(píng)論