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