探傷系統(tǒng)驅(qū)動(dòng)程序開發(fā)流程
探傷系統(tǒng)驅(qū)動(dòng)程序開發(fā)流程
探傷系統(tǒng)進(jìn)行嵌入式系統(tǒng)的底層開發(fā),大部分的工作是針對各種硬件開發(fā)設(shè)備驅(qū)動(dòng)程序。Linux 設(shè)備驅(qū)動(dòng)在 Linux 內(nèi)核源碼中也占有很大的比例。由于 Linux 將操作系統(tǒng)分為內(nèi)核態(tài)和用戶態(tài),設(shè)備驅(qū)動(dòng)運(yùn)行在內(nèi)核空間,而用戶程序運(yùn)行在用戶空間。這樣就實(shí)現(xiàn)了保護(hù)機(jī)制,用戶空間的進(jìn)程一般無法直接訪問硬件。一般來說,設(shè)備驅(qū)動(dòng)的開發(fā)具有一些共同點(diǎn),Linux 為設(shè)備驅(qū)動(dòng)開發(fā)也提供了一套良好的支持機(jī)制。設(shè)備驅(qū)動(dòng)的共性一般有:
1. 讀/寫操作:設(shè)備驅(qū)動(dòng)的主要任務(wù)是負(fù)責(zé)完成系統(tǒng)的輸入輸出,所以一般的驅(qū)動(dòng)程序都有讀/寫操作。每個(gè)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)實(shí)現(xiàn)其控制的硬件設(shè)備的讀寫,而系統(tǒng)其他部分不知道其讀寫的實(shí)現(xiàn)細(xì)節(jié)。設(shè)備驅(qū)動(dòng)程序根據(jù)操作系統(tǒng)定義的讀寫接口,實(shí)現(xiàn)針對特定硬件的讀寫操作。
2. 中斷服務(wù)程序:系統(tǒng)對硬件設(shè)備的訪問方式一般可以分為查詢方式和中斷方式。中斷方式具有高效、快速的特點(diǎn),在現(xiàn)代操作系統(tǒng)中占有重要的地位。Linux 提供了一套良好的中斷支持機(jī)制,支持中斷的共享;設(shè)備驅(qū)動(dòng)程序通過 request_irq()和 free_irq()向系統(tǒng)申請和釋放中斷信號線。
3. 時(shí)間、延遲和定時(shí)器:與時(shí)間有關(guān)的操作包括獲得系統(tǒng)時(shí)間、延遲操作或者定時(shí)器事件等。驅(qū)動(dòng)程序可以度量時(shí)間差,進(jìn)行時(shí)間的比較,或者獲得當(dāng)前的系統(tǒng)時(shí)間。操作硬件時(shí),為了滿足接口的特定時(shí)序要求,需要使用延遲操作。而內(nèi)核定時(shí)器可以用來在特定時(shí)間之后調(diào)用已經(jīng)注冊的定時(shí)器函數(shù)。
目前開發(fā)的設(shè)備驅(qū)動(dòng)程序主要是字符型設(shè)備驅(qū)動(dòng),這類設(shè)備驅(qū)動(dòng)適合于大多數(shù)簡單的硬件設(shè)備。在設(shè)備驅(qū)動(dòng)程序的開發(fā)過程中,首先要定義驅(qū)動(dòng)程序?yàn)橛脩舫绦蛱峁┑墓δ?,即機(jī)制。然后要根據(jù)具體的硬件說明手冊或者硬件物理連接關(guān)系以及操作系統(tǒng)提供的機(jī)制和接口來實(shí)現(xiàn)這些功能。