為何要用內嵌式 linux 系統 - nctuspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf ·...

17
1 Embedded Linux 的發展 的發展 的發展 的發展 陳文瑞 林盈達 摘要 摘要 摘要 摘要 Linux 夾帶著 Open Source 的聲勢,在作業系統的領域異軍突起,隱然有威 脅到 Microsoft 在作業系統上的霸主地位。但是在目前所見各式各樣 Linux 套件,絕大部分都還是在桌上型電腦提供一般使用者完成日常工作,或是作為伺 服器來提供服務。在另一方面,以 Linux 作為一個內嵌式作業系統,將是另一個 穩定而有效率的選擇。本文主要探討的議題為分析與比較將 Linux 作為內嵌式 作業系統的優缺點,以及在改善其缺點上所做的努力,即縮小化及加入即時性, 我們比較了現有各種嵌入式之 Linux、小型 Linux、即時 Linux 套件。另外也提 及到另一個成功的要素: 開發工具及發展環境,並且簡介一些自由軟體的開發工 具。 1. 為何要用內嵌式 為何要用內嵌式 為何要用內嵌式 為何要用內嵌式 Linux 系統 系統 系統 系統 所謂內嵌式作業系統,基本上是一種以微處理器為核心,為特殊目的而設計 的一套軟體系統。這些功能從簡單的控制灑水器去噴灑草坪,到放置在引擎內用 來分析燃料流量,各式各樣都有。在內嵌式的領域不像傳統 PC 一樣由 Wintel 所主導。有許許多多商業產品如 nucleus, Vxworks, pSoS 可供選擇,甚至於把整 UNIX 放到內嵌式系統上。Linux 則是目前內嵌式系統上的另一項新的選擇。 對於內嵌式作業系統發展者而言,開發一套內嵌式作業系統需要考量許許多 多的因素[1],如該系統所能提供的功能、價格、開發的時程、穩定性、技術支 援、發展環境等,就功能而言,Linux 可以說是一套全功能的作業系統,凡舉文 書處理、網路通訊、工程計算、視聽娛樂等等,都可以到軟體可在 Linux 執行,就價格而言,軟體還在一套套的時Linux 一點點上網 的通訊用,就可以由網路上抓下來,几乎可以說是不用。就穩定性而言, Linux 由於是開放原始碼,全世界數千萬人在發展使用臭蟲很快會被抓 到而且被解決掉。一般商用軟體大多是自發展,一但發現有題,大概只求原廠的技術支援部解決;但是是在 Linux 上發生問題,透過網路將 題發送出去,很快解答,這種技術支援是何商業軟體所無法達成的。 一般商用的開發的環境與工具如 IDE編譯器、除錯器軟體等都是相當昂貴的。 但是在 Linux ,這些工具基本上都是免費的,有些工具甚至於比商用軟體功 更強穩定。長期以來,自由軟體基金會(FSFFree Software Foundation)[2] 所開發的一系軟體也都移植Linux 上。將 Linux 用在內嵌式系統上,可說 是一個滿的選擇。 2. 內嵌式 內嵌式 內嵌式 內嵌式 Linux 作業系統的需作業系統的需作業系統的需作業系統的需然將 Linux 用在內嵌式系統上有許多見的處,但是並非百

Upload: others

Post on 14-Sep-2019

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

1

Embedded Linux 的發展的發展的發展的發展 陳文瑞 林盈達

摘要摘要摘要摘要 Linux 夾帶著 Open Source 的聲勢,在作業系統的領域異軍突起,隱然有威脅到 Microsoft 在作業系統上的霸主地位。但是在目前所見各式各樣 Linux 的套件,絕大部分都還是在桌上型電腦提供一般使用者完成日常工作,或是作為伺

服器來提供服務。在另一方面,以 Linux作為一個內嵌式作業系統,將是另一個穩定而有效率的選擇。本文主要探討的議題為分析與比較將 Linux 作為內嵌式作業系統的優缺點,以及在改善其缺點上所做的努力,即縮小化及加入即時性,

我們比較了現有各種嵌入式之 Linux、小型 Linux、即時 Linux 套件。另外也提及到另一個成功的要素: 開發工具及發展環境,並且簡介一些自由軟體的開發工具。

1. 為何要用內嵌式為何要用內嵌式為何要用內嵌式為何要用內嵌式 Linux系統系統系統系統 所謂內嵌式作業系統,基本上是一種以微處理器為核心,為特殊目的而設計

的一套軟體系統。這些功能從簡單的控制灑水器去噴灑草坪,到放置在引擎內用

來分析燃料流量,各式各樣都有。在內嵌式的領域不像傳統 PC 一樣由 Wintel所主導。有許許多多商業產品如 nucleus, Vxworks, pSoS可供選擇,甚至於把整個 UNIX放到內嵌式系統上。Linux 則是目前內嵌式系統上的另一項新的選擇。 對於內嵌式作業系統發展者而言,開發一套內嵌式作業系統需要考量許許多

多的因素[1],如該系統所能提供的功能、價格、開發的時程、穩定性、技術支援、發展環境等,就功能而言,Linux 可以說是一套全功能的作業系統,凡舉文書處理、網路通訊、工程計算、視聽娛樂等等,都可以找到軟體可在 Linux 上執行,就價格而言,當其他軟體還在一套套賣的時候,Linux 只要花一點點上網的通訊費用,就可以由網路上抓下來,几乎可以說是不用錢。就穩定性而言, Linux 由於是開放原始碼,全世界有數千萬人在發展使用它,臭蟲很快就會被抓到而且被解決掉。一般商用軟體大多是自行發展,一但發現有問題,大概只能尋

