現在 Linux 廣泛用於各類計算應用,不僅包括 微型 Linux 腕錶、手持功能(PDA 和蜂窩電話)、網際網路裝置、瘦客戶機、防火牆、工業機器人和電話基礎設施裝置,甚至還包括了基於叢集的超級電腦。讓我們看一下 Linux 用作嵌入式系統需要提供哪些功能,以及它在目前可用的選擇中最具吸引力的原因所在。
嵌入式系統的出現
用於控制裝置的電腦,也叫做嵌入式系統,它的曆史幾乎和電腦自身的曆史一樣長。它們最初於六十年代晚期在通訊中被用於控制機電電話交換器。由於在過去的十多年裡,電腦產業不斷朝著更小的系統方向發展,嵌入式系統也與之一起為這些小型機器提供了更多的功能。漸漸地,就需要把這些嵌入式系統串連到某種網路上,因而也就產生了對網路棧的要求,這提高了系統的複雜程度並要求更多的儲存空間和介面,還有,您猜對了,作業系統的服務。
七十年代晚期出現了用作嵌入式系統的現成的作業系統,現在有許多可行的選擇方案。其中,一些主要的競爭者開始嶄露頭角,比如,VxWorks、pSOS、Neculeus 和 Windows CE。
在嵌入式系統中使用 Linux 的優點和缺點
雖然大多數 Linux 系統運行在 PC 平台上,但 Linux 也可以作為嵌入式系統的可靠主力。Linux 流行的“back-to-basics”方法使得它的安裝和管理比 UNIX 更加簡單靈活,這對於那些 UNIX 專家們來說又是一個優點,他們已經因為 Linux 中有許多命令和編程介面同傳統的 UNIX 一樣而賞識它了。
典型的壓縮封裝 Linux 系統經過打包,在擁有硬碟和大容量記憶體的 PC 機上運行,嵌入式系統可不要這麼高的配置。一個功能完備的 Linux 核心要求大約 1 MB 記憶體。而 Linux 微核心只佔用其中很小一部分記憶體,包括虛擬記憶體和所有核心的作業系統功能在內,只需佔用 Pentium CPU 系統的 100 K 記憶體。只要有 500 K 的記憶體,一個有網路棧和基本公用程式的完全的 Linux 系統就可以在一台 8 位匯流排(SX)的 Intel 386 微處理器上啟動並執行很好了。由於記憶體要求常常是需要的應用所決定的,比如 Web 服務器或者 SNMP 代理,Linux 系統甚至可以僅使用 256 KB ROM 和 512 KB RAM 進行工作。因此它是一個瞄準嵌入式市場的輕量級作業系統。
與傳統的即時作業系統相比(RTOS),採用象嵌入式 Linux 這樣的開放源碼的作業系統的另外一個好處是 Linux 開發團體看來會比 RTOS 的供應商更快地支援新的 IP 協議和其它協議。例如,用於 Linux 的裝置驅動程式要比用於商業作業系統的裝置驅動程式多,如網路介面卡(NIC)驅動程式以及並口和串口驅動程式。
快閃記憶體
快閃 RAM 記憶體是大多數 Palm 裝置用來儲存作業系統的專用的儲存空間。它具有允許作業系統升級的優點,還可以用於數字式蜂窩電話、數字式照相機、LAN 交換器、PC 卡、數字式機頂盒、內嵌控制器和其它小型裝置。嵌入式系統,如嵌入式 Linux,不要求有磁碟機,儘管可能使用其它的記憶體組織方式。因此如果,打個比方,Linux 用完了快閃記憶體,它就可以將其中一部分作為唯讀檔案系統來儲存額外的程式和待用資料。
核心 Linux 作業系統本身的微核心體繫結構相當簡單。網路和檔案系統以模組形式置於微核心的上層。驅動程式和其它組件可在運行時作為可載入模組編譯到或者是添加到核心。這為構造定製的可嵌入系統提供了高度模組化的構件方法。而在典型情況下該系統需結合定製的驅動程式和應用程式以提供附加功能。
嵌入式系統也常常要求通用的功能,為了避免重複勞動,這些功能的實現運用了許多現成的程式和驅動程式,它們可以用於公用外設和應用。Linux 可以在外設範圍廣泛的多數微處理器上運行,並早已經有了現成的應用庫。
Linux 用於嵌入式的網際網路裝置也是很合適的,原因是它支援多處理器系統,該特性使 Linux 具有了伸縮性。因而設計人員可以選擇在雙處理器系統上運行即時應用,提高整體的處理能力。例如,您可以在一個處理器運行 GUI,同時在另一個處理器上運行 Linux 系統。
在嵌入式系統上運行 Linux 的一個缺點是 Linux 體系提供即時效能需要添加即時軟體模組。而這些模組啟動並執行核心空間正是作業系統實現調度策略、硬體中斷異常和執行程式的部分。由於這些即時軟體模組是在核心空間啟動並執行,因此代碼錯誤可能會破壞作業系統從而影響整個系統的可靠性,這對於即時應用將是一個非常嚴重的弱點。
另一方面,現成的 RTOS 完全是為即時效能而設計的,它通過在由使用者而非系統級進程啟動時分配給某個進程以高於其它進程的優先順序的方式來實現可靠性。進程在作業系統看來就是在記憶體裡或硬碟上執行的程式。給他們指定進程 ID 或者數位識別碼符為的是讓作業系統跟蹤正在執行的程式和這些程式的相關聯的優先等級。這樣的方式保證了 RTOS 時間能比 Linux 提供更高的可靠性(可預見性)。但最重要的,這還是一種更加經濟的選擇。
不同類型的嵌入式 Linux 系統
已經有許多嵌入式 Linux 系統的樣本;可以有把握地說,某種形式的 Linux 能在幾乎任一台執行代碼的電腦上運行。例如,ELKS(可嵌入 Linux 核心子集)方案計劃在 Palm Pilot 上使用 Linux。下面列出了一些更加廣為人知的小型嵌入式 Linux 版本:
ETLinux — 設計用於在小型工業電腦,尤其是 PC/104 模組上啟動並執行 Linux 的完全分發版。
LEM — 運行在 386 上的小型(<8 MB)多使用者、網路 Linux 版本。
LOAF — “Linux On A Floppy”分發版,運行在 386 上。
uClinux — 在沒有 MMU 的系統上啟動並執行 Linux。目前支援 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微處理器。
uLinux — 在 386 上啟動並執行 tiny Linux 分發版。
ThinLinux — 面向專用的照相機伺服器、X-10 控制器、MP3 播放器和其它類似的嵌入式應用的最小化的 Linux 分發版。
軟體和硬體要求
許多的使用者介面工具和程式增強了 Linux 基本核心的多功能性。就此而論,可以把 Linux 看作是這樣一個連續範圍,從只有儲存空間管理、任務轉換和定時器服務最小化的微核心一直到完整的一系列檔案系統和網路服務的功能完善的伺服器。
最小的嵌入式 Linux 系統僅需要三個基本元素:
引導公用程式
Linux 微核心,由記憶體管理、進程管理和定時服務構成
初始化過程
要實現最低限度的工作能力,您還需要添加:
硬體驅動程式
一個或多個應用進程,以提供所需功能
隨著要求的增加,您可能還需要:
一個檔案系統(可能是在 ROM 或者是 RAM 裡)
TCP/IP 網路棧
儲存半瞬態資料和提供交換空間的磁碟
32 位內建 CPU(所有完全的 Linux 系統都需要)
相關的硬體方案
下面是一些現有的為 Linux 作業系統定製的嵌入式硬體方案。
PLEB:帶有 ARM SA-1100 / ArmLinux Ucsimm / Uclinux Flash EPROM 的袖珍 Linux 嵌入式機器。
Linux Lab: Linux Lab 方案旨在協助人們開發 Linux 資料擷取和過程式控制制軟體。它計劃提供從硬體支援到應用開發的廣闊範圍內應用的標準化開發環境。
控制器域網:Linux GPIB 的控制器域網(CAN)匯流排驅動程式;Linux GPIB 包是一個對普通 GPIB(IEEE 488.1) 硬體的支援包。驅動程式支援 National Instruments AT-GPIB、TNT488.2 以及 PCII 和 PCIIa 板。這個包裡有完整的開發環境,包括測試和組態工具、庫以及對 tcl 和 python 語言的支援。
硬體平台選項
挑選最佳硬體的過程會相當複雜,問題起源於公司內部政策、成見、其它方案的遺留問題、缺乏全面的或者精確的資訊以及成本 — 需考慮總的產品成本,而不僅僅是 CPU 本身。有時,一旦把 CPU 使用其它外圍裝置所必需的匯流排邏輯和延遲時間考慮在內,那麼快速而廉價的 CPU 也可能變得昂貴。要計算任意給定的項目所需的 CPU 速度,首先要現實地看看為了完成一個給定的任務 CPU 得運行多快然後再乘以三。還要確定匯流排需要運行多快。如果還有二級匯流排,比如 PCI 匯流排,那麼將它們也考慮在內。一條慢的匯流排(即一條被 DMA 通訊阻塞的匯流排)將會顯著降低高速 CPU 的速度。下面是一些嵌入式 Linux 應用的最佳硬體解決方案。
Bright Star Engineering:Bright Star Engineering 的 ipEngine-1 是支援嵌入式 Linux 的信用卡大小的單片機。它利用了基於 PowerPC 的 CPU,並提供了一組板上外設,有 Ethernet、LCD/視頻控制器、USB、串口 I/O 以及一個 16K 門的可由使用者配置的 FPGA。BSE 的嵌入式 Linux 配置允許 Linux 從 ipEngine 的板上 4MB 快閃記憶體中引導。
Calibri:CalibriTM-133 是將嵌入式 Linux 作為其作業系統來使用的網路裝置,它方便使用、緊湊,並且可以用於多種用途。它為防火牆、VPN 和路由要求提供了一種高效、低成本的解決方案。
EmbeddedPlanet:EmbeddedPlanet 創造了後 PC 時代的電腦,它出現時就裝有 MontaVista 的 HardHat Linux。由基於 PowerPC 的計算引擎和匹配的 I/O 卡驅動,Linux Planet 裝在一個彩色的透明盒子裡並且帶有觸控螢幕,還可以訪問數字及類比 I/O。
Eurotech:Eurotech 提供了嵌入式 PC SBC 並資助了 ET-Linux,一個為在小型工業電腦上運行而專門設計的基於 glibc 2.1.2 的完全的 Linux 系統。
Microprocess Ingenierie:Microprocess 為產業和嵌入式市場開發、生產以及銷售標準的和定製的產品。Microprocess 在即時軟體方面活動範圍遍及全球,並具有系統整合的專業知識。它的產品,比如 740 PowerPC compactPCI 板可以與標準的 Linux 分發版或者嵌入式 Linux 版本一起訂購。
Moreton Bay:Moreton Bay 發布基於 Linux 的 Internet 路由器,其範圍在 NETtel 2520 和 NETtel 2500 之間。這些小型的、易於串連的智能路由器解決方案設計旨在為平面網路提供簡便、安全和價格適中的外部網友好的虛擬私人網路(VPN)。NETtel 路由器系列啟動並執行是嵌入式 Linux 核心。現有一套開發工具能夠把定製代碼存在快閃記憶體中並在 NETtel 內部執行。代碼可能含有特定的加密或者身分識別驗證協議,或者在 NETtel 被用作遠端控制裝置代碼時,會含有一些本地監視指令碼。
Matrix Orbital:這是個可選的、但不是推薦的附加項。Matrix Orbital 生產的一系列串列 LCD 和 VFD 被許多 Linux 使用者添加到了他們的嵌入式系統中。這條生產線的範圍包括了 8x2 到 40x4 的字元 LCDs、20x2 和 20x4 的 VFD 加上 240x64 圖形 LC(128x128 還在生產之中)。運用顯示器的通訊不是通過 RS232 就是通過 I2C 實現的,兩者都是其所有模組上的標準。模組的 BIOS 中包含一個全面的命令集。
即時嵌入式 Linux 應用
有關嵌入式系統最重要的事務之一就是要求有一個即時作業系統。這裡即時有好幾種定義。對有些人來說,即時意味著在 1 微秒的時間內對事件作出反應,但對另外一些人來說,那就可能是 50 毫秒了。即時的硬度也各不相同。一些系統需要硬即時響應,在很短的時間內對事件作出確定性響應。但是,當我們對許多系統進行仔細分析時,我們發現事實上對回應時間的要求只是接近即時。即時的要求常常是時間和緩衝空間的折衷。隨著記憶體越來越便宜,CPU 速度越來越快,現在接近即時比硬即時更加常見,許多商用的所謂即時作業系統遠非硬即時。通常情況下,當您進入這些系統的詳細設計部分時,就需提高警惕必須非常仔細地設計磁碟機的中斷和應用以滿足即時要求。
RT-Linux(即時擴充的 Linux 系統)裡含有時間緊要的函數可以用中斷管理器來精確控制中斷處理,從而很好地確保了關鍵性中斷可以在需要時得到執行。這種方法的硬度主要取決於 CPU 中斷結構和環境轉換的硬體支援。這種方法可以滿足廣泛範圍內的即時要求。即使沒有即時擴充,Linux 也能很好地處理多個事件流。例如,運行於低端 Pentium 上的 Linux PC 系統能讓多個 10BaseT 介面有效地執行,同時又以全速的 56KBPS 運行字元級串口,而不會丟失任何資料。
值得考慮的即時硬體和軟體 Linux API 有 RTLinux、RTAI、EL 和 Linux-SRT。RTLinux 是一個最初在新墨西哥理工學院開發的硬即時 Linux API。RTAI(DIAPM)是由 Polytechnic Politecnico di Milano(DIAPM)航天工程部的程式員們開發的 RTLinux 即時 API 的副產品。EL/IX 是一個計劃中的基於 POSIX 硬即時 Linux API,由 Red Hat 發起。Linux-SRT 是個即時 API 的軟即時替代品,它可以使所有的 Linux 程式無需修改或者重新編譯即可增強效能。
請參閱本文後面的參考資料部分,尋找有關前面內容的資料和一些 Web 網站,那裡提供了用於不同類型的標準 Linux 作業系統的軟體擴充、開發工具、支援以及培訓課程。
短暫的確定性回應時間
某些即時嵌入式系統需要迅速對外來事件作出響應,以完成一項特定任務。比如,嵌入一枚飛彈的一個定製的微控制器在指引飛彈瞄準它周圍環境的一個特定目標之前,需要迅速對諸如移動目標、天氣和人等的外來事件作出迅速響應。短暫的確定性回應時間是指嵌入式系統可以確定它對外來事件作出響應的時間。
配置步驟
現在讓我們來看一下如何 make LEM,它是一個小型的可嵌入 Linux 分發版,既提供網路又提供 X 伺服器。您可以下載該分發版,儘管它並非必需。您需要一個完全的 Linux 分發版來建立自己的嵌入式 Linux 作業系統,其中將包括您所需要的一切(公用程式、原始碼、編譯器、調試器和文檔)。下面是能用來 make LEM 的軟體列表:
TinyLogin:TinyLogin 是一套 tiny UNIX 公用程式,它用於登入嵌入式系統、接受其驗證身份、為其修改密碼,並能維護其使用者和使用者組。為了增強系統安全性它還支援影子口令。正如它的名字所暗示的,TinyLogin 非常小,對嵌入式系統上的 BusyBox 是極好的補充。
BusyBox:BusyBox 是一個多調用的二進位檔案,它提供了 POSIX 式的命令和專用函數的最小子集。它適合於非常小的嵌入式系統,比如引導磁碟等等。特別用於 Debian 拯救/安裝系統(它激發了對最初的 BusyBox 的開發)、Linux Routeur 方案、LEM、lineo 及其它地方。Busybox 是由 Erik Andersen 維護的。
Ash:Ash 是個非常小的 Bourne shell。
Sysvinit:Sysvinit 是 Linux 最常用的 init 包。我們將會用到 init 和 C 語言版 start-stop-daemon。
請參閱參考資料部分以獲得更多相關資訊。
建立引導磁碟
引導磁碟本質上是一張裝有微縮的、自含式 Linux 系統的磁碟片。它可以執行許多和完全的 Linux 系統相同的功能。下面的材料基於 Bootdisk-HOWTO(請參閱參考資料)。
第 1 步:Bios
所有的 PC 系統都是通過執行 ROM(明確地說,BIOS)中的代碼從引導磁碟的 0 柱面 0 扇區載入扇區,從而開始引導過程。引導磁碟機通常是第一個軟碟機(在 DOS 下指定為 A:,而 Linux 下指定為 /dev/fd0)。然後 BIOS 試圖執行這個扇區。大多數可引導磁碟的 0 柱面 0 扇區上包括了以下兩種內容中的一種:
來自載入程式,比如 LILO 的代碼,該載入程式定位、載入並運行核心以開始正常引導
一個作業系統,比如 Linux 的核心,的開頭部分
如果 Linux 核心直接裸拷貝到磁碟、硬碟或者其它介質上,那麼磁碟的第一個扇區將是 Linux 核心本身的第一個扇區。第一個扇區從引導裝置上載入核心的其餘部分繼續引導過程。
第 2 步:引導載入程式
您可以用一個象 LILO 這樣的載入程式執行引導過程。它允許開發和生產平台在同一硬體上共存,並且允許通過重新引導來實現從一個平台到另一平台的切換。LILO 引導載入程式是由 bios 載入的。然後它載入核心或者其它作業系統的開機磁區。它還提供了一個簡單的命令列介面,以根據其選項互動地選擇要引導的項。請參閱參考資料,擷取更多關於 LILO 的資訊。
第 3 步:核心
核心檢查硬體並載入根裝置,然後尋找根檔案系統的 init 程式並執行該程式。
第 4 步:Init
Init 是將要在您的 Linux 作業系統上啟動並執行所有其它進程的父進程。它會觀察其子進程,並在需要的時候啟動、停止、重新啟動它們。Init 從 /etc/inittab 擷取所有資訊。
第 5 步:Inittab
/etc/inittab 檔案通過引用名為 /etc/rc... 的指令碼安裝系統。它還擁有 getty 工具的條目用來處理登入過程。
第 6 步:登入過程
對於每個允許使用者使用的控制台,inittab 檔案裡都有一個 getty。getty 會啟動 /bin/login 來驗證使用者口令。
第 7 步:建立新的分區
摘自 LFS-HOWTO(請參閱參考資料):在安裝新的 Linux 系統之前,我們需要一個空的 Linux 分區來安裝新系統。如果您已經有一個 Linux Native 分區可用,您就可以跳過這一步和下面一步。選擇合適的硬碟(如 /dev/hda,如果您想在基本的主 IDE 磁碟上建立新的分區的話)啟動 fdisk 程式(或者 cfdisk,如果您更喜歡 cfdisk 的話)。建立一個 Linux Native 分區,寫入分區表並退出 (c)fdisk 程式。如果您被通知需要重新引導系統以確保分區表被更新,那麼請在繼續下面的步驟之前重新引導系統。
第 8 步:在新的分區上建立一個 ext2 檔案系統
摘自 LFS-HOWTO(請參閱參考資料):我們用 mke2fs 命令建立一個新的 ext2 檔案系統。把 $LFS 作為唯一的選項,這樣檔案系統就建立了。從現在起,我將把這個建立的分區稱作 $EMBPART。$EMBPART 應該被換成您建立的分區。
第 9 步:載入分區
為了訪問這個建立的檔案系統,您必須安裝它。要安裝分區,您要建立一個 /mnt/hda? 目錄並且在 shell 提示符下輸入下列內容:
mkdir /mnt/hda?
mount $EMBPART /mnt/hda?
如果您在 /dev/hda4 建立了分區並把它安裝到 /mnt/hda4 上,那麼您需要返回到把檔案複製到目錄 $EMBPART/usr/sbin 下的那一步,並把那個檔案複製到目錄 /mnt/hda4/usr/bin 下。完成了第 14 步的最後一個命令後再執行這一步(複製 $EMBPART/usr/sbin 目錄下的檔案)。
第 10 步:填充檔案系統
根檔案系統必須包括支援一個完全的 Linux 系統所需的全部內容。我們將要建立一個與檔案層次標準(參見參考資料)相去不遠的目錄結構。
第 11 步:目錄
新安裝的檔案系統的 mkdir 命令建立了以下目錄:
/proc
proc 檔案系統要求的目錄存根
/etc
系統設定檔
/sbin
關鍵的系統二進位檔案
/bin
被視為系統組成部分的基本的二進位檔案
/lib
提供即時支援的共用庫
/mnt
維護用的安裝點
/usr
附加的公用程式和應用軟體
cd /mnt/hda/
mkdir bin dev home proc sbin usr boot etc liv mnt root tmp var
mkdir -p usr/bin usr/sbin usr/share usr/lib
mkdir -p etc/config etc/default etc/init.d etc/rc.boot
mkdir -p etc/rc0.d etc/rc1.d etc/rc2.d etc/rc3.d etc/rc4.d etc/rc5.d etc/rc6.d etc/rcS.d
/dev
dev 目錄是執行裝置輸入/輸出要求的存根。這個目錄下的每個檔案都可以用 mknod 命令建立。您可以用下面的指令從您的案頭 Linux 直接複製要求的 dev 條目以節省時間:
cp -dpR /dev /mnt
安裝 TinyLogin 以及登入從屬需求
TinyLogin(請參閱參考資料部分進行安裝)將為您安裝不足 35kb 的下列工具:
/bin/addgroup、/bin/adduser、/bin/delgroup、/bin/deluser、/bin/login、/bin/su、/sbin/getty、/sbin/sulogin 和 /usr/bin/passwd。
請參閱主要的發布文檔或者手冊頁以獲得關於這些命令的詳細說明。
第 12 步:配置 TinyLogin
摘自 TinyLogin README:TinyLogin 模組化後可以協助您只配置必需的組件從而縮小二進位長度。要關閉不想要的 TinyLogin 組件,只需編輯 tinylogin.def.h 檔案並用 C++ 風格的(//)注釋將您不想要的部分注釋掉。
第 13 步:安裝 TinyLogin
在編譯完成以後,產生了一個 tinylogin.links 檔案,它隨後被 make install 用來為所有的內編譯函數建立指向 tinylogin 二進位檔案的符號串連。預設情況下,make install 會在 pwd /_install 中放入一個符號串連林,除非您已經定義了 PREFIX 環境變數。
第 14 步:安裝 Sysvinit 和 start-stop daemon
在核心載入完成後,它會運行 init 程式來結束引導進程。現在:
解壓縮 Sysvinit 歸檔檔案
進入 src 目錄
複製 $EMBPART/sbin 目錄下的 init 可執行檔
Sysvinit 包在 contrib 目錄下也有 C 語言版的 start-stop-daemon。
編譯
複製 $EMBPART/usr/sbin 下的檔案
第 15 步:配置 Sysvinit
Sysvinit 需要一個名為 inittab 的設定檔,它應該在 $EMBPART/etc 目錄下。下面是 LEM 分發版中使用的設定檔:
清單 1. Inittab 配置指令碼
# /etc/inittab: init( configuration.
# $Id: inittab,v 1.6 1997/01/30 15:03:55 miquels Exp $
# Modified for LEM 2/99 by Sebastien HUET
# default rl.
id:2:initdefault:
# first except in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# 0:halt 1:single-user 2-5:multi-user (5 may be X with xdm or other) 6:reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# CTRL-ALT-DEL pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now
# Action on special keypress (ALT-UpArrow).
kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
# /sbin/mingetty invocations for runlevels.
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
#3:23:respawn:/sbin/getty tty3 #you may add console there
#4:23:respawn:/sbin/getty tty4
第 16 步:建立初始的引導指令碼
就象在 inittab 檔案裡看到的一樣,Sysvinit 需要在它自己的目錄下的一些附加指令碼。
第 17 步:建立必需的目錄和基礎檔案
用下面的命令來建立目錄:
清單 2. 建立目錄和基礎檔案的指令碼
cd $EMBPART/etc
mkdir rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d init.d rcS.d rc.boot
進入解壓縮後的 Sysvinit 來源目錄
把 debian/etc/init.d/rc 複製到:$EMBART/etc/init.d
進入 $EMBPART/etc/init.d/ 目錄
建立一個與 LEM 中的檔案類似的新檔案 rcS:
清單 3. RCS 指令碼
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/etc/default/rcS
export VERBOSE
# Trap CTRL-C only in this shell so we can interrupt subprocesses.
trap ":" 2 3 20
# Call all parts in order.
for i in /etc/rcS.d/S??*
do
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
(
trap - 2 3 20
. $i start
)
;;
*)
$i start
;;
esac
done
# run the files in /etc/rc.boot
[ -d /etc/rc.boot ] && run-parts /etc/rc.boot
把可執行檔從您的分發版複製到 $EMBPART/bin。
第 18 步:添加基礎指令碼
這裡用的許多命令是 UNIX/Linux 命令,對嵌入在 UNIX shell 指令碼內部的路徑進行設定、匯出等操作。
清單 4. 注釋行
<!-reboot---------------------------------------------->
建立一個新檔案 reboot,它包含以下內容:
清單 5. Reboot 指令碼
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo -n "Rebooting... "
reboot -d -f -i
<!-halt---------------------------------------------->
建立新檔案 halt,它包含以下內容:
清單 6. Halt 指令碼
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
halt -d -f -i -p
<!-mountfs---------------------------------------------->
總結
在嵌入式應用的領域裡,從網際網路裝置到專用的控制系統,Linux 作業系統的前景都很光明。所有新造的微電腦晶片中大約有 95% 都是用於嵌入式應用的。由於 Linux 功能強大、可靠、靈活而且具有伸縮性,再加上它支援大量的微處理器體繫結構、硬體裝置、圖形支援和通訊協定,這些都使它作為許多方案和產品的軟體平台越來越流行。
由於可以公開免費得到 Linux 原始碼,因此對 Linux 和它支援的軟體組件的許多修改和配置也得到了不斷改進,以滿足採用 Linux 的市場和應用的多種需求。另外還有小型版本和即時增強版本。儘管 Linux 開始是作為 PC 體繫結構的作業系統,但是現在已經有了非 X86 CPU 的版本(帶或不帶記憶體控制單元),包括 PowerPC、ARM、MIPS、68K 甚至是微控制器。但是,請注意,在不久的將來,在許多其它的資訊技術(IT)領域會出現更多!