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