求原廠的技術支援部門來解決;但是若是在 Linux上發生問題,只要透過網路將問題發送出去,很快都會有解答,這種技術支援是任何商業軟體所無法達成的。

一般商用的開發的環境與工具如 IDE、編譯器、除錯器軟體等都是相當昂貴的。但是在 Linux 中,這些工具基本上都是免費的,有些工具甚至於比商用軟體功能更強,更穩定。長期以來,自由軟體基金會(FSF,Free Software Foundation)[2]所開發的一系列軟體也都移植到 Linux上。將 Linux 應用在內嵌式系統上,可說是一個滿不錯的選擇。

2. 內嵌式內嵌式內嵌式內嵌式 Linux作業系統的需求作業系統的需求作業系統的需求作業系統的需求 雖然將 Linux 應用在內嵌式系統上有許多顯而易見的益處,但是並非百分

Page 2: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

2

之百沒有缺點,Linux 最早的目的是作為一般通用型 PC或 Server的作業系統,因此設計上並非完全符合內嵌式作業系統所需,表一為一般作業系統與內嵌式作

業系統的差異[3]。 一般通用型作業系統 內嵌式作業系統 系統整體效能的最佳化 最壞情況下的最佳化 最有效率的排程 可預期的排程 滿足各種不同的服務需求 滿足特定的服務需求 追求最高的產出 追求最小的延遲

表一 通用型作業系統與內嵌式作業系統的比較 由表一可見,傳統作業系統強調整體系統平均效能,而內嵌式系統則強調提

升最壞情況下系統效能。目前 Linux缺乏即時處理能力是因為 Linux系統的排程器缺乏優先權佔用(preemptive scheduling)的能力(Linux 提供分時巡迴排程,即time-sharing round-robin scheduling),以及缺乏將需要即時應用程序所佔記憶體頁面(page)不被置換(swap)的能力。大部份內嵌式系統對回應時間都有相當嚴苛的要求,這使得 Linux在內嵌式系統上的應用受到限制。再者,Linux 提供了全功能的虛擬記憶體保護與分頁的機制,這項優點放到內嵌式作業系統卻成了一項缺

陷,複雜的虛擬記憶體控制機制會將整個系統的效率拖垮。另一方面,記憶體在

內嵌式系統也是一個很有限的資源。因為內嵌式系統大都為某一些特殊需求而設

計,功能較為專一,所以一些傳統 Linux 上的功能若未使用到,就應該把它移除。圖一是內嵌式 Linux 的適用範圍。

圖一 內嵌式 Linux適用範圍

以下的三個章節,主要來討論目前在業界幾個較早開發的內嵌式 Linux 套件,以及另外兩個重要的議題:如何將 Linux 縮小使它能適用於內嵌式系

Flash/ROM/Disk Size 0.1

0.5

1

2

4

8

16

32

64

128

0.1 0.5 1 2 4 8 16 MBs GBs GBs TBs

Large

Tiny Mid-range

High-End Embedded

Embedded PC

Desktop

Server

RAM Size (MB)

Page 3: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

3

統以及如何使 Linux 有處理即時應用的能力。

3. 內嵌式內嵌式內嵌式內嵌式 Linux 套件套件套件套件 因為將 Linux 應用在內嵌式系統的好處是顯而易見的,因此就有許多公司,開始將一些傳統 Linux 套件加以修改,使它能適用於內嵌式系統。大部分內嵌式系統只有 CPU、RAM、ROM 或 Flash 以及一些週邊設備,週邊設備也不太可能像 PC一樣換來換去。因此,要將 Linux 應用在內嵌式系統,就必需針對系統的特性作適度的修改。以下介紹幾份內嵌式 Linux的套件,並且對它們作一個比較。 Embedix Linux

Embedix Linux[4]是 Lineo 公司以 Linux kernel 2.2.13 版為基礎發展而來,Embedix 大量使用共享函式庫,它使用了一個技術用來分析並且找出內含於 Embedix 套件中的可執行檔內所用到的共享函式,不需要用到的部份由函式庫移除以縮小執行檔的大小。除此之外,Lineo 也提供部份適用於內嵌式系統的商用軟體如一個小型的圖形函式庫,可以用來與他們的另一項產品”內嵌式瀏覽器”作結合提供圖形介面,這樣就不需要將整個 X- window 系統及圖形函式庫放進來。

Embedix 除了 GPL 所保護的軟體有提供原始程式碼之外,其他相關的軟體也提供完整的原始程式碼、修補檔及設定檔,使得使用者可以重新去編譯建立適

合自己設備所要的可執行檔。Embedix 所提供的發展工具,也完整的包括在整個套件之中,系統開發者可以用這些工具來開發、設定、除錯、測試所撰寫的程

式與硬體設備,而不需要額外花費。

Etlinux Etlinux[5]是另一套完整以 Linux 為基礎的內嵌式作業系統,它主要目的是

提供一個精緻、模組化、有彈性而完整的伺服器。它儘可能的縮減記憶體與磁碟

空間,因此作業系統的核心就必需要作部份修改,有些內部的資料結構也被縮

小。Etlinux 內含有 Tcl language engine,為針對內嵌式系統的特性, Tcl language engine 特別被增加了可以純粹由 Tcl來重寫初始化的描述檔。

BlueCat BlueCat™[6]Linux 是 Lynx 公司所發展一套完整的內嵌式 Linux 發展環

