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