什么是嵌入式設(shè)備?如果你使用過電子設(shè)備,比如智能手機或家用電器,那么你很可能已經(jīng)接觸過這些設(shè)備。簡單地說,嵌入式設(shè)備是設(shè)計用于執(zhí)行特定任務(wù)的“簡單”設(shè)備。在嵌入式開發(fā)中,這些設(shè)備在驅(qū)動或運行簡單的單任務(wù)環(huán)境中起著不可替代的作用。
沒有操作系統(tǒng)的設(shè)備驅(qū)動程序(裸機設(shè)備)
不是每臺計算機都需要操作系統(tǒng)來運行;在許多情況下,操作系統(tǒng)是不必要的。對于相對簡單且控制不復(fù)雜的功能,單任務(wù)體系結(jié)構(gòu)完全能夠支持它們的工作。
嵌入式系統(tǒng)的一些現(xiàn)實例子包括公交卡讀卡器、冰箱、微波爐和簡單的移動電話。除此之外,不需要復(fù)雜任務(wù)(如多任務(wù)調(diào)度、文件系統(tǒng)或內(nèi)存管理)的計算機不依賴于操作系統(tǒng)。
此類系統(tǒng)中的典型軟件架構(gòu)包括無限循環(huán)設(shè)備中斷測試,輪詢設(shè)備。裸機設(shè)備實現(xiàn)了一些類似于單芯片設(shè)備或微控制器(MCU)的功能。如果裸機設(shè)備包括一個驅(qū)動器,它應(yīng)該能夠勝任微控制器的工作。
在這樣的嵌入式開發(fā)系統(tǒng)中,雖然沒有操作系統(tǒng),但設(shè)備驅(qū)動程序必須仍然存在。設(shè)備驅(qū)動接口直接提交給應(yīng)用軟件,并且應(yīng)用軟件直接訪問設(shè)備驅(qū)動接口而不跨越任何層次結(jié)構(gòu)。設(shè)備驅(qū)動程序還包括直接與硬件功能配合使用的接口功能,無需任何附加功能。
帶有設(shè)備驅(qū)動程序的操作系統(tǒng)
當系統(tǒng)包含操作系統(tǒng)時,設(shè)備驅(qū)動程序會是什么樣子?
首先,非嵌入式操作系統(tǒng)的設(shè)備驅(qū)動硬件操作可能仍然至關(guān)重要。如果沒有這個部分,設(shè)備驅(qū)動程序和硬件就不能相互交互。
其次,我們還需要將設(shè)備驅(qū)動程序合并到內(nèi)核中。為了實現(xiàn)這種融合,我們必須在所有設(shè)備驅(qū)動程序中設(shè)計操作系統(tǒng)內(nèi)核的接口。操作系統(tǒng)規(guī)定了這些類型的接口,并且在結(jié)構(gòu)上獨立于特定于一類設(shè)備的設(shè)備。
因此,當有操作系統(tǒng)時,設(shè)備驅(qū)動程序成為連接硬件和內(nèi)核的鏈接。操作系統(tǒng)的存在將不可避免地要求設(shè)備驅(qū)動程序附加更多的代碼和功能,從而將單個“驅(qū)動硬件設(shè)備操作”變成一個模塊,用于從操作系統(tǒng)內(nèi)部與硬件交互。
它以操作系統(tǒng)API的形式出現(xiàn),不再提供直接接口。在獲得操作系統(tǒng)后,設(shè)備驅(qū)動程序變得越來越復(fù)雜。問題是,在這種情況下,操作系統(tǒng)應(yīng)該做什么?
首先,一個復(fù)雜的軟件系統(tǒng)需要處理多個并發(fā)任務(wù)。如果沒有操作系統(tǒng),完成多任務(wù)并發(fā)是一項挑戰(zhàn)。其次,操作系統(tǒng)為嵌入式開發(fā)工程師提供了內(nèi)存管理機制。
舉個典型的例子,大多數(shù)基于MMU的處理器、Windows、Linux和其他傳統(tǒng)操作系統(tǒng)都支持每個進程單獨訪問4GB內(nèi)存??傊?,操作系統(tǒng)給設(shè)備驅(qū)動程序帶來了哪些優(yōu)勢?
操作系統(tǒng)為設(shè)備驅(qū)動程序帶來問題,以實現(xiàn)向更高級別的應(yīng)用程序提供方便操作的目的。如果所有設(shè)備驅(qū)動程序的設(shè)計理念都是操作系統(tǒng)提供獨立于設(shè)備的接口,那么應(yīng)用程序?qū)⒖梢允褂媒y(tǒng)一的系統(tǒng)調(diào)用接口訪問各種設(shè)備。對于UNIX的VxWorks、Linux和其他操作系統(tǒng),應(yīng)用程序可以讀取和寫入文件,并通過write()和read()函數(shù)訪問不同的字符設(shè)備和塊設(shè)備。這與設(shè)備和工作的具體類型無關(guān),因此非常方便。