境,它包括了一套Linux作業系統以及系統發展工具。它是以核心的版本為 Linux 2.2.12-20的 Red Hat 6.1套件為基礎加以修改而來,使用 Lynx 公司所發展的整合式發展環境,設計者可以根據不同的需求,在 PowerPC 或 Pentium 等級的微處理器上開發不同的應用軟體。整合式發展環境可以 PC 及 Red Hat Linux 作為發展平台,發展工具包括標準 ANSI C/C++ 編譯器,組譯器,連結器,以及一個

Page 4: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

4

可以產生可供載入的 image maker(mkimage)。

eCos Red Hat公司所出版的 eCos [7](Embedded Configurable Operating System)是一套開放原始程式碼的作業系統,發展者可以在 eCos 上自由的開發與修改包括eCos 本身的軟體,並且可以自由的發行這些開發的軟體而無任何限制。Red Hat 公司另外也出版了一套整合式開發環境 GNUpro,它可用來幫助發展 eCos 上的應用程式或移植到不同的系統平台上,eCos 有一項革新的技術就是它的設定建構系統(configuration system),它可以用於幫助修改或升級原來的系統。新版的eCos 有許多有利的新的功能,例如套件管理的軟體,可以整合其他公司所發展的軟體在 eCos 上運作以擴充 eCos 的功能,標準的建構檔檔案格式,可以將 GUI及命令列下的 configuration 以使用者可讀取的型式儲存起來。在 GUI 的系統建構工具軟體中,另外也有一套以 Web based 的線上支援文件,來幫助建構整個eCos 系統。其他還有很多軟體,都是 GPL規範下開放原始碼的軟體。

內嵌式內嵌式內嵌式內嵌式 Linux 套件的比較套件的比較套件的比較套件的比較 表二為上述幾種 Linux 套件的比較表,大多是將現有的 Linux 套件加以稍加修改整合移植到內嵌式系統上,雖然表中有些欄位如支持的週邊設備與網路功

能,各家廠商並未詳細說明其規格,基本上只要 Kernel有支援,都可以作得到。有創新的部分,都集中在開發環境與工具上。 BlueCat Etlinux Embedix eCos

目的 完整的內嵌式系統發展

環境,適用於內嵌式系

統的 OS。

簡 單 型 的

Server/Client,非常簡易型的內嵌式 PC

簡單的用戶端介面,內

嵌式 PC,低成本的瀏覽器,可聯接 Interne的內嵌式設備。

完整的內嵌式系統發展

環境,適用於內嵌式系

統 的 OS 。 consumer electronics, telecommunications, automotive, and other cost-sensitive and lightweight applications

CPU (target processor) Pentium, PowerPC或其他更高階的 processor

386SX processor 或其他更高階的 processor

目 前 支 援 X86 及

PowerPC 系 列 ,

MIPS、ARM 及 SH 系列正發展中。

ARM Thumb ARM9 Cirrus Logic CL-PS7111 and EP72xx Cogent CMA222 and CMA230 ARM boards Hitachi SH3 Intel StrongARM Intel x86 PC Matsushita AM33 Motorola MBX evaluation board NEC MIPS VR4300

Kernel version Linux 2.2.12-20 未知 Linux 2.2.13 版 Linux 2.2.12-20

RAM Size 2MB RAM Space 2MB RAM Space 最少 4MB,若有額外

功能必需再增加 2MB RAM Space

ROM/FLASH/Disk Size 2MB of Disk Space (Hard disk or M-System Disk on chip)

2MB of Disk Space (Hard disk or M-System Disk on chip)

最少 2MB,若有額外功能必需再增加。不需

要硬式磁碟機。

2MB of Disk Space (Hard disk or M-System Disk on chip)

支援的週邊設備 未知 未知 硬式磁碟機,軟式磁碟

機, CD-ROM, Flash未知

Page 5: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

5

機, CD-ROM, Flash boot loader,Ethernet,RS232等

網路功能 TCP/IP networking protocol stack

TCP/IP networking protocol stack Embedded cgi-capable WEB browser Telnet Server Email Server CORBOA support Remote file management TCL script language

TCP/IP networking protocol stack Networking routing/firewall Web Server 內嵌式瀏覽器 FTP Client Telnet Client 及 Server

TCP/IP networking protocol stack, BOOTP, The protocol stack derived from OpenBSD source

免費? No Yes No No

Boot loader BlueCat loader, mkimage

Lilo,syslinux lilo , syslinux ,nboot ,others

Lilo,syslinux

檔案系統 Ext2 Ext2 fat (msdos) , ext2 ,

minix,initrd Ext2

提供整套發展環境 Yes, 包 括 Compiler, linker, loader, Debugger, Version control software, library and utility

Yes, quality C/C++ compilers, debuggers, libraries, interpreted languages,

Yes, Emdedix SDK Yes, GNUpro Tool kit包括 Compiler, linker, loader, Debugger, Version control software, library and utility

表二 內嵌式 Linux套件比較

4. 小型小型小型小型 Linux 套件套件套件套件 在內嵌式系統的環境中,記憶體是相當有限的資源,如何能建構一個穩固、

大小適中、功能齊備的內嵌式 Linux 作業系統成為一個最要緊的問題。在目前所見到的小型 Linux 套件中,都是由一般傳統 Linux 套件縮小而來,不去修改Linux 核心部份程式碼,只是將不需要的驅動程式、應用程式及函式庫刪除,達到縮小的目的。大部份的小型 Linux 套件都使用很少的Disk 空間或者是在RAM 上模擬一個硬碟。以下針對部份小型 Linux 套件作一番介紹。

