1樓
wangxinxin 發(fā)表于:2010-11-24 9:13:58
Linux由于其具有內(nèi)核強大且穩(wěn)定,易于擴展和裁減,豐富的硬件支持等諸多優(yōu)點,在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。很多嵌入式Linux系統(tǒng),特別是一些具有與用戶強交互的嵌入式系統(tǒng),往往需要配備一個特殊設(shè)備,此時開發(fā)者需要根據(jù)實際情況,為自己的特殊設(shè)備編寫驅(qū)動程序。
Linux設(shè)備驅(qū)動程序在Linux的內(nèi)核源代碼中占有很大比例,源代碼的長度日益增加, 主要是驅(qū)動程序的增加。操作系統(tǒng)是通過各種驅(qū)動程序來駕馭硬件設(shè)備,它為用戶屏蔽了各種各樣的設(shè)備,驅(qū)動硬件是操作系統(tǒng)最基本的功能。本專題主要概述Linux設(shè)備驅(qū)動框架、驅(qū)動程序的配置文件及各種驅(qū)動安裝。編寫 Linux 設(shè)備驅(qū)動程序無疑是一項復(fù)雜的工作。設(shè)備驅(qū)動程序可分為2大類:硬件設(shè)備驅(qū)動程序和軟件設(shè)備驅(qū)動程序。硬件設(shè)備驅(qū)動程序和物理硬件設(shè)備相連接,如UART設(shè)備或IDE設(shè)備,而軟件設(shè)備驅(qū)動程序則作為低級數(shù)據(jù)結(jié)構(gòu)間的接口,或硬件設(shè)備驅(qū)動程序和高級數(shù)據(jù)結(jié)構(gòu)間的接口。
在Linux操作系統(tǒng)下有3類主要的設(shè)備文件類型:塊設(shè)備、字符設(shè)備和網(wǎng)絡(luò)設(shè)備。這種分類方法可以將控制輸入/輸出設(shè)備的驅(qū)動程序與其他操作系統(tǒng)軟件分離開來。系統(tǒng)調(diào)用時操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核與機器硬件之間的接口。設(shè)備驅(qū)動程序是內(nèi)核的一部分,它完成以下功能:對設(shè)備初始化和釋放、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)、讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù)、檢測和處理設(shè)備出現(xiàn)的錯誤。
Linux的設(shè)備驅(qū)動程序可以分為3個主要組成部分,自動配置和初始化子程序,負(fù)責(zé)監(jiān)測所要驅(qū)動的硬件設(shè)備是否存在和能否正常工作。服務(wù)于I/O請求的子程序,又稱為驅(qū)動程序的上半部分。調(diào)用這部分程序是由于系統(tǒng)調(diào)用的結(jié)果。中斷服務(wù)子程序,又稱為驅(qū)動程序的下半部分。在Linux系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動程序的中斷服務(wù)子程序,而是由Linux系統(tǒng)來接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。在Linux系統(tǒng)里,對中斷的處理是屬于系統(tǒng)核心部分,因而如果設(shè)別與系統(tǒng)之間以中斷方式進(jìn)行數(shù)據(jù)交換,就必須把該設(shè)備的驅(qū)動程序作為系統(tǒng)核心的一部分。