現(xiàn)在 廣泛用于各類計(jì)算應(yīng)用,不僅包括 微型 腕表、手持設(shè)備( 和蜂窩電話)、因特網(wǎng)裝置、瘦客戶機(jī)、防火墻、工業(yè)機(jī)器人和電話基礎(chǔ)設(shè)施設(shè)備,甚至還包括了基于集群的超級計(jì)算機(jī)。讓我們看一下 用作嵌入式系統(tǒng)需要提供哪些功能,以及它在目前可用的選擇中最具吸引力的原因所在。
嵌入式系統(tǒng)的出現(xiàn)
用于控制設(shè)備的計(jì)算機(jī),也叫做嵌入式系統(tǒng),它的歷史幾乎和計(jì)算機(jī)自身的歷史一樣長。它們最初于六十年代晚期在通訊中被用于控制機(jī)電電話交換機(jī)。由于在過去的十多年里,計(jì)算機(jī)產(chǎn)業(yè)不斷朝著更小的系統(tǒng)方向發(fā)展,嵌入式系統(tǒng)也與之一起為這些小型機(jī)器提供了更多的功能。漸漸地,就需要把這些嵌入式系統(tǒng)連接到某種網(wǎng)絡(luò)上,因而也就產(chǎn)生了對網(wǎng)絡(luò)棧的要求,這提高了系統(tǒng)的復(fù)雜程度并要求更多的存儲器和接口,還有,您猜對了,操作系統(tǒng)的服務(wù)。
七十年代晚期出現(xiàn)了用作嵌入式系統(tǒng)的現(xiàn)成的操作系統(tǒng),現(xiàn)在有許多可行的選擇方案。其中,一些主要的競爭者開始嶄露頭角,比如,VxWorks、pSOS、Neculeus 和 Windows CE。
在嵌入式系統(tǒng)中使用 Linux 的優(yōu)點(diǎn)和缺點(diǎn)
雖然大多數(shù) Linux 系統(tǒng)運(yùn)行在 PC 平臺上,但 Linux 也可以作為嵌入式系統(tǒng)的可靠主力。Linux 流行的“back-to-basics”方法使得它的安裝和管理比 更加簡單靈活,這對于那些 專家們來說又是一個優(yōu)點(diǎn),他們已經(jīng)因?yàn)?Linux 中有許多命令和編程接口同傳統(tǒng)的 一樣而賞識了。
典型的壓縮包裝 Linux 系統(tǒng)經(jīng)過打包,在擁有硬盤和大容量內(nèi)存的 PC 機(jī)上運(yùn)行,嵌入式系統(tǒng)可不要這么高的配置。一個功能完備的 Linux 內(nèi)核要求大約 1 MB 內(nèi)存。而 Linux 微內(nèi)核只占用其中很小一部分內(nèi)存,包括虛擬內(nèi)存和所有核心的操作系統(tǒng)功能在內(nèi),只需占用 CPU 系統(tǒng)的 100 K 內(nèi)存。只要有 500 K 的內(nèi)存,一個有網(wǎng)絡(luò)棧和基本實(shí)用程序的完全的 Linux 系統(tǒng)就可以在一臺 8 位總線(SX)的 386 微處理器上運(yùn)行的很好了。由于內(nèi)存要求常常是需要的應(yīng)用所決定的,比如 Web 服務(wù)器或者 代理,Linux 系統(tǒng)甚至可以僅使用 256 KB ROM 和 512 KB RAM 進(jìn)行工作。因此它是一個瞄準(zhǔn)嵌入式市場的輕量級操作系統(tǒng)。
與傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)相比(),采用象嵌入式?Linux 這樣的開放源碼的操作系統(tǒng)的另外一個好處是 Linux 開發(fā)團(tuán)體看來會比 的供應(yīng)商更快地支持新的 IP 協(xié)議和其它協(xié)議。例如,用于 Linux 的設(shè)備驅(qū)動程序要比用于商業(yè)操作系統(tǒng)的設(shè)備驅(qū)動程序多,如網(wǎng)絡(luò)接口卡(NIC)驅(qū)動程序以及并口和串口驅(qū)動程序。
閃存
快閃 RAM 內(nèi)存是大多數(shù) Palm 設(shè)備用來存儲操作系統(tǒng)的專用的存儲器。它具有允許操作系統(tǒng)升級的優(yōu)點(diǎn),還可以用于數(shù)字式蜂窩電話、數(shù)字式照相機(jī)、LAN 交換機(jī)、PC 卡、數(shù)字式、嵌入式控制器和其它小型設(shè)備。嵌入式系統(tǒng),如嵌入式?Linux,不要求有磁盤驅(qū)動器,盡管可能使用其它的內(nèi)存組織方式。因此如果,打個比方,Linux 用完了閃存,它就可以將其中一部分作為只讀的文件系統(tǒng)來存儲額外的程序和靜態(tài)數(shù)據(jù)。
核心 Linux 操作系統(tǒng)本身的微內(nèi)核體系結(jié)構(gòu)相當(dāng)簡單。網(wǎng)絡(luò)和文件系統(tǒng)以模塊形式置于微內(nèi)核的上層。驅(qū)動程序和其它部件可在運(yùn)行時(shí)作為可加載模塊編譯到或者是添加到內(nèi)核。這為構(gòu)造定制的可提供了高度模塊化的構(gòu)件方法。而在典型情況下該系統(tǒng)需結(jié)合定制的驅(qū)動程序和應(yīng)用程序以提供附加功能。
嵌入式系統(tǒng)也常常要求通用的功能,為了避免重復(fù)勞動,這些功能的實(shí)現(xiàn)運(yùn)用了許多現(xiàn)成的程序和驅(qū)動程序,它們可以用于公共外設(shè)和應(yīng)用。Linux 可以在外設(shè)范圍廣泛的多數(shù)微處理器上運(yùn)行,并早已經(jīng)有了現(xiàn)成的應(yīng)用庫。
Linux 用于嵌入式的因特網(wǎng)設(shè)備也是很合適的,原因是它支持多處理器系統(tǒng),該特性使 Linux 具有了伸縮性。因而設(shè)計(jì)人員可以選擇在雙處理器系統(tǒng)上運(yùn)行實(shí)時(shí)應(yīng)用,提高整體的處理能力。例如,您可以在一個處理器運(yùn)行 GUI,同時(shí)在另一個處理器上運(yùn)行 Linux 系統(tǒng)。
在嵌入式系統(tǒng)上運(yùn)行 Linux 的一個缺點(diǎn)是 Linux 體系提供實(shí)時(shí)性能需要添加實(shí)時(shí)軟件模塊。而這些模塊運(yùn)行的內(nèi)核空間正是操作系統(tǒng)實(shí)現(xiàn)調(diào)度策略、硬件中斷異常和執(zhí)行程序的部分。由于這些實(shí)時(shí)軟件模塊是在內(nèi)核空間運(yùn)行的,因此代碼錯誤可能會破壞操作系統(tǒng)從而影響整個系統(tǒng)的可靠性,這對于實(shí)時(shí)應(yīng)用將是一個非常嚴(yán)重的弱點(diǎn)。
另一方面,現(xiàn)成的 完全是為實(shí)時(shí)性能而設(shè)計(jì)的,它通過在由用戶而非系統(tǒng)級進(jìn)程啟動時(shí)分配給某個進(jìn)程以高于其它進(jìn)程的優(yōu)先級的方式來實(shí)現(xiàn)可靠性。進(jìn)程在操作系統(tǒng)看來就是在內(nèi)存里或硬盤驅(qū)動器上執(zhí)行的程序。給他們指定進(jìn)程 ID 或者數(shù)字標(biāo)識符為的是讓操作系統(tǒng)跟蹤正在執(zhí)行的程序和這些程序的相關(guān)聯(lián)的優(yōu)先等級。這樣的方式保證了 RTOS 時(shí)間能比 Linux 提供更高的可靠性(可預(yù)見性)。但最重要的,這還是一種更加經(jīng)濟(jì)的選擇。
不同類型的嵌入式?Linux 系統(tǒng)
已經(jīng)有許多嵌入式?Linux 系統(tǒng)的示例;可以有把握地說,某種形式的 Linux 能在幾乎任一臺執(zhí)行代碼的計(jì)算機(jī)上運(yùn)行。例如,ELKS(可嵌入 Linux 內(nèi)核子集)方案計(jì)劃在 Palm Pilot 上使用 Linux。下面列出了一些更加廣為人知的小型嵌入式?Linux 版本:
ETLinux — 設(shè)計(jì)用于在小型工業(yè)計(jì)算機(jī),尤其是 PC/104 模塊上運(yùn)行的 Linux 的完全分發(fā)版。
LEM — 運(yùn)行在 386 上的小型(<8 MB)多用戶、網(wǎng)絡(luò) Linux 版本。
LOAF — “Linux On A Floppy”分發(fā)版,運(yùn)行在 386 上。
uClinux — 在沒有 MMU 的系統(tǒng)上運(yùn)行的 Linux。目前支持 68K、 和 ColdFire 微處理器。
uLinux — 在 386 上運(yùn)行的 tiny Linux 分發(fā)版。
ThinLinux — 面向?qū)S玫恼障鄼C(jī)服務(wù)器、 控制器、 播放器和其它類似的嵌入式應(yīng)用的最小化的 Linux 分發(fā)版。
軟件和硬件要求
許多的用戶接口工具和程序增強(qiáng)了 Linux 基本內(nèi)核的多功能性。就此而論,可以把 Linux 看作是這樣一個連續(xù)范圍,從只有存儲器管理、任務(wù)轉(zhuǎn)換和器服務(wù)最小化的微內(nèi)核一直到完整的一系列文件系統(tǒng)和網(wǎng)絡(luò)服務(wù)的功能完善的服務(wù)器。
最小的嵌入式?Linux 系統(tǒng)僅需要三個基本元素:
引導(dǎo)實(shí)用程序
Linux 微內(nèi)核,由內(nèi)存管理、進(jìn)程管理和服務(wù)構(gòu)成。
初始化過程
要實(shí)現(xiàn)最低限度的工作能力,您還需要添加。
硬件驅(qū)動程序
一個或多個應(yīng)用進(jìn)程,以提供所需功能。
隨著要求的增加,您可能還需要:
一個文件系統(tǒng)(可能是在 ROM 或者是 RAM 里);
TCP/IP 網(wǎng)絡(luò)棧;
儲存半瞬態(tài)數(shù)據(jù)和提供交換空間的磁盤;
32 位內(nèi)置 CPU(所有完全的 Linux 系統(tǒng)都需要);
相關(guān)的硬件方案。
下面是一些現(xiàn)有的為 Linux 操作系統(tǒng)定制的嵌入式硬件方案。
PLEB:帶有 ARM SA-1100 / ArmLinux Ucsimm / Uclinux Flash EPROM 的袖珍 Linux?嵌入式機(jī)器Linux Lab: Linux Lab 方案旨在幫助人們開發(fā) Linux 數(shù)據(jù)采集和過程控制軟件。它計(jì)劃提供從硬件支持到應(yīng)用開發(fā)的廣闊范圍內(nèi)應(yīng)用的標(biāo)準(zhǔn)化開發(fā)環(huán)境。
控制器域網(wǎng):Linux GPIB 的控制器域網(wǎng)(CAN)總線驅(qū)動程序;Linux GPIB 包是一個對普通 GPIB(IEEE 488.1)硬件的支持包。驅(qū)動程序支持 National Instruments AT-GPIB、TNT488.2 以及 PCII 和 PCIIa 板。這個包里有完整的開發(fā)環(huán)境,包括測試和配置工具、庫以及對 tcl 和 python 語言的支持。
硬件平臺選項(xiàng)
挑選最佳硬件的過程會相當(dāng)復(fù)雜,問題起源于公司內(nèi)部政策、成見、其它方案的遺留問題、缺乏全面的或者精確的信息以及成本 — 需考慮總的產(chǎn)品成本,而不僅僅是 CPU 本身。有時(shí),一旦把 CPU 使用其它外圍設(shè)備所必需的總線邏輯和延遲時(shí)間考慮在內(nèi),那么快速而廉價(jià)的 CPU 也可能變得昂貴。要計(jì)算任意給定的項(xiàng)目所需的 CPU 速度,首先要現(xiàn)實(shí)地看看為了完成一個給定的任務(wù) CPU 得運(yùn)行多快然后再乘以三。還要確定總線需要運(yùn)行多快。如果還有二級總線,比如 PCI 總線,那么將它們也考慮在內(nèi)。一條慢的總線(即一條被 DMA 通信阻塞的總線)將會顯著降低高速 CPU 的速度。下面是一些嵌入式?Linux 應(yīng)用的最佳硬件。
Bright Star Engineering:Bright Star Engineering 的 ipEngine-1 是支持嵌入式?Linux 的信用卡大小的。它利用了基于 PowerPC 的 CPU,并提供了一組板上外設(shè),有 Ethernet、/視頻控制器、USB、串口 I/O 以及一個 16K 門的可由用戶配置的 FPGA。BSE 的嵌入式?Linux 配置允許 Linux 從 ipEngine 的板上 4MB 閃存中引導(dǎo)。
Calibri:CalibriTM-133 是將嵌入式?Linux 作為其操作系統(tǒng)來使用的網(wǎng)絡(luò)設(shè)備,它方便使用、緊湊,并且可以用于多種用途。它為防火墻、VPN 和路由要求提供了一種高效、低成本的。
EmbeddedPlanet: EmbeddedPlanet 創(chuàng)造了后 PC 時(shí)代的計(jì)算機(jī),它出現(xiàn)時(shí)就裝有 MontaVista 的 HardHat Linux。由基于 PowerPC 的計(jì)算引擎和匹配的 I/O 卡驅(qū)動,Linux Planet 裝在一個彩色的透明盒子里并且?guī)в校€可以訪問數(shù)字及模擬 I/O。
Eurotech:Eurotech 提供了嵌入式?PC SBC 并資助了 ET-Linux,一個為在小型工業(yè)計(jì)算機(jī)上運(yùn)行而專門設(shè)計(jì)的基于 glibc 2.1.2 的完全的 Linux 系統(tǒng)。
Microprocess Ingenierie:Microprocess 為產(chǎn)業(yè)和嵌入式市場開發(fā)、生產(chǎn)以及銷售標(biāo)準(zhǔn)的和定制的產(chǎn)品。Microprocess 在實(shí)時(shí)軟件方面活動范圍遍及全球,并具有系統(tǒng)集成的專業(yè)知識。它的產(chǎn)品,比如 740 PowerPC compactPCI 板可以與標(biāo)準(zhǔn)的 Linux 分發(fā)版或者嵌入式?Linux 版本一起訂購。
Moreton Bay:Moreton Bay 發(fā)布基于 Linux 的 Internet 路由器,其范圍在 NETtel 2520 和 NETtel 2500 之間。這些小型的、易于連接的智能路由器設(shè)計(jì)旨在為平面網(wǎng)絡(luò)提供簡便、安全和價(jià)格適中的外部網(wǎng)友好的虛擬私有網(wǎng)絡(luò)(VPN)。NETtel 路由器系列運(yùn)行的是嵌入式?Linux 內(nèi)核?,F(xiàn)有一套開發(fā)工具能夠把定制代碼存在閃存中并在 NETtel 內(nèi)部執(zhí)行。代碼可能含有特定的加密或者身份驗(yàn)證協(xié)議,或者在 NETtel 被用作遠(yuǎn)程控制設(shè)備代碼時(shí),會含有一些本地監(jiān)視腳本。
Matrix Orbital:這是個可選的、但不是推薦的附加項(xiàng)。Matrix Orbital 生產(chǎn)的一系列串行 和 VFD 被許多 Linux 用戶添加到了他們的嵌入式系統(tǒng)中。這條生產(chǎn)線的范圍包括了 8x2 到 40x4 的字符 s、20x2 和 20x4 的 VFD 加上 240x64 圖形 LC(128x128 還在生產(chǎn)之中)。運(yùn)用顯示器的通信不是通過 RS232 就是通過 I2C 實(shí)現(xiàn)的,兩者都是其所有模塊上的標(biāo)準(zhǔn)。模塊的 BIOS 中包含一個全面的命令集。
實(shí)時(shí)嵌入式?Linux 應(yīng)用
有關(guān)嵌入式系統(tǒng)最重要的事務(wù)之一就是要求有一個實(shí)時(shí)操作系統(tǒng)。這里實(shí)時(shí)有好幾種定義。對有些人來說,實(shí)時(shí)意味著在 1 微秒的時(shí)間內(nèi)對事件作出反應(yīng),但對另外一些人來說,那就可能是 50 毫秒了。實(shí)時(shí)的硬度也各不相同。一些系統(tǒng)需要硬實(shí)時(shí)響應(yīng),在很短的時(shí)間內(nèi)對事件作出確定性響應(yīng)。但是,當(dāng)我們對許多系統(tǒng)進(jìn)行仔細(xì)分析時(shí),我們發(fā)現(xiàn)事實(shí)上對響應(yīng)時(shí)間的要求只是接近實(shí)時(shí)。實(shí)時(shí)的要求常常是時(shí)間和緩沖空間的折衷。隨著內(nèi)存越來越便宜,CPU 速度越來越快,現(xiàn)在接近實(shí)時(shí)比硬實(shí)時(shí)更加常見,許多商用的所謂實(shí)時(shí)操作系統(tǒng)遠(yuǎn)非硬實(shí)時(shí)。通常情況下,當(dāng)您進(jìn)入這些系統(tǒng)的詳細(xì)設(shè)計(jì)部分時(shí),就需提高警惕必須非常仔細(xì)地設(shè)計(jì)驅(qū)動器的中斷和應(yīng)用以滿足實(shí)時(shí)要求。
RT-Linux(實(shí)時(shí)擴(kuò)展的 Linux 系統(tǒng))里含有時(shí)間緊要的函數(shù)可以用中斷管理器來精確控制中斷處理,從而很好地確保了關(guān)鍵性中斷可以在需要時(shí)得到執(zhí)行。這種方法的硬度主要取決于 CPU 中斷結(jié)構(gòu)和環(huán)境轉(zhuǎn)換的硬件支持。這種方法可以滿足廣泛范圍內(nèi)的實(shí)時(shí)要求。即使沒有實(shí)時(shí)擴(kuò)展,Linux 也能很好地處理多個事件流。例如,運(yùn)行于低端 上的 Linux PC 系統(tǒng)能讓多個 10BaseT 接口有效地執(zhí)行,同時(shí)又以全速的 56KBPS 運(yùn)行字符級串口,而不會丟失任何數(shù)據(jù)。
值得考慮的實(shí)時(shí)硬件和軟件 Linux API 有 RTLinux、RTAI、EL 和 Linux-SRT。RTLinux 是一個最初在新墨西哥理工學(xué)院開發(fā)的硬實(shí)時(shí) Linux API。RTAI(DIAPM)是由 Polytechnic Politecnico di Milano(DIAPM)工程部的程序員們開發(fā)的 RTLinux 實(shí)時(shí) API 的副產(chǎn)品。EL/IX 是一個計(jì)劃中的基于 POSIX 硬實(shí)時(shí) Linux API,由 Red Hat 發(fā)起。Linux-SRT 是個實(shí)時(shí) API 的軟實(shí)時(shí)替代品,它可以使所有的 Linux 程序無需修改或者重新編譯即可增強(qiáng)性能。
短暫的確定性響應(yīng)時(shí)間
某些實(shí)時(shí)嵌入式系統(tǒng)需要迅速對外部事件作出響應(yīng),以完成一項(xiàng)特定任務(wù)。比如,嵌入一枚導(dǎo)彈的一個定制的微控制器在指引導(dǎo)彈瞄準(zhǔn)它周圍環(huán)境的一個特定目標(biāo)之前,需要迅速對諸如移動目標(biāo)、天氣和人等的外部事件作出迅速響應(yīng)。短暫的確定性響應(yīng)時(shí)間是指嵌入式系統(tǒng)可以確定它對外部事件作出響應(yīng)的時(shí)間。
配置步驟
現(xiàn)在讓我們來看一下如何 make LEM,它是一個小型的可嵌入 Linux 分發(fā)版,既提供網(wǎng)絡(luò)又提供 X 服務(wù)器。您可以下載該分發(fā)版,盡管它并非必需。您需要一個完全的 Linux 分發(fā)版來建立自己的嵌入式?Linux 操作系統(tǒng),其中將包括您所需要的一切(實(shí)用程序、源代碼、編譯器、調(diào)試器和文檔)。下面是能用來 make LEM 的軟件列表:
TinyLogin: TinyLogin 是一套 tiny UNIX 實(shí)用程序,它用于登錄嵌入式系統(tǒng)、接受其驗(yàn)證身份、為其修改密碼,并能維護(hù)其用戶和用戶組。為了增強(qiáng)系統(tǒng)安全性它還支持影子口令。正如它的名字所暗示的, TinyLogin 非常小,對嵌入式系統(tǒng)上的 BusyBox 是極好的補(bǔ)充。
BusyBox:BusyBox 是一個多調(diào)用的二進(jìn)制文件,它提供了 POSIX 式的命令和專用函數(shù)的最小子集。它適合于非常小的嵌入式系統(tǒng),比如引導(dǎo)磁盤等等。特別用于 Debian 拯救/安裝系統(tǒng)(它激發(fā)了對最初的 BusyBox 的開發(fā))、Linux Routeur 方案、LEM、lineo 及其它地方。Busybox 是由 Erik Andersen 維護(hù)的。
Ash:Ash 是個非常小的 Bourne shell。
Sysvinit:Sysvinit 是 Linux 最常用的 init 包。我們將會用到 init 和 C 語言版 start-stop-daemon。
總結(jié)
在嵌入式應(yīng)用的領(lǐng)域里,從因特網(wǎng)設(shè)備到專用的控制系統(tǒng),Linux 操作系統(tǒng)的前景都很光明。所有新造的微型計(jì)算機(jī)芯片中大約有 95% 都是用于嵌入式應(yīng)用的。由于 Linux 功能強(qiáng)大、可靠、靈活而且具有伸縮性,再加上它支持大量的微處理器體系結(jié)構(gòu)、硬件設(shè)備、圖形支持和通信協(xié)議,這些都使它作為許多方案和產(chǎn)品的軟件平臺越來越流行。
由于可以公開免費(fèi)得到 Linux 源代碼,因此對 Linux 和它支持的軟件組件的許多修改和配置也得到了不斷改進(jìn),以滿足采用 Linux 的市場和應(yīng)用的多種需求。另外還有小型版本和實(shí)時(shí)增強(qiáng)版本。盡管 Linux 開始是作為 PC 體系結(jié)構(gòu)的操作系統(tǒng),但是現(xiàn)在已經(jīng)有了非 X86 CPU 的版本(帶或不帶內(nèi)存控制單元),包括 PowerPC、ARM、MIPS、68K 甚至是微控制器。
評論
查看更多