AlfaLinux AlfaLinux [8]是一套類似 Slackware的 Linux 套件(kernel version 2.0.34),它是由業餘 Linux 的高手所開發,大小適合放入兩片 1.44Mega bytes的磁碟片,它不需要對傳統 Linux套件作任何的修改。內容包括所有磁碟操作及網路功能,最基本的需求包括一台 486等級以上的電腦,最少 8Mega RAM,但是若需要額外的功能,12 Mega RAM是最起碼的要求。第一片磁片只包括 Linux 開機與核心的功能,應用程式都是放在第二片磁片。 新版的 alfslinux 加入了 vi ,cat,pwconv 及 unconv 等新的功能。alfalinux 設計的目的在於提供使用者一個很容易修改的架構,可以根據自己的需求,去增

加修改新的功能,使電腦能作不同用途。使用者自己也可以成為 alfalinux 的開發者。

Linux Router Project Linux Router Project [9]是一套以網路為中心的小型 Linux 套件,它是由開放原始碼的一些公用程式以及 Linux 套件抽取出來組成的,大小可以放入一片

Page 6: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

6

1.44Mega bytes 的磁片,大部分 LRP 的套件來自於 Debian,主要用途是用來建構一個低成本的 router,access server,簡單型的用戶端介面,簡單型的 server,網路應用以及內嵌式系統。 LRP 是放入一片 1.44Mega 的磁片上,它沒有足夠的空間來存放編譯的工具及原始程式碼,所以,LRP 允許使用者可以動態的將編譯過可執行的軟體模組加入已經編譯過可執行 Linux 核心中。在系統初始化的階段就使用”insmod”來插入一個模組,這個方式讓 LRP有了相當的彈性。

Linux Terminal Server Project Linux 終端伺服器計畫[10][11]是一項開放原始碼專案,目的在於創造一個利用 Linux 架設的網路工作站環境,而這些工作站只需要一些簡單的配備,不需要任何磁碟機,就能在客戶端使用終端伺服器上的程式。最顯著的優勢除了便

宜之外,就是需求的資源相對地也低很多,也不需要磁碟機,大大降低架設網路

環境的成本。一台無磁碟的工作站所需的配備有:一顆 x86 處理器﹑16MB 記憶體﹑網路卡,和啟動唯讀記憶體(boot ROM)。boot ROM 的作用在於初始網路檔案系統環境,讓 Linux 核心程式能夠去下載伺服端的資料到終端機的記憶體內。而 X 視窗系統是客戶端最主要的程式,其他的程式都是由伺服端來執行。客戶端在開機後由 boot ROM 自動和伺服端溝通﹑傳輸,然後啟動。此外,伺服端的系統可以採用一些 Linux 套件,對於一般的使用(Email﹑Web等)很方便,但它也有一些缺點,例如沒有較好的管理系統,也缺乏網路印表機的機制。

Thin Linux ThinLinux [12]是一套一般性的工具組,几乎任何事情它都能做,包括stand-alone的防火牆,攝影機的 Server,MP3 player,X-10 controller,或者是任何用戶端有趣的設備或應用。ThinLinux 可以在相當多種型態的處理器上執行(只要 Linux有支援均可),發展的環境也可以不在 Intel 的 PC 上。 FirPlug’s ThinLinux 是一個將 Linux 套件部份模組與程式組合起來的一個套件,它設計的目的是為了未來下一代內嵌式系統或專屬某些應用的 PC,典型的 ThinLinux 的產品是單板的 PC,上面有一個 flash disk,超過 16 Mega bytes RAM,以及通訊的介面,也可選擇加上 Video 及鍵盤介面。

PicoBSD 雖然 PicoBSD [13]不是由 Linux 修改而來,但它也是一套可放入一片1.44Mega bytes 大小磁片的 FreeBSD ,它是由 FreeBSD 3.0-current修改而來,我們把它放在這裡與 Linux 做個對照。根據不同用途的版本,目前 PicoBSD 有Dial-up version,Networking version,Router version,Dial-in server version。它最少需要 386SX 以上等級的機器,最少 8Mega bytes RAM,不需要硬碟,目前最

Page 7: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

7

新的版本是 0.42 版。主要用途是用來建構一個無主機工作站,內嵌式系統,取代一般 router,防火牆,access server,簡單型的用戶端介面,簡單型的 server,網路應用等等。

各種小型各種小型各種小型各種小型 Linux套件的比較套件的比較套件的比較套件的比較 表三是針對 Small Linux Distribution 作一個比較,主要是針對網路應用,因為目前所見大部份 Small Linux Distribution都是應用在這方面。

Linux Router Project

PicoBSD LTSP alfalinux Thin Linux

Purpose Linux router firewall Dial up server

Small freeBSD router, firewall Dial up server Thin Client

Thin Client, Internet access, low cost terminalX-terminal

Web tools such as a browser, FTP, telnet, or other Internet communications standards.(3)

Kernel version Linux 2.0.36 FreeBSD 2.2.5 Linux 2.2.13 Linux 2.0.34 Linux 2.2.14 Network module Linux NET4.0 unknown Linux NET 3.035Memory Size 8MB 10MB 16MB 16MB 16MB ROM or Disk spack

1.44MB floppy disk 1 piece

1.44MB floppy disk 1 piece

Boot ROM 1.44MB floppy disk 2 pieces

1.44MB floppy disk 1 piece

Configuration tools

Yes (lrcfg) Yes none none None

Network tools

Ifconfig Ipfwadm Netstat Ping, other are option, not include in basic package

Ppp, ping, route, routed, tftpd(1), traceroute, bootpd, natd, netstat, nfs, snmpd, ifconfig, inetd, ipfw, telnet, telnetd,

X-client/sercer ,NFS

