計(jì)算機(jī)系統(tǒng)的運(yùn)轉(zhuǎn)都是系統(tǒng)中軟硬件共同努力的結(jié)果,硬件是底層基礎(chǔ),是所有軟件得以運(yùn)行的平臺(tái),代碼最終會(huì)轉(zhuǎn)換為硬件上的組合邏輯與時(shí)序邏輯。
軟件分為系統(tǒng)軟件和應(yīng)用軟件。系統(tǒng)軟件核心也就是操作系統(tǒng)主要負(fù)責(zé)管理系統(tǒng)硬件資源,給應(yīng)用軟件提供訪問(wèn)系統(tǒng)硬件資源的接口和運(yùn)行環(huán)境,有了系統(tǒng)軟件支撐,應(yīng)用軟件可以聚焦用戶(hù)業(yè)務(wù)需求而快速地完成設(shè)計(jì)。
設(shè)備驅(qū)動(dòng)是操作系統(tǒng)內(nèi)核重要組成部分,負(fù)責(zé)與底層硬件直打交道,按照硬件設(shè)備的設(shè)計(jì)原理,讀寫(xiě)設(shè)備的寄存器,完成設(shè)備的輪詢(xún)、中斷處理、DMA 通信,進(jìn)行物理內(nèi)存向虛擬內(nèi)存的映射等,最終讓網(wǎng)絡(luò)設(shè)備能收發(fā)數(shù)據(jù),讓顯示設(shè)備能顯示文字和畫(huà)面,讓存儲(chǔ)設(shè)備能記錄文件和數(shù)據(jù)。
設(shè)備驅(qū)動(dòng)充當(dāng)了硬件和應(yīng)用軟件之間的橋梁(如下圖所示)。
Linux系統(tǒng)下的設(shè)備從不同角度有不同的分類(lèi)描述。
從功能角度,分為輸入設(shè)備、輸出設(shè)備、顯示設(shè)備、存儲(chǔ)設(shè)備等,根據(jù)數(shù)據(jù)傳輸類(lèi)型將設(shè)備驅(qū)動(dòng)分為字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。
字符設(shè)備的數(shù)據(jù)以字節(jié)流方式被系統(tǒng)讀寫(xiě),字節(jié)流就像在硬件端口和文件系統(tǒng)搭建起了一個(gè)傳送管道, 字節(jié)逐個(gè)通過(guò)管道傳輸并呈現(xiàn)給讀寫(xiě)雙方。在Linux系統(tǒng)中,字符設(shè)備以文件方式在文件目錄樹(shù)中占據(jù)位置并擁有相應(yīng)的設(shè)備結(jié)點(diǎn)。使用與普通文件相同的文件操作命令對(duì)字符設(shè)備文件進(jìn)行操作,例如打開(kāi)、關(guān)閉、讀、寫(xiě)等。
塊設(shè)備將信息存儲(chǔ)在固定大小的塊(block)中,每個(gè)塊都有自己的地址,數(shù)據(jù)塊的大小通常在512字節(jié)到32768字節(jié)之間。塊設(shè)備只支持以塊為單位的訪問(wèn)方式。,磁盤(pán)是最常見(jiàn)的塊設(shè)備。?
網(wǎng)絡(luò)設(shè)備傳輸?shù)臄?shù)據(jù)是按照網(wǎng)絡(luò)協(xié)議封裝的數(shù)據(jù)包,網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng)負(fù)責(zé)數(shù)據(jù)包的發(fā)送和接收。對(duì)網(wǎng)絡(luò)設(shè)備的訪問(wèn)是通過(guò)socket調(diào)用產(chǎn)生,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)將上層協(xié)議傳遞下來(lái)的數(shù)據(jù)包以特定的媒介訪問(wèn)控制進(jìn)行發(fā)送,并將接收到的數(shù)據(jù)包傳遞給上層協(xié)議。
Linux系統(tǒng)對(duì)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)定義了四個(gè)層次,這四個(gè)層次為網(wǎng)絡(luò)協(xié)議接口層、網(wǎng)絡(luò)設(shè)備接口層、設(shè)備驅(qū)動(dòng)功能層、網(wǎng)絡(luò)設(shè)備與媒介層,如下圖所示。
Linux網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)哟谓Y(jié)構(gòu)
設(shè)備驅(qū)動(dòng)是操作系統(tǒng)內(nèi)核的一部分,是與具體硬件設(shè)備相關(guān)的軟件邏輯,既可以靜態(tài)編譯進(jìn)內(nèi)核,也可以獨(dú)立于內(nèi)核編譯成模塊,在需要時(shí)動(dòng)態(tài)加載進(jìn)內(nèi)核空間執(zhí)行。
除了網(wǎng)絡(luò)設(shè)備外,字符設(shè)備和塊設(shè)備都被映射到文件系統(tǒng)的文件,體現(xiàn)了Linux一切皆文件的理念。
用戶(hù)態(tài)程序通過(guò)文件系統(tǒng)的系統(tǒng)調(diào)用接口和驅(qū)動(dòng)交互,整體框架如下圖所示,
Linux設(shè)備驅(qū)動(dòng)框架
Linux系統(tǒng)采用設(shè)備、總線、驅(qū)動(dòng)的模型實(shí)現(xiàn)管理所有的物理設(shè)備。Linux引入了platform虛擬總線,管理那些物理上非總線連接的設(shè)備和虛擬設(shè)備。
Linux設(shè)備驅(qū)動(dòng)模型
Linux的內(nèi)核驅(qū)動(dòng)以模塊(以ko做后綴的文件)方式存在,當(dāng)有新的設(shè)備通過(guò)電信號(hào)通知Linux系統(tǒng)插入時(shí),Linux系統(tǒng)就將當(dāng)前總線上注冊(cè)的驅(qū)動(dòng)都查詢(xún)一遍,看是否有驅(qū)動(dòng)匹配新接入設(shè)備。一旦硬件設(shè)備和設(shè)備驅(qū)動(dòng)匹配成功,設(shè)備驅(qū)動(dòng)就開(kāi)始對(duì)硬件做探測(cè)初始化。當(dāng)驅(qū)動(dòng)完成所有的初始化操作,這個(gè)新接入的硬件設(shè)備在當(dāng)前系統(tǒng)就是可用的。
----------------------------------------------------
網(wǎng)際迅聯(lián)APP下載鏈接:https://app.wjxlkj.com
好省邀請(qǐng)口令:網(wǎng)際迅聯(lián)
聯(lián)系QQ:58053012
微信:zy13910758317(張永anke)
或下圖二維碼微信掃碼或長(zhǎng)按識(shí)別下載
網(wǎng)際迅聯(lián)(北京)科技有限公司
|
聯(lián)系我們
|
微信掃一掃 手機(jī)訪問(wèn) |