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