Compressed file in disk 2 ftp, ifconfig, ping, pmail, pppd, route, telnet, traceroute, nslookup, tinyIRC

Ifconfig,

System management tools

Login, pwd, mknod, mount, umount,…,etc Most fundamental function (2)

Login, pwd, mknod, mount, umount, vm, …,etc Most fundamental function

none Login, pwd, mknod, mount, umount, vm, …,etc Most fundamental function (4)

Login, pwd, mknod, mount, umount, vm, …,etc Most fundamental function

Editor tools

Editor ee none Pico (in disk 2)

None

File management tools

Ls, rm, more,…,etc Most fundamental function

Ls, rm, more,…,etc Most fundamental function

none Ls, rm, more,…,etc Most fundamental function

Ls, rm, more,…,etc Most fundamental function

Programming tools

none none none none None

表三 小型 Linux套件比較

5. Linux 在即時性作業系統的應用在即時性作業系統的應用在即時性作業系統的應用在即時性作業系統的應用 大部分即時性應用,大多是使用在工業控制上,這些應用都有一種特性,那

就是時效性。就技術上來說,所謂”即時”意指作業系統必需在可預期的時間範圍內,對某些特定的事件作出回應加以處理。只有在系統可以預期事件何時被處

理,才能針對此一限制在設計上加以考量,避免系統的失誤導致錯誤的結果。然

而 Linux 只提供可被插斷的排程策略,在執行核心空間程式時,也不允許外部事件的插斷,所以處理起有時效性的工作時,效率並不是很好,如何以最少的修

改核心程式來提供即時的功能變成為一個很重要的課題,接下來我將就目前幾個

在 Linux 上提供即時能力的專案計畫,作一個介紹。

Page 8: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

8

RT-Linux 為了能讓高階的內嵌式系統能夠使用 Linux做為其即時作業系統,目前有兩種較為普遍的方法被應用,第一種就是使用 POSIX 針對即時作業系統所訂定的標準,如圖二所示,但是這個標準太大,太笨重,它功能與特性較適用於桌上型

PC或工作站,但是就內嵌式系統而言,幫助不大。

圖二 POSIX即時作業系統架構與標準介面 另外一種方式,就是使用 Real time Linux (RTLinux)[14][15],它是對於標準

Linux 核心的一種延伸,使 Linux 擁有處理時間要求比較嚴格的工作之能力,在RT-Linux 中,有一個小的即時核心與標準 Linux 核心並存,如圖三所示,所以應用程式仍然可以使用系統的資源及服務,需要即時處理的工作可以另外再開啟

一個 Task,在核心空間內執行,它們可以直接存取硬體資源而不需透過 Linux 核心管理,不會被 Linux核心記憶體管理模組所影響。缺點是 Real-time task 無法透過核心所提供的系統呼叫來存取 Linux 核心的系統資料,可能造成資料內容不一致的情況。在 RT-Linux中,所有的中斷都先被 RT-Linux 的核心所處理,再傳送到 Linux Task (整個 Linux 核心被視為一個 Task), RT-Linux 的核心會模擬一個硬體的中斷控制器,當 Linux 核心取消某個中斷時,RT-Linux 的核心會將此中斷放入一個 Queue 中等待,直到 Linux 核心恢復該中斷,再傳給 Linux 核心。在目前系統中,Real-time task與 Linux user task 之間的通訊是透過 message queue 或是共享記憶體。就整體而言,RT-Linux只提供相當有限的幾個功能來建構即時系統, Real-time task唯一要做的是處理需要即時的 I/O 動作並且儘快將這些資料傳送到上層 Linux 應用程式來加以處理。簡單的 RT-Linux 有兩個好處,第一,因為它很簡單,所以程式不易出錯,再者若是有 bug,也很容易被發現而排除,這是一個很重要的因素,因為整個 Real-time 部分只佔 Linux系統應用的一小部份, 只要能提供足夠的功能以達成主要 real-time目前即可。

Init Bash Real timetask

Real time task

Drivers

Hardware

System callsLinux Kernel

Interrupt or polling

Page 9: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

9

圖三 RTLinux架構與介面

RTAI RTAI [16][17]這個計劃就是要在 Linux 之上提供一個嚴格的即時系統,能夠讓需要時間控制相當準確的應用程式能夠在 Linux 上執行。在架構上 RTAI 參考了 RTLinux 的想法,如都將 Linux 的核心當成一個最低優先權的 Task,但是它提供了 RTLinux 所沒有的一些功能與特性使它更為適用於即時系統,比如 RTAI 提供週期性 Timer ,可以用信號或訊息通知 Real-time Task,以及支援 FPU 等。與 RTLinux 不同的是, RTAI 則盡可能用少量的修補檔,用動態載入模組將即時功能的架構加入核心之中,使得核心很容易的提供額外的功能。在 RTAI的實作上,有三個主要核心模組必需要載入到 Linux 核心中才能提供即時處理的能力,好處是不必為了加入一個新功能而整個 Linux 要重新編譯一遍,需要時再載入,不用之後也可以卸下。實作即時的 Task 也如同寫一個核心模組一樣,只要三個主要核心模組有載入,就可以載入即時的 Task。這三個主要核心模組分別是:rtai module (應用程式介面),rtai_sched (排程器)以及 rt_fifos (佇列)。下面的例子說明如何使用 RTAI來提供即時功能,假設有一件工作需要及處理,我們把它寫成一個核心模組 rt_process: insmod /home/rtai/rtai insmod /home/rtai/modules/rtai_fifo insmod /home/rtai/modules/rtai_sched insmod /<path>/rt_process 當不再需要些處理時: rmmod rt_process rmmod rtai_sched rmmod rtai_fifo rmmod rtai RTAI 目前提供大約八十個功能,含括了程序處理,時間處理,同步機制,程序間的通訊,以及一些中斷處理等功能,已具備了一個簡單的即時核心所需提供的

