一、驅(qū)動(dòng)程序三種基本類型
字符設(shè)備(Char Device)
塊設(shè)備(Block Device)
網(wǎng)絡(luò)設(shè)備(Net Device)
二、設(shè)備驅(qū)動(dòng)程序功能
對設(shè)備初始化和釋放
把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)
讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù)
檢測和處理設(shè)備出現(xiàn)的錯(cuò)誤
訪問特定硬件:
訪問特定硬件就是訪問物理地址(如處理器內(nèi)設(shè)備的寄存器、外設(shè)的地址映射)。然而由于MMU的內(nèi)存映射以及對操作系統(tǒng)的保護(hù),運(yùn)行在用戶態(tài)的應(yīng)用程序一般不能直接訪問硬件地址。因此需要驅(qū)動(dòng)程序作為應(yīng)用程序和訪問硬件之間的媒介。
三、驅(qū)動(dòng)程序的內(nèi)核模塊機(jī)制(開發(fā)模式)
靜態(tài)編譯、動(dòng)態(tài)加載
Linux提供了一種內(nèi)核模塊機(jī)制。一個(gè)模塊被編譯成單獨(dú)的內(nè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é)對設(shè)備進(jìn)行初始化和釋放
初始化檢測所要驅(qū)動(dòng)的硬件設(shè)備是否存在、能否正常工作。如果設(shè)備正常,則對設(shè)備及相關(guān)驅(qū)動(dòng)程序
需要的軟件狀態(tài)進(jìn)行配置/初始化。
2、上半部分:服務(wù)于文件系統(tǒng)I/O
負(fù)責(zé):通過文件系統(tǒng)從應(yīng)用程序讀取數(shù)據(jù),把數(shù)據(jù)通過文件系統(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)曾<->硬件層)
這部分可以通過中斷方式實(shí)現(xiàn),對于多數(shù)設(shè)備可以提高CPU處理效率。
這部分也可以不通過中斷方式實(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文章
2788瀏覽量
50417 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91899 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7152瀏覽量
125613 -
硬件
+關(guān)注
關(guān)注
11文章
3484瀏覽量
67511 -
Linux驅(qū)動(dòng)
+關(guān)注
關(guān)注
0文章
43瀏覽量
10251
原文標(biāo)題:Linux系統(tǒng)中驅(qū)動(dòng)框架基本概述
文章出處:【微信號:嵌入式開發(fā)愛好者,微信公眾號:嵌入式開發(fā)愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Linux之PWM驅(qū)動(dòng)

linux驅(qū)動(dòng)框架是什么
Linux 驅(qū)動(dòng) = 軟件框架 + 硬件操作
想要駕馭Linux驅(qū)動(dòng)開發(fā),必須深刻理解Linux總線設(shè)備驅(qū)動(dòng)框架

Linux DMA Engine框架的介紹
你對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)框架概述及加載過程分析

嵌入式Linux驅(qū)動(dòng)開發(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)框架

評論