應(yīng)用程序與庫(kù)函數(shù)、內(nèi)核、驅(qū)動(dòng)之間的關(guān)系 應(yīng)用程序、庫(kù)、內(nèi)核、驅(qū)動(dòng)程序的關(guān)系:應(yīng)用程序調(diào)用應(yīng)用程序函數(shù)庫(kù)完成功能、應(yīng)用程序以文件形式訪問各種資源、應(yīng)用程序函數(shù)庫(kù)、部分函數(shù)直接完成功能、部分函數(shù)通過系統(tǒng)調(diào)用。 由內(nèi)核完成內(nèi)核處理系統(tǒng)調(diào)用。
它們之間的關(guān)系如下圖所示 設(shè)備類型: 常見的設(shè)備有三類:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。 字符設(shè)備:對(duì)字符設(shè)備發(fā)出讀/寫請(qǐng)求時(shí),實(shí)際的硬件I/O操作一般緊接著發(fā)生。 塊設(shè)備:塊設(shè)備與之相反,它利用系統(tǒng)內(nèi)存作為緩沖區(qū)。 網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備是一類特殊的設(shè)備,它不像字符設(shè)備或塊設(shè)備那樣通過對(duì)應(yīng)的設(shè)備文件節(jié)點(diǎn)訪問,也不能直接通過read或write進(jìn)行數(shù)據(jù)訪問請(qǐng)求。
設(shè)備號(hào) 硬件設(shè)備以主設(shè)備號(hào)和從設(shè)備號(hào)區(qū)分。在設(shè)備管理中,除了設(shè)備類型外,內(nèi)核還需要對(duì)被稱為主從設(shè)備號(hào)的參數(shù),才能唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,從設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。在/dev目錄下使用ll命令(ls -l)可以查看各個(gè)設(shè)備的設(shè)備類型、主從設(shè)備號(hào)等。cat /proc/devices可以查看系統(tǒng)中所有設(shè)備對(duì)應(yīng)的主設(shè)備號(hào)。
設(shè)備文件 設(shè)備類型、主從設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)使用的,應(yīng)用程序使用設(shè)備文件節(jié)點(diǎn)訪問對(duì)應(yīng)設(shè)備。Linux 2.4引入了設(shè)備文件系統(tǒng)(devfs)所有的設(shè)備文件作為一個(gè)可以掛載的文件系統(tǒng),每個(gè)主從設(shè)備號(hào)確定的設(shè)備都對(duì)應(yīng)一個(gè)文件節(jié)點(diǎn)。每個(gè)設(shè)備文件都有其文件屬性(c代表字符設(shè)備或者b代表塊設(shè)備),都有2個(gè)設(shè)備號(hào):1、主設(shè)備號(hào),用于標(biāo)識(shí)驅(qū)動(dòng)程序;2、從設(shè)備號(hào):用于標(biāo)識(shí)同一驅(qū)動(dòng)程序的不同硬件。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致。需要注意的是,系統(tǒng)調(diào)用是內(nèi)核與應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是內(nèi)核與硬件之間的接口。
驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別 1、應(yīng)用程序以main開始,驅(qū)動(dòng)程序沒有main,它以一個(gè)模塊初始化函數(shù)作為入口。 2、應(yīng)用程序從頭到尾執(zhí)行一個(gè)任務(wù),驅(qū)動(dòng)程序完成初始化之后不再運(yùn)行,等待系統(tǒng)調(diào)用。 3、應(yīng)用程序可以使用GLIBC等標(biāo)準(zhǔn)C函數(shù)庫(kù),驅(qū)動(dòng)程序不能使用標(biāo)準(zhǔn)C庫(kù)。
用戶態(tài)與內(nèi)核態(tài) 系統(tǒng)運(yùn)行時(shí)一般情況下,分用戶態(tài)和內(nèi)核態(tài),這兩種運(yùn)行態(tài)下的數(shù)據(jù)互不可見的。驅(qū)動(dòng)程序是內(nèi)核的一部分,工作在內(nèi)核態(tài),應(yīng)用程序工作在用戶態(tài)。這樣就存在數(shù)據(jù)空間訪問的問題:無(wú)法通過指針直接將二者的數(shù)據(jù)地址進(jìn)行傳遞。問題的解決辦法是:系統(tǒng)提供一系列函數(shù)幫助完成數(shù)據(jù)空間轉(zhuǎn)換:例如,get_user 、put_user 、copy_from_user 、copy_to_user 等函數(shù)。
Linux驅(qū)動(dòng)程序功能 驅(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ò)誤等。 |
|
來(lái)自: own360 > 《設(shè)備驅(qū)動(dòng)》