Init Bash

Drivers

Hardware

System calls Linux Kernel

Interrupt or polling

Real timetask

Real time task

RT-Linux SchedulerI/O

InterruptInterrupt

I/O

Xterm

Page 10: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

10

功能,未來則朝著提供與 VxWorks 及 pSOS 相容的函式庫,發展環境,除錯功能及通訊能力等方向繼續發展。

比較傳統比較傳統比較傳統比較傳統 Linux套件與加入即時功能之後的差異套件與加入即時功能之後的差異套件與加入即時功能之後的差異套件與加入即時功能之後的差異 為比較傳統 Linux 與加入即時功能之後的差異,阿根廷的 La Plata University研究者[18]針對這兩種 Linux 設計了一些測試來比較其差異,測試主要分兩個項目:1. 測試時間的間隔:每隔 40ms對 parallel port中某個 pin 做 I/O 以產生 40ms的連續方波,2. 產生一個 IRQ 7的中斷,當中斷產生時,輸出一個訊號到 parallel port中某個 pin。測試的條件分成下列 6種: 無負載:在系統開始執行後,所有背景執行的程序都取消。 數個背景執行的程序:在背景執行包括 httpd,lpd,smbd,nmbd,sendmail,inetd,crond,syslogd,and others。

硬碟負載:重複執行”ls –IR”。 網路負載:重複執行”ping –f”。 全負載:上述兩種負載同時運作。 運算負載:執行一個小的 C 程式,重複執行浮點數除法運算。 表四為執行上述測試的結果:

負載型態 中間值 標準差 最小值 最大值 集中度 無負載 19996 1.45 19989 20054 410.46 數個背景執

行的程序 19999 45.61 18186 20676 586.67

全負載 20009 538.84 16804 29908 27.38 硬碟負載 19991 391.14 16594 25054 18.63 網路負載 19999 114.35 19653 22007 19.21 運算負載 19999 16.79 19643 20405 389.28 表四 Linux 未加入即時功能而以一般方式實作所測出的結果(microsec)

負載型態 中間值 標準差 最小值 最大值 集中度 無負載 19999 0.89 19993 20013 18.85 數個背景執

行的程序 19999 1.31 19993 20016 15.80

全負載 19999 2.45 19990 20016 2.10 硬碟負載 20000 1.92 19985 20014 5.92 網路負載 20001 2.53 19981 20019 3.31 運算負載 19999 1.39 19988 20016 18.62 表五 Linux 加入即時功能而以 Real-Time Task 方式實作所測出的結果(microsec)

表四與五為標準 Linux核心與加入即時功能的 Linux核心執行第一項測試的結果,很明顯可以看到,沒有 RTLinux 的支援,面對需要時候很精確的工作時,

Page 11: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

11

標準 Linux核心會受到其他工作嚴重影響,而導至於處理的時間產生很大的變異性。

負載型態 中間值 標準差 最小值 最大值 集中度 無負載 21.62 1.55 20.80 48.70 139.41 數個背景執

行的程序 28.16 312.70 21.30 22103.00 4963.00

全負載 369.31 528.20 29.10 27546.00 1408.00 硬碟負載 440.61 420.82 26.60 8292.00 63.35 網路負載 114.33 91.59 27.50 2593.80 107.06 運算負載 9790.10 2684.80 26.20 9381.10 -1.21 表六 Linux 未加入即時功能而以一般方式實作中斷常式所測出的結果(microsec) 負載型態 中間值 標準差 最小值 最大值 集中度 無負載 2.36 0.55 2.10 15.50 266.11 數個背景執

行的程序 2.34 0.35 2.10 10.80 106.58

全負載 3.84 1.04 2.30 19.00 22.10 硬碟負載 3.20 0.67 2.10 19.40 112.96 網路負載 4.38 1.71 2.50 25.00 8.90 運算負載 2.56 0.43 2.20 14.50 243.16 表七 Linux 加入即時功能而以 Real-Time Task方式實作所中斷常式測出的結果(microsec)

表六與七分別為標準 Linux核心與加入即時功能的 Linux核心處理中斷的效率比較,很明顯可以看出,加入即時功能的 Linux核心對於中斷的處理大部分都可以在 10 microseconds內處理完畢,最遲不過 25 microseconds,但是對於標準Linux核心而言,同樣的中斷處理居然可以慢到好幾秒甚至於數十秒鐘,這對即時需求的應用而言,根本不可行。

6. 開發工具與環境開發工具與環境開發工具與環境開發工具與環境 對系統的開發者而言,好的發展環境可以加速產品的開發流程,增進效率。

但是一般這類的發展工具都是非常昂貴的,如何能找到一套便宜好用的發展工具

則是本章節所要介紹的。自由軟體的優點不僅只於價格低廉,品質優於時下流行

的系統,更重要的是它提供程式原始碼,廠商可以跟具自己的需求去開發或使用

這些軟體。以下介紹內嵌式作業系統發展所需的工具。

跨平台編譯器,鏈結器,載入器跨平台編譯器,鏈結器,載入器跨平台編譯器,鏈結器,載入器跨平台編譯器,鏈結器,載入器,,,,函式庫函式庫函式庫函式庫 任 何 的 內 嵌 式 系 統 計 劃 , 都 需 要 有 一 個 好 的 跨 平 台 編 譯 器

