电源设计技术实用资料点击免费获取>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 嵌入式 Linux 應用:概述


共1条 1/1 1 跳转至

嵌入式 Linux 應用:概述

院士
2002-08-03 00:40:00    评分
從腕表到基於群集的超級電腦 Darrick Addison (dtadd95@bellatlantic.net) 高級軟體工程師/顧問,ASC Technologies Inc. 2001 年 8 月 在對嵌入式 Linux 的應用及其環境做了一番考察之後,接下來 Darrick Addison 將一步步地教您如何建立開發這些應用的軟、硬體環境。 現在 Linux 廣泛用於各類計算應用,不僅包括 IBM 的微型 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(8) 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,它包含以下內容: 清單 5. Reboot 腳本 #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin echo -n "Rebooting... " reboot -d -f -i   創建新文件 halt,它包含以下內容: 清單 6. Halt 腳本 #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin halt -d -f -i -p   總結 在嵌入式應用的領域裏,從因特網設備到專用的控制系統,Linux 作業系統的前景都很光明。所有新造的微型電腦晶片中大約有 95% 都是用於嵌入式應用的。由於 Linux 功能強大、可靠、靈活而且具有伸縮性,再加上它支援大量的微處理器體系結構、硬體設備、圖形支援和通信協定,這些都使它作爲許多方案和産品的軟體平臺越來越流行。 由於可以公開免費得到 Linux 源代碼,因此對 Linux 和它支援的軟體元件的許多修改和配置也得到了不斷改進,以滿足採用 Linux 的市場和應用的多種需求。另外還有小型版本和即時增強版本。儘管 Linux 開始是作爲 PC 體系結構的作業系統,但是現在已經有了非 X86 CPU 的版本(帶或不帶記憶體控制單元),包括 PowerPC、ARM、MIPS、68K 甚至是微控制器。但是,請注意,在不久的將來,在許多其他的資訊技術(IT)領域會出現更多! 參考資料 獲取完全的 ETLinux Linux 分發版。 看一下多用戶、基於網路的 Linux 版本 LEM。 LOAF,“Linux On A Floppy”版本, 象uLinux 一樣,在 386 上運行。 您還可以得到不帶 MMU 的 Linux 系統和 uClinux。 ThinLinux 是用於專用的相機伺服器、X-10 控制器、MP3 播放器以及其他一些類似的嵌入式應用的最小化的 Linux 分發版。 RTLinux 就是最早在新墨西哥理工學院開發的硬實時 Linux API。 EL/IX 是基於 POSIX 的硬實時 Linux API。 TinyLogin 是由 Erik Andersen 維護的,Busybox 也是。 Ash 是個非常小的 Bourne shell。 Sysvinit 是 Linux 最常用的 init 包。我們將會用到 init 和 C 語言版的 start-stop-daemon。 請閱讀 LILO 文檔。 要建立新的分區,在新的分區建立 ext2 文件系統,請閱讀 LFS-HOWTO。 瞭解更多關於 LEM 的細節,以及其他用於嵌入的專用軟體。 即時 Linux 是標準 Linux 作業系統的擴展。它提供了一種簡單的、流暢的即時程式,它把標準 Linux 內核作爲最低優先順序的任務來執行。它不僅允許插入用戶定義的、優先順序更高的(即時)任務,還允許使用標準 Linux 成熟的服務的功能。 RTAI 是一套建立在 Linux 內核修改最少的基礎之上的模組(添加/修改了大約 70 行),實現了即時硬體抽象層(RTHAL),即時應用程式介面(RTAI)建立在該層上。RTAI 服務實現了內核模組級的硬實時,用戶空間級的穩定即時。您也可以到 rtai.org 查找更多關於 RTAI 的資料。 Linux-SRT 是對 Linux 的內核的擴展,改進了即時(RT)應用運行的方式。標準 Linux 的設計意圖並不是成爲“媒體作業系統” 因而無法保證音頻、視頻或者其他關鍵程式以固定的速度運行。 Zentropix 重點介紹即時 Linux 並提供開發工具、支援、培訓課程和一張經過測試的由配置管理的即時 Linux 安裝 CD。 訪問 IBM 嵌入式 Linux 首頁。 查閱 IBM 的嵌入式 Linux 産品和開發人員技術支援。 瀏覽 developerWorks,獲取更多的 Linux 參考資料。 瀏覽 developerWorks,獲取更多開放源代碼參考資料。   關於作者 Darrick Addison 是 ASC Technologies Inc. 的一位元高級軟體工程師/顧問。從 1993 年以來,他一直致力於設計開發定制軟體應用。在軟體設計開發方面他的工作涉及各種商業和政府環境中的資料庫應用、網路應用(TCP/IP 客戶機/伺服器),GUI 應用以及嵌入式系統應用。他擁有電腦科學理科學士學位,並且正在約翰·霍普金斯大學攻讀電腦/遠端通信碩士學位。您可以通過 dtadd95@bellatlantic.net 和 Darrick 聯絡。他歡迎您的評論和提問。 [em27]



关键词: 嵌入式     Linux     應用     概述     用的     系統     記憶         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]