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