Page 12: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

12

(cross-compiler)[19][20]、聯結器(Linker) 及載入器(loader)。GNU 的編譯器與聯結器, gcc 及 ld, 是一個相當便宜、成熟、穩固而且多功能的編譯器,它能夠針對許多不同的系統,產生高品質的程式碼,GNU 的編譯器與聯結器除了成熟、穩固之外,它還有許多相當精巧的功能,例如: 語法與執行期潛在錯誤檢查: GNU 編譯器提供許多 Command-line 的選項可以在編譯階段找出許多程式潛在的問題,例如 “-Wall” 這個參數可以要求編譯器針對所有可疑的問題都對使用者提出警告。 在 C程式中穿插組合語言指令: GNU 編譯器提供一個強而有力的語法,它可以在 C/C++ 程式碼中,直接寫組合語言程式碼,而且不會影響到編譯器做最佳化的功能。 安裝 GNU 跨平台編譯器(鏈結器、載入器、函式庫)需要有點耐心,通常都不太順利。因為一般人較少會去建構一個內嵌式系統的發展環境,有問題的話可

就要自己想辦法解決。

除錯器除錯器除錯器除錯器 Debugger GNU Debugger (GDB)可以說是世界上使用最廣的一種除錯器之一

[21][22],它是一套相當完整得多功能除錯器,使用者介面是以文字為基礎,可以用來對 C,C++,PASCAL,FORTRAN,Assembly language 所寫的程式作除錯。GDB 功能強大,最基本的一些功能比如在程式中設中斷點,單步執行,觀察記憶體內容,觀察 register 內容等。除此之外,GDB 還能對遠端的機器作除錯的操作,它有一套通訊協定,RSP (remote serial protocol),可以用來作為 GDB 遠端除錯 Host 與 Target 之間互相溝通的協定。因為 GDB 有這種功能,除了能夠對 Linux 核心除錯之外,它也很適用於內嵌式系統。除了一些基本功能之外,GUN debugger 還有一套 Script language 可以來對系統做一聯串的設定及測試。GDB 是種互動性工具,雖然文字型態以下命令方式的 GDB 已經提供很強的功能了,但是對大多數人而言,圖型使用者介面仍然是最容使用的。因此有許多的

軟體以 GDB 為基礎,整合成一套圖型使用者介面的 GDB,例如 Emacs,它除了是一套功能強大的編輯器之外,它還可以在它的畫面中列出原始程式碼以及

program counter,透過 Emacs 的命令列還可以對 GDB 下指令。除了 Emacs 之外,其他類似的軟體還有 xxgdb,mxgdb,DDD,kdgb,Code Crusader 及 wind River’s Crosswind 。 圖 四 為 DDD 除 錯 器 的 畫 面 [23] 。

Page 13: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

13

圖四 DDD的 GDB畫面

整合性發展環境與工具整合性發展環境與工具整合性發展環境與工具整合性發展環境與工具(IDE) 有些公司就專門發展一些軟體,將開發一套系統所需的一些工具,整合成一套

package,方便系統開發者使用,例如 Red Hat 的 GNUPro Tool kit。但是這些Tools 都相當昂貴,所幸,也有人針對這種需求,開發相關的工具,Kdevelop 這個計畫就是為了在 Unix 的環境下提供整合 C/C++編譯器的整合性開發環境IDE,Kdevelop[24]可以在 KDE 或 GNOME 的圖形介面的環境下執行。圖五為Kdevelop 1.1 版在 GNOME 下執行的畫面。 一套整合性開發工具通常都有許多不同的性質的功能,函蓋開發過程中所需

的工具,以 Kdevelop 而言,它提供以下所列的功能: Project Management:提供專案計畫管理,可單獨對某一檔案作屬性設定,並且協助程式設計者整合開發進度,作版本控制。 Dialog Editor:幫助使用者很容易的由內建的對話盒,去建構 GUI 使用者介

Page 14: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

14

面,由於 Kdevelop 完全 open source,使用者也可以借由修改內建的對話盒的程式,來提供更多的功能。 Graphical Class Viewer/Class parser/ Class tools:可提供概觀專案中所有的類別(Class)、類別中的 C及 C++ 敘述、類別的結構、運算子等。類別工具(Class tools)的對話盒可以增加、減少或修改類別的屬性,類別工具(Class tools)是Kdevelop 的一個新的功能,它基本的想法是可以利用類別工具來觀察類別之間的繼承

(inherence)關係以及類別的方法(method)。 整合性除錯工具: Kdevelop 1.1版提供了一個整合性除錯器,使用者在使用Kdevelop 的 Class Viewer 時,可以有效率的找出問題,這個除錯器可以以原始碼的型式除錯,設定中斷點,觀察變數與堆疊的內容等。

YARD 就以前面所提到的小型 Linux 套件而言,對一個熟悉 Linux 的使用者而言,

從標準的 Linux 套件中抽取所需的部份,放入一或兩片磁片中,不需要硬碟就可以 boot up Linux的工作而言,並非難事。麻煩的地方在於如何選擇所要的檔案功能,函式庫,區動程式等,這些工作非常煩雜。Bootdisk_HowTo 的作者 Tom Fawcett 特別針對這種的需求,以 Perl 語言寫了一個 Script file,YARD[25],可以用來由標準的 Linux 套件中抽出必要的部分,做成一片開機磁片。

BusyBox BusyBox [26]是一個小型的 UNIX 公用程式,它將許多常用的功能如檔案的

公用程式,Shell 的公用程式,搜尋的公用程式,grep,gzip,tar 等等,放入一個小的執行檔中,檔案大小約為 200多 K bytes,可以用來取代大部份常用的公用程式,當然,BusyBox內的功能是比正常公用程式來得少,但由於它很小,大部份常用的選項都能夠提供,很適合應用於小型系統或是內嵌式系統。BusyBox 另外也提供一些 Script 檔可以將原先系統所使用的指令程式重新鏈結到Busybox,讓使用者運用這些指令時,並不會感到有何差異。 因為 BusyBox 設計得相當精簡而且模組化,其他的模組可以很容易的在編

譯時加入或移除,因為有此特性,BusyBox 可以針對使用者需求去設計一個專屬的軟體模組,加到一個內嵌式系統中。有許多計劃也是使用 BusyBox,如 Linux Router Project,Lineo Linux。

TinyLogin TinyLogin [27]是一套小型的 Unix 公用程式,它可以用來處理登入作業,

對登入的使用者作認證,更改使用者的密碼,或是作為內嵌式系統的使用者與群

組之管理,它也提供 shadow password以提昇系統的安全性。就如同它的名字所示,TinyLogin 程式很小,很適用於記憶體空間很小的環境如 Boot Disk 或內嵌式系統,它可以與 BusyBox 作一個完美的結合或者是單獨使用。

Page 15: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

15

ASH Ash[28]是一套與 POSIZ 標準相容的 shell,它很像”bash”,但是它程式碼

跟”bash”比起來小很多,因為它的功能有限,所函括到的函式庫也很少,所以很適合運用在內嵌式系統中。

圖五 Kdevelop的 IDE畫面

7. 結論結論結論結論 Linux 在內嵌式作業系統發展日新月異,本文只是節錄部分發展中的計劃,在寫完這篇文章的同時,網路上又有更多更新的關於內嵌式 Linux 相關資料被發表,可見內嵌式 Linux的發展是相當被許多人所看好。但是,以目前的情況而言,內嵌式 Linux尚未達到一般商業 RTOS的境界,仍有許多地方有待加強,例如 Linux 的縮小化,雖然一些小型 Linux的套件已經可以將它縮小到一張磁片以內,相較於一般 RTOS 數十 Kbytes 的核心仍是太大,如果能將目前核心所存的一些功能如驅動程式,TCP/IP Protocol Stack,檔案系統等等抽離核心,使核心只單純到做一些基本功能如,Thread 控制,程序間通訊,同步機制等,其他功能則以核心 Thread 的形式互相合作,來提供上層應用軟體的系統軟體平台。如此一來將可以更進一步縮小核心的大小,也可以在核心中動態的加入或抽出某些功

能而無需重新編譯核心,更可以給應用層撰寫即時程序的能力(核心 Thread 可提供等級)。這樣 Linux 將更適用於內嵌式系統。

Page 16: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

16

附錄及參考資料附錄及參考資料附錄及參考資料附錄及參考資料 1. Joel R. Williams, “Embedding Linux in a Commercial Product”, August, 1999.www.emlinux.com 2. Free Software Fundation http://www.fsf.org/ 3. Jerry Epplin, “Linux as an Embedded Operating System”, Embedded System Programming, October 1997. 4. Etlinux: http://www.prosa.it/etlinux/ 5. Embedix: http://www.lineo.com/ 6. BlueCat: http://www.lynx.com 7. eCos : http://sourceware.cygnus.com/ecos/ 8. Alfalinux Home Page http://alfalinux.sourceforge.net/alfaeng.php3 9. Linux Router Project, www.linuxrouter.org 10. Phil Hochmuth “Diskless Linux terminals”, 11. Syslink : ftp://ftp.kernel.org /pub/linux/utils/boot/syslinux 12. Thin Linux: http://www.thinlinux.org/ 13. How to build your own version of PicoBSD http://www.freebsd.org/~picobsd/ 14. Victor Yodaiken, “The RT-Linux approach to hard real-time”, RT-Linux.org Web site. 15. Michael Borabanov & Victor Yodaiken,”Introducting Real-Time Linux”. 16. RTAI: A Hard Real Time support for LINUX http://www.aero.polimi.it/projects/rtai/ 17. P. Mantegazza, E. Bianchi, L. Dozio,”Introducing the Real Time Application Interface (RTAI) for Linux” 18. Test Real-Time Linux http://www.fisica.unlp.edu.at/rt/ 19. Embedded Linux How-to: Linux Documentation project http://metalab.unc.edu/mdw/ 20. Install GCC, http://gcc.gnu.org/install/index.html 21. Stan Shebs, “GDB: An Open Source Debugger for Embedded Development”, March 1999, ESC Online, www.esconline.com 22. Gatliff, Bill, “Embedding with GNU: The GNU Debugger”, Embedded Systems Programming, September 1999, p.80. 23. The Data Display Debugger, http://linux.cis.nctu.edu.tw/docs/ddd/index.html 24. Kdevelop : C/C++ IDE (Integrated Development Enviroment) for Unix. http://www.kdevelop.org/ 25. YARD : A suite of Perl scripts for creating rescue disks http://www.croftj.net/~fawcett/yard/

Page 17: 為何要用內嵌式 Linux 系統 - NCTUspeed.cis.nctu.edu.tw/~ydlin/miscpub/embedded_linux.pdf · 3 統以及如何使 Linux 有處理即時應用的能力。 3. 內嵌式 Linux

17

26. BusyBox: http://busybox.lineo.com/ 27. TinyLogin: smallest login/passwd/getty/etc http://tinylogin.lineo.com/ 28. Ash: http://www.debian.org/Packages/unstable/shells/ash.html