21.01.2015 Views

1. 為何要用內嵌式Linux 系統2. 內嵌式Linux 作業系統的需求

1. 為何要用內嵌式Linux 系統2. 內嵌式Linux 作業系統的需求

1. 為何要用內嵌式Linux 系統2. 內嵌式Linux 作業系統的需求

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Embedded Linux 的 發 展<br />

陳 文 瑞 林 盈 達<br />

摘 要<br />

Linux 夾 帶 著 Open Source 的 聲 勢 , 在 作 業 系 統 的 領 域 異 軍 突 起 , 隱 然 有 威<br />

脅 到 Microsoft 在 作 業 系 統 上 的 霸 主 地 位 。 但 是 在 目 前 所 見 各 式 各 樣 Linux 的<br />

套 件 , 絕 大 部 分 都 還 是 在 桌 上 型 電 腦 提 供 一 般 使 用 者 完 成 日 常 工 作 , 或 是 作 為 伺<br />

服 器 來 提 供 服 務 。 在 另 一 方 面 , 以 Linux 作 為 一 個 內 嵌 式 作 業 系 統 , 將 是 另 一 個<br />

穩 定 而 有 效 率 的 選 擇 。 本 文 主 要 探 討 的 議 題 為 分 析 與 比 較 將 Linux 作 為 內 嵌 式<br />

作 業 系 統 的 優 缺 點 , 以 及 在 改 善 其 缺 點 上 所 做 的 努 力 , 即 縮 小 化 及 加 入 即 時 性 ,<br />

我 們 比 較 了 現 有 各 種 嵌 入 式 之 Linux、 小 型 Linux、 即 時 Linux 套 件 。 另 外 也 提<br />

及 到 另 一 個 成 功 的 要 素 : 開 發 工 具 及 發 展 環 境 , 並 且 簡 介 一 些 自 由 軟 體 的 開 發 工<br />

具 。<br />

<strong>1.</strong> 為 何 要 用 內 嵌 式 Linux 系 統<br />

所 謂 內 嵌 式 作 業 系 統 , 基 本 上 是 一 種 以 微 處 理 器 為 核 心 , 為 特 殊 目 的 而 設 計<br />

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

來 分 析 燃 料 流 量 , 各 式 各 樣 都 有 。 在 內 嵌 式 的 領 域 不 像 傳 統 PC 一 樣 由 Wintel<br />

所 主 導 。 有 許 許 多 多 商 業 產 品 如 nucleus, Vxworks, pSoS 可 供 選 擇 , 甚 至 於 把 整<br />

個 UNIX 放 到 內 嵌 式 系 統 上 。Linux 則 是 目 前 內 嵌 式 系 統 上 的 另 一 項 新 的 選 擇 。<br />

對 於 內 嵌 式 作 業 系 統 發 展 者 而 言 , 開 發 一 套 內 嵌 式 作 業 系 統 需 要 考 量 許 許 多<br />

多 的 因 素 [1], 如 該 系 統 所 能 提 供 的 功 能 、 價 格 、 開 發 的 時 程 、 穩 定 性 、 技 術 支<br />

援 、 發 展 環 境 等 , 就 功 能 而 言 ,Linux 可 以 說 是 一 套 全 功 能 的 作 業 系 統 , 凡 舉 文<br />

書 處 理 、 網 路 通 訊 、 工 程 計 算 、 視 聽 娛 樂 等 等 , 都 可 以 找 到 軟 體 可 在 Linux 上<br />

執 行 , 就 價 格 而 言 , 當 其 他 軟 體 還 在 一 套 套 賣 的 時 候 ,Linux 只 要 花 一 點 點 上 網<br />

的 通 訊 費 用 , 就 可 以 由 網 路 上 抓 下 來 , 几 乎 可 以 說 是 不 用 錢 。 就 穩 定 性 而 言 ,<br />

Linux 由 於 是 開 放 原 始 碼 , 全 世 界 有 數 千 萬 人 在 發 展 使 用 它 , 臭 蟲 很 快 就 會 被 抓<br />

到 而 且 被 解 決 掉 。 一 般 商 用 軟 體 大 多 是 自 行 發 展 , 一 但 發 現 有 問 題 , 大 概 只 能 尋<br />

求 原 廠 的 技 術 支 援 部 門 來 解 決 ; 但 是 若 是 在 Linux 上 發 生 問 題 , 只 要 透 過 網 路 將<br />

問 題 發 送 出 去 , 很 快 都 會 有 解 答 , 這 種 技 術 支 援 是 任 何 商 業 軟 體 所 無 法 達 成 的 。<br />

一 般 商 用 的 開 發 的 環 境 與 工 具 如 IDE、 編 譯 器 、 除 錯 器 軟 體 等 都 是 相 當 昂 貴 的 。<br />

但 是 在 Linux 中 , 這 些 工 具 基 本 上 都 是 免 費 的 , 有 些 工 具 甚 至 於 比 商 用 軟 體 功<br />

能 更 強 , 更 穩 定 。 長 期 以 來 , 自 由 軟 體 基 金 會 (FSF,Free Software Foundation)[2]<br />

所 開 發 的 一 系 列 軟 體 也 都 移 植 到 Linux 上 。 將 Linux 應 用 在 內 嵌 式 系 統 上 , 可 說<br />

是 一 個 滿 不 錯 的 選 擇 。<br />

2. 內 嵌 式 Linux 作 業 系 統 的 需 求<br />

雖 然 將 Linux 應 用 在 內 嵌 式 系 統 上 有 許 多 顯 而 易 見 的 益 處 , 但 是 並 非 百 分<br />

1


之 百 沒 有 缺 點 ,Linux 最 早 的 目 的 是 作 為 一 般 通 用 型 PC 或 Server 的 作 業 系 統 ,<br />

因 此 設 計 上 並 非 完 全 符 合 內 嵌 式 作 業 系 統 所 需 , 表 一 為 一 般 作 業 系 統 與 內 嵌 式 作<br />

業 系 統 的 差 異 [3]。<br />

一 般 通 用 型 作 業 系 統<br />

內 嵌 式 作 業 系 統<br />

系 統 整 體 效 能 的 最 佳 化<br />

最 壞 情 況 下 的 最 佳 化<br />

最 有 效 率 的 排 程<br />

可 預 期 的 排 程<br />

滿 足 各 種 不 同 的 服 務 需 求<br />

滿 足 特 定 的 服 務 需 求<br />

追 求 最 高 的 產 出<br />

追 求 最 小 的 延 遲<br />

表 一 通 用 型 作 業 系 統 與 內 嵌 式 作 業 系 統 的 比 較<br />

由 表 一 可 見 , 傳 統 作 業 系 統 強 調 整 體 系 統 平 均 效 能 , 而 內 嵌 式 系 統 則 強 調 提<br />

升 最 壞 情 況 下 系 統 效 能 。 目 前 Linux 缺 乏 即 時 處 理 能 力 是 因 為 Linux 系 統 的 排 程<br />

器 缺 乏 優 先 權 佔 用 (preemptive scheduling) 的 能 力 (Linux 提 供 分 時 巡 迴 排 程 , 即<br />

time-sharing round-robin scheduling), 以 及 缺 乏 將 需 要 即 時 應 用 程 序 所 佔 記 憶 體 頁<br />

面 (page) 不 被 置 換 (swap) 的 能 力 。 大 部 份 內 嵌 式 系 統 對 回 應 時 間 都 有 相 當 嚴 苛 的<br />

要 求 , 這 使 得 Linux 在 內 嵌 式 系 統 上 的 應 用 受 到 限 制 。 再 者 ,Linux 提 供 了 全 功<br />

能 的 虛 擬 記 憶 體 保 護 與 分 頁 的 機 制 , 這 項 優 點 放 到 內 嵌 式 作 業 系 統 卻 成 了 一 項 缺<br />

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

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

計 , 功 能 較 為 專 一 , 所 以 一 些 傳 統 Linux 上 的 功 能 若 未 使 用 到 , 就 應 該 把 它 移<br />

除 。 圖 一 是 內 嵌 式 Linux 的 適 用 範 圍 。<br />

RAM Size (MB)<br />

Large<br />

128<br />

Server<br />

64<br />

32<br />

16<br />

8<br />

4<br />

2<br />

1<br />

0.5<br />

0.1<br />

Desktop<br />

Embedded PC<br />

High-End Embedded<br />

Mid-range<br />

Tiny<br />

0.1 0.5 1 2 4 8 16 MBs GBs GBs TBs<br />

圖 一 內 嵌 式 Linux 適 用 範 圍<br />

Flash/ROM/Disk Size<br />

以 下 的 三 個 章 節 , 主 要 來 討 論 目 前 在 業 界 幾 個 較 早 開 發 的 內 嵌 式 Linux 套<br />

件 , 以 及 另 外 兩 個 重 要 的 議 題 : 如 何 將 Linux 縮 小 使 它 能 適 用 於 內 嵌 式 系<br />

2


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

3. 內 嵌 式 Linux 套 件<br />

因 為 將 Linux 應 用 在 內 嵌 式 系 統 的 好 處 是 顯 而 易 見 的 , 因 此 就 有 許 多 公<br />

司 , 開 始 將 一 些 傳 統 Linux 套 件 加 以 修 改 , 使 它 能 適 用 於 內 嵌 式 系 統 。 大 部 分<br />

內 嵌 式 系 統 只 有 CPU、RAM、ROM 或 Flash 以 及 一 些 週 邊 設 備 , 週 邊 設 備 也<br />

不 太 可 能 像 PC 一 樣 換 來 換 去 。 因 此 , 要 將 Linux 應 用 在 內 嵌 式 系 統 , 就 必 需 針<br />

對 系 統 的 特 性 作 適 度 的 修 改 。 以 下 介 紹 幾 份 內 嵌 式 Linux 的 套 件 , 並 且 對 它 們 作<br />

一 個 比 較 。<br />

Embedix Linux<br />

Embedix Linux[4] 是 Lineo 公 司 以 Linux kernel 2.2.13 版 為 基 礎 發 展 而<br />

來 ,Embedix 大 量 使 用 共 享 函 式 庫 , 它 使 用 了 一 個 技 術 用 來 分 析 並 且 找 出 內 含<br />

於 Embedix 套 件 中 的 可 執 行 檔 內 所 用 到 的 共 享 函 式 , 不 需 要 用 到 的 部 份 由 函 式<br />

庫 移 除 以 縮 小 執 行 檔 的 大 小 。 除 此 之 外 ,Lineo 也 提 供 部 份 適 用 於 內 嵌 式 系 統 的<br />

商 用 軟 體 如 一 個 小 型 的 圖 形 函 式 庫 , 可 以 用 來 與 他 們 的 另 一 項 產 品 ” 內 嵌 式 瀏 覽<br />

器 ” 作 結 合 提 供 圖 形 介 面 , 這 樣 就 不 需 要 將 整 個 X- window 系 統 及 圖 形 函 式 庫 放<br />

進 來 。<br />

Embedix 除 了 GPL 所 保 護 的 軟 體 有 提 供 原 始 程 式 碼 之 外 , 其 他 相 關 的 軟 體<br />

也 提 供 完 整 的 原 始 程 式 碼 、 修 補 檔 及 設 定 檔 , 使 得 使 用 者 可 以 重 新 去 編 譯 建 立 適<br />

合 自 己 設 備 所 要 的 可 執 行 檔 。Embedix 所 提 供 的 發 展 工 具 , 也 完 整 的 包 括 在 整<br />

個 套 件 之 中 , 系 統 開 發 者 可 以 用 這 些 工 具 來 開 發 、 設 定 、 除 錯 、 測 試 所 撰 寫 的 程<br />

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

Etlinux<br />

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

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

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

小 。Etlinux 內 含 有 Tcl language engine, 為 針 對 內 嵌 式 系 統 的 特 性 , Tcl language<br />

engine 特 別 被 增 加 了 可 以 純 粹 由 Tcl 來 重 寫 初 始 化 的 描 述 檔 。<br />

BlueCat<br />

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

境 , 它 包 括 了 一 套 Linux 作 業 系 統 以 及 系 統 發 展 工 具 。 它 是 以 核 心 的 版 本 為 Linux<br />

2.2.12-20 的 Red Hat 6.1 套 件 為 基 礎 加 以 修 改 而 來 , 使 用 Lynx 公 司 所 發 展 的 整<br />

合 式 發 展 環 境 , 設 計 者 可 以 根 據 不 同 的 需 求 , 在 PowerPC 或 Pentium 等 級 的 微<br />

處 理 器 上 開 發 不 同 的 應 用 軟 體 。 整 合 式 發 展 環 境 可 以 PC 及 Red Hat Linux 作 為<br />

發 展 平 台 , 發 展 工 具 包 括 標 準 ANSI C/C++ 編 譯 器 , 組 譯 器 , 連 結 器 , 以 及 一 個<br />

3


可 以 產 生 可 供 載 入 的 image maker(mkimage)。<br />

eCos<br />

Red Hat 公 司 所 出 版 的 eCos [7](Embedded Configurable Operating System) 是<br />

一 套 開 放 原 始 程 式 碼 的 作 業 系 統 , 發 展 者 可 以 在 eCos 上 自 由 的 開 發 與 修 改 包 括<br />

eCos 本 身 的 軟 體 , 並 且 可 以 自 由 的 發 行 這 些 開 發 的 軟 體 而 無 任 何 限 制 。Red Hat<br />

公 司 另 外 也 出 版 了 一 套 整 合 式 開 發 環 境 GNUpro, 它 可 用 來 幫 助 發 展 eCos 上 的<br />

應 用 程 式 或 移 植 到 不 同 的 系 統 平 台 上 ,eCos 有 一 項 革 新 的 技 術 就 是 它 的 設 定 建<br />

構 系 統 (configuration system), 它 可 以 用 於 幫 助 修 改 或 升 級 原 來 的 系 統 。 新 版 的<br />

eCos 有 許 多 有 利 的 新 的 功 能 , 例 如 套 件 管 理 的 軟 體 , 可 以 整 合 其 他 公 司 所 發 展<br />

的 軟 體 在 eCos 上 運 作 以 擴 充 eCos 的 功 能 , 標 準 的 建 構 檔 檔 案 格 式 , 可 以 將 GUI<br />

及 命 令 列 下 的 configuration 以 使 用 者 可 讀 取 的 型 式 儲 存 起 來 。 在 GUI 的 系 統 建<br />

構 工 具 軟 體 中 , 另 外 也 有 一 套 以 Web based 的 線 上 支 援 文 件 , 來 幫 助 建 構 整 個<br />

eCos 系 統 。 其 他 還 有 很 多 軟 體 , 都 是 GPL 規 範 下 開 放 原 始 碼 的 軟 體 。<br />

內 嵌 式 Linux 套 件 的 比 較<br />

表 二 為 上 述 幾 種 Linux 套 件 的 比 較 表 , 大 多 是 將 現 有 的 Linux 套 件 加 以 稍<br />

加 修 改 整 合 移 植 到 內 嵌 式 系 統 上 , 雖 然 表 中 有 些 欄 位 如 支 持 的 週 邊 設 備 與 網 路 功<br />

能 , 各 家 廠 商 並 未 詳 細 說 明 其 規 格 , 基 本 上 只 要 Kernel 有 支 援 , 都 可 以 作 得 到 。<br />

有 創 新 的 部 分 , 都 集 中 在 開 發 環 境 與 工 具 上 。<br />

目 的<br />

CPU (target processor)<br />

Kernel version<br />

RAM Size<br />

ROM/FLASH/Disk Size<br />

支 援 的 週 邊 設 備<br />

BlueCat Etlinux Embedix eCos<br />

完 整 的 內 嵌 式 系 統 發 展<br />

環 境 , 適 用 於 內 嵌 式 系<br />

統 的 OS。<br />

Pentium, PowerPC 或 其<br />

他 更 高 階 的 processor<br />

簡 單 型 的<br />

Server/Client, 非 常 簡 易<br />

型 的 內 嵌 式 PC<br />

386SX processor 或 其<br />

他 更 高 階 的 processor<br />

4<br />

簡 單 的 用 戶 端 介 面 , 內<br />

嵌 式 PC, 低 成 本 的 瀏 覽<br />

器 , 可 聯 接 Interne 的 內<br />

嵌 式 設 備 。<br />

目 前 支 援 X86<br />

PowerPC 系 列 ,<br />

MIPS、ARM 及 SH 系<br />

列 正 發 展 中 。<br />

完 整 的 內 嵌 式 系 統 發 展<br />

環 境 , 適 用 於 內 嵌 式 系<br />

統 的 OS 。 consumer<br />

electronics,<br />

telecommunications,<br />

automotive, and other<br />

cost-sensitive and<br />

lightweight applications<br />

及 ARM Thumb<br />

ARM9<br />

Cirrus Logic CL-PS7111<br />

and EP72xx<br />

Cogent CMA222 and<br />

CMA230 ARM boards<br />

Hitachi SH3<br />

Intel StrongARM<br />

Intel x86 PC<br />

Matsushita AM33<br />

Motorola MBX<br />

evaluation board<br />

NEC MIPS VR4300<br />

Linux 2.2.12-20 未 知 Linux 2.2.13 版 Linux 2.2.12-20<br />

2MB RAM Space 2MB RAM Space 最 少 4MB, 若 有 額 外 2MB RAM Space<br />

功 能 必 需 再 增 加<br />

2MB of Disk Space 2MB of Disk Space 最 少 2MB, 若 有 額 外 2MB of Disk Space<br />

(Hard disk or M-System (Hard disk or M-System 功 能 必 需 再 增 加 。 不 需 (Hard disk or M-System<br />

Disk on chip) Disk on chip) 要 硬 式 磁 碟 機 。 Disk on chip)<br />

未 知 未 知 硬 式 磁 碟 機 , 軟 式 磁 碟 未 知<br />

機 , CD-ROM , Flash


網 路 功 能<br />

免 費 <br />

Boot loader<br />

檔 案 系 統<br />

提 供 整 套 發 展 環 境<br />

機 , CD-ROM , Flash<br />

boot loader,Ethernet,<br />

RS232 等<br />

TCP/IP networking TCP/IP networking TCP/IP networking TCP/IP networking<br />

protocol stack protocol stack protocol stack protocol stack, BOOTP,<br />

Embedded cgi-capable Networking<br />

The protocol stack<br />

WEB browser routing/firewall derived from OpenBSD<br />

Telnet Server<br />

Web Server<br />

source<br />

Email Server<br />

內 嵌 式 瀏 覽 器<br />

CORBOA support FTP Client<br />

Remote<br />

file Telnet Client 及 Server<br />

management<br />

TCL script language<br />

No Yes No No<br />

BlueCat loader, Lilo,syslinux lilo , syslinux , Lilo,syslinux<br />

mkimage<br />

nboot ,others<br />

Ext2 Ext2 fat (msdos) , ext2 , Ext2<br />

minix,initrd<br />

Yes, 包 括 Compiler, Yes, quality C/C++ Yes, Emdedix SDK Yes, GNUpro Tool kit 包<br />

linker, loader, Debugger, compilers, debuggers,<br />

括 Compiler, linker,<br />

Version control libraries, interpreted<br />

loader, Debugger,<br />

software, library and languages,<br />

Version control<br />

utility<br />

software, library and<br />

utility<br />

4. 小 型 Linux 套 件<br />

表 二 內 嵌 式 Linux 套 件 比 較<br />

在 內 嵌 式 系 統 的 環 境 中 , 記 憶 體 是 相 當 有 限 的 資 源 , 如 何 能 建 構 一 個 穩 固 、<br />

大 小 適 中 、 功 能 齊 備 的 內 嵌 式 Linux 作 業 系 統 成 為 一 個 最 要 緊 的 問 題 。 在 目 前<br />

所 見 到 的 小 型 Linux 套 件 中 , 都 是 由 一 般 傳 統 Linux 套 件 縮 小 而 來 , 不 去 修 改<br />

Linux 核 心 部 份 程 式 碼 , 只 是 將 不 需 要 的 驅 動 程 式 、 應 用 程 式 及 函 式 庫 刪 除 , 達<br />

到 縮 小 的 目 的 。 大 部 份 的 小 型 Linux 套 件 都 使 用 很 少 的 Disk 空 間 或 者 是 在 RAM<br />

上 模 擬 一 個 硬 碟 。 以 下 針 對 部 份 小 型 Linux 套 件 作 一 番 介 紹 。<br />

AlfaLinux<br />

AlfaLinux [8] 是 一 套 類 似 Slackware 的 Linux 套 件 (kernel version 2.0.34), 它<br />

是 由 業 餘 Linux 的 高 手 所 開 發 , 大 小 適 合 放 入 兩 片 <strong>1.</strong>44Mega bytes 的 磁 碟 片 , 它<br />

不 需 要 對 傳 統 Linux 套 件 作 任 何 的 修 改 。 內 容 包 括 所 有 磁 碟 操 作 及 網 路 功 能 , 最<br />

基 本 的 需 求 包 括 一 台 486 等 級 以 上 的 電 腦 , 最 少 8Mega RAM, 但 是 若 需 要 額 外<br />

的 功 能 ,12 Mega RAM 是 最 起 碼 的 要 求 。 第 一 片 磁 片 只 包 括 Linux 開 機 與 核 心<br />

的 功 能 , 應 用 程 式 都 是 放 在 第 二 片 磁 片 。<br />

新 版 的 alfslinux 加 入 了 vi ,cat,pwconv 及 unconv 等 新 的 功 能 。alfalinux<br />

設 計 的 目 的 在 於 提 供 使 用 者 一 個 很 容 易 修 改 的 架 構 , 可 以 根 據 自 己 的 需 求 , 去 增<br />

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

發 者 。<br />

Linux Router Project<br />

Linux Router Project [9] 是 一 套 以 網 路 為 中 心 的 小 型 Linux 套 件 , 它 是 由 開 放<br />

原 始 碼 的 一 些 公 用 程 式 以 及 Linux 套 件 抽 取 出 來 組 成 的 , 大 小 可 以 放 入 一 片<br />

5


<strong>1.</strong>44Mega bytes 的 磁 片 , 大 部 分 LRP 的 套 件 來 自 於 Debian, 主 要 用 途 是 用 來 建<br />

構 一 個 低 成 本 的 router,access server, 簡 單 型 的 用 戶 端 介 面 , 簡 單 型 的 server,<br />

網 路 應 用 以 及 內 嵌 式 系 統 。<br />

LRP 是 放 入 一 片 <strong>1.</strong>44Mega 的 磁 片 上 , 它 沒 有 足 夠 的 空 間 來 存 放 編 譯 的 工 具<br />

及 原 始 程 式 碼 , 所 以 ,LRP 允 許 使 用 者 可 以 動 態 的 將 編 譯 過 可 執 行 的 軟 體 模 組<br />

加 入 已 經 編 譯 過 可 執 行 Linux 核 心 中 。 在 系 統 初 始 化 的 階 段 就 使 用 ”insmod” 來 插<br />

入 一 個 模 組 , 這 個 方 式 讓 LRP 有 了 相 當 的 彈 性 。<br />

Linux Terminal Server Project<br />

Linux 終 端 伺 服 器 計 畫 [10][11] 是 一 項 開 放 原 始 碼 專 案 , 目 的 在 於 創 造 一 個<br />

利 用 Linux 架 設 的 網 路 工 作 站 環 境 , 而 這 些 工 作 站 只 需 要 一 些 簡 單 的 配 備 , 不<br />

需 要 任 何 磁 碟 機 , 就 能 在 客 戶 端 使 用 終 端 伺 服 器 上 的 程 式 。 最 顯 著 的 優 勢 除 了 便<br />

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

環 境 的 成 本 。 一 台 無 磁 碟 的 工 作 站 所 需 的 配 備 有 : 一 顆 x86 處 理 器 、16MB 記<br />

憶 體 、 網 路 卡 , 和 啟 動 唯 讀 記 憶 體 (boot ROM)。boot ROM 的 作 用 在 於 初 始 網<br />

路 檔 案 系 統 環 境 , 讓 Linux 核 心 程 式 能 夠 去 下 載 伺 服 端 的 資 料 到 終 端 機 的 記 憶<br />

體 內 。 而 X 視 窗 系 統 是 客 戶 端 最 主 要 的 程 式 , 其 他 的 程 式 都 是 由 伺 服 端 來 執<br />

行 。 客 戶 端 在 開 機 後 由 boot ROM 自 動 和 伺 服 端 溝 通 、 傳 輸 , 然 後 啟 動 。 此 外 ,<br />

伺 服 端 的 系 統 可 以 採 用 一 些 Linux 套 件 , 對 於 一 般 的 使 用 (Email、Web 等 ) 很<br />

方 便 , 但 它 也 有 一 些 缺 點 , 例 如 沒 有 較 好 的 管 理 系 統 , 也 缺 乏 網 路 印 表 機 的 機 制 。<br />

Thin Linux<br />

ThinLinux [12] 是 一 套 一 般 性 的 工 具 組 , 几 乎 任 何 事 情 它 都 能 做 , 包 括<br />

stand-alone 的 防 火 牆 , 攝 影 機 的 Server,MP3 player,X-10 controller, 或 者 是 任<br />

何 用 戶 端 有 趣 的 設 備 或 應 用 。ThinLinux 可 以 在 相 當 多 種 型 態 的 處 理 器 上 執 行<br />

( 只 要 Linux 有 支 援 均 可 ), 發 展 的 環 境 也 可 以 不 在 Intel 的 PC 上 。<br />

FirPlug’s ThinLinux 是 一 個 將 Linux 套 件 部 份 模 組 與 程 式 組 合 起 來 的 一 個<br />

套 件 , 它 設 計 的 目 的 是 為 了 未 來 下 一 代 內 嵌 式 系 統 或 專 屬 某 些 應 用 的 PC, 典 型<br />

的 ThinLinux 的 產 品 是 單 板 的 PC, 上 面 有 一 個 flash disk, 超 過 16 Mega bytes<br />

RAM, 以 及 通 訊 的 介 面 , 也 可 選 擇 加 上 Video 及 鍵 盤 介 面 。<br />

PicoBSD<br />

雖 然 PicoBSD [13] 不 是 由 Linux 修 改 而 來 , 但 它 也 是 一 套 可 放 入 一 片<br />

<strong>1.</strong>44Mega bytes 大 小 磁 片 的 FreeBSD , 它 是 由 FreeBSD 3.0-current 修 改 而 來 ,<br />

我 們 把 它 放 在 這 裡 與 Linux 做 個 對 照 。 根 據 不 同 用 途 的 版 本 , 目 前 PicoBSD 有<br />

Dial-up version,Networking version,Router version,Dial-in server version。 它 最<br />

少 需 要 386SX 以 上 等 級 的 機 器 , 最 少 8Mega bytes RAM, 不 需 要 硬 碟 , 目 前 最<br />

6


新 的 版 本 是 0.42 版 。 主 要 用 途 是 用 來 建 構 一 個 無 主 機 工 作 站 , 內 嵌 式 系 統 , 取<br />

代 一 般 router, 防 火 牆 ,access server, 簡 單 型 的 用 戶 端 介 面 , 簡 單 型 的 server,<br />

網 路 應 用 等 等 。<br />

各 種 小 型 Linux 套 件 的 比 較<br />

表 三 是 針 對 Small Linux Distribution 作 一 個 比 較 , 主 要 是 針 對 網 路 應<br />

用 , 因 為 目 前 所 見 大 部 份 Small Linux Distribution 都 是 應 用 在 這 方 面 。<br />

Linux<br />

Project<br />

Purpose Linux router<br />

firewall Dial up<br />

server<br />

Router PicoBSD LTSP alfalinux Thin Linux<br />

Small<br />

router, firewall<br />

Dial up server<br />

Thin Client<br />

freeBSD Thin<br />

Internet<br />

Client,<br />

access,<br />

low cost terminal<br />

X-terminal<br />

Web tools such<br />

as a browser,<br />

FTP, telnet, or<br />

other Internet<br />

communications<br />

standards.(3)<br />

Kernel version Linux 2.0.36 FreeBSD 2.2.5 Linux 2.2.13 Linux 2.0.34 Linux 2.2.14<br />

Network module Linux NET4.0 unknown Linux NET 3.035<br />

Memory Size 8MB 10MB 16MB 16MB 16MB<br />

ROM or Disk <strong>1.</strong>44MB floppy <strong>1.</strong>44MB floppy Boot ROM <strong>1.</strong>44MB floppy <strong>1.</strong>44MB floppy<br />

spack<br />

disk 1 piece disk 1 piece<br />

disk 2 pieces disk 1 piece<br />

Configuration Yes (lrcfg) Yes none none None<br />

tools<br />

Network tools Ifconfig<br />

Ppp, ping, route, X-client/sercer Compressed file Ifconfig,<br />

Ipfwadm routed, tftpd(1), ,NFS<br />

in disk 2<br />

Netstat<br />

traceroute,<br />

ftp, ifconfig, ping,<br />

Ping, other are bootpd, natd,<br />

pmail, pppd,<br />

option, not netstat, nfs,<br />

route, telnet,<br />

include in basic snmpd, ifconfig,<br />

traceroute,<br />

package<br />

nslookup, tinyIRC<br />

System<br />

management<br />

tools<br />

Login,<br />

mknod,<br />

umount,…,etc<br />

Most fundamental<br />

function (2)<br />

inetd, ipfw, telnet,<br />

telnetd,<br />

pwd, Login,<br />

mount, mknod,<br />

umount,<br />

vm, …,etc<br />

Most fundamental<br />

function<br />

pwd, none Login, pwd, Login,<br />

mount,<br />

mknod, mount, mknod,<br />

umount,<br />

vm, …,etc<br />

Most fundamental<br />

function (4)<br />

Editor<br />

tools<br />

Editor ee none Pico<br />

(in disk 2)<br />

File management Ls,<br />

rm, Ls,<br />

rm,<br />

tools<br />

more,…,etc more,…,etc<br />

Most fundamental Most fundamental<br />

function function<br />

function<br />

Programming<br />

tools<br />

none Ls, rm,<br />

more,…,etc<br />

Most fundamental<br />

pwd,<br />

mount,<br />

umount,<br />

vm, …,etc<br />

Most fundamental<br />

function<br />

None<br />

none none none none None<br />

表 三 小 型 Linux 套 件 比 較<br />

5. Linux 在 即 時 性 作 業 系 統 的 應 用<br />

Ls,<br />

rm,<br />

more,…,etc<br />

Most fundamental<br />

function<br />

大 部 分 即 時 性 應 用 , 大 多 是 使 用 在 工 業 控 制 上 , 這 些 應 用 都 有 一 種 特 性 , 那<br />

就 是 時 效 性 。 就 技 術 上 來 說 , 所 謂 ” 即 時 ” 意 指 作 業 系 統 必 需 在 可 預 期 的 時 間 範 圍<br />

內 , 對 某 些 特 定 的 事 件 作 出 回 應 加 以 處 理 。 只 有 在 系 統 可 以 預 期 事 件 何 時 被 處<br />

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

而 Linux 只 提 供 可 被 插 斷 的 排 程 策 略 , 在 執 行 核 心 空 間 程 式 時 , 也 不 允 許 外 部<br />

事 件 的 插 斷 , 所 以 處 理 起 有 時 效 性 的 工 作 時 , 效 率 並 不 是 很 好 , 如 何 以 最 少 的 修<br />

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

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

7


RT-Linux<br />

為 了 能 讓 高 階 的 內 嵌 式 系 統 能 夠 使 用 Linux 做 為 其 即 時 作 業 系 統 , 目 前 有 兩<br />

種 較 為 普 遍 的 方 法 被 應 用 , 第 一 種 就 是 使 用 POSIX 針 對 即 時 作 業 系 統 所 訂 定 的<br />

標 準 , 如 圖 二 所 示 , 但 是 這 個 標 準 太 大 , 太 笨 重 , 它 功 能 與 特 性 較 適 用 於 桌 上 型<br />

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

Init Bash Real time<br />

task<br />

Real time<br />

task<br />

Interrupt<br />

or polling<br />

System calls<br />

Drivers<br />

Hardware<br />

Linux<br />

Kernel<br />

圖 二 POSIX 即 時 作 業 系 統 架 構 與 標 準 介 面<br />

另 外 一 種 方 式 , 就 是 使 用 Real time Linux (RTLinux)[14][15], 它 是 對 於 標 準<br />

Linux 核 心 的 一 種 延 伸 , 使 Linux 擁 有 處 理 時 間 要 求 比 較 嚴 格 的 工 作 之 能 力 , 在<br />

RT-Linux 中 , 有 一 個 小 的 即 時 核 心 與 標 準 Linux 核 心 並 存 , 如 圖 三 所 示 , 所 以<br />

應 用 程 式 仍 然 可 以 使 用 系 統 的 資 源 及 服 務 , 需 要 即 時 處 理 的 工 作 可 以 另 外 再 開 啟<br />

一 個 Task, 在 核 心 空 間 內 執 行 , 它 們 可 以 直 接 存 取 硬 體 資 源 而 不 需 透 過 Linux 核<br />

心 管 理 , 不 會 被 Linux 核 心 記 憶 體 管 理 模 組 所 影 響 。 缺 點 是 Real-time task 無 法<br />

透 過 核 心 所 提 供 的 系 統 呼 叫 來 存 取 Linux 核 心 的 系 統 資 料 , 可 能 造 成 資 料 內 容<br />

不 一 致 的 情 況 。 在 RT-Linux 中 , 所 有 的 中 斷 都 先 被 RT-Linux 的 核 心 所 處 理 , 再<br />

傳 送 到 Linux Task ( 整 個 Linux 核 心 被 視 為 一 個 Task), RT-Linux 的 核 心 會 模 擬<br />

一 個 硬 體 的 中 斷 控 制 器 , 當 Linux 核 心 取 消 某 個 中 斷 時 ,RT-Linux 的 核 心 會 將<br />

此 中 斷 放 入 一 個 Queue 中 等 待 , 直 到 Linux 核 心 恢 復 該 中 斷 , 再 傳 給 Linux 核<br />

心 。 在 目 前 系 統 中 ,Real-time task 與 Linux user task 之 間 的 通 訊 是 透 過 message<br />

queue 或 是 共 享 記 憶 體 。 就 整 體 而 言 ,RT-Linux 只 提 供 相 當 有 限 的 幾 個 功 能 來 建<br />

構 即 時 系 統 , Real-time task 唯 一 要 做 的 是 處 理 需 要 即 時 的 I/O 動 作 並 且 儘 快 將<br />

這 些 資 料 傳 送 到 上 層 Linux 應 用 程 式 來 加 以 處 理 。 簡 單 的 RT-Linux 有 兩 個 好<br />

處 , 第 一 , 因 為 它 很 簡 單 , 所 以 程 式 不 易 出 錯 , 再 者 若 是 有 bug, 也 很 容 易 被 發<br />

現 而 排 除 , 這 是 一 個 很 重 要 的 因 素 , 因 為 整 個 Real-time 部 分 只 佔 Linux 系 統 應<br />

用 的 一 小 部 份 , 只 要 能 提 供 足 夠 的 功 能 以 達 成 主 要 real-time 目 前 即 可 。<br />

8


Init<br />

Bash<br />

Xterm<br />

Interrupt<br />

or polling<br />

I/O<br />

Drivers<br />

System calls<br />

Interrupt<br />

RT-Linux<br />

Scheduler<br />

Real time<br />

task<br />

Hardware<br />

圖 三 RTLinux 架 構 與 介 面<br />

Real time<br />

task<br />

Interrupt<br />

I/O<br />

Linux<br />

Kernel<br />

RTAI<br />

RTAI [16][17] 這 個 計 劃 就 是 要 在 Linux 之 上 提 供 一 個 嚴 格 的 即 時 系 統 , 能 夠<br />

讓 需 要 時 間 控 制 相 當 準 確 的 應 用 程 式 能 夠 在 Linux 上 執 行 。 在 架 構 上 RTAI 參 考<br />

了 RTLinux 的 想 法 , 如 都 將 Linux 的 核 心 當 成 一 個 最 低 優 先 權 的 Task, 但 是 它<br />

提 供 了 RTLinux 所 沒 有 的 一 些 功 能 與 特 性 使 它 更 為 適 用 於 即 時 系 統 , 比 如 RTAI<br />

提 供 週 期 性 Timer , 可 以 用 信 號 或 訊 息 通 知 Real-time Task, 以 及 支 援 FPU 等 。<br />

與 RTLinux 不 同 的 是 , RTAI 則 盡 可 能 用 少 量 的 修 補 檔 , 用 動 態 載 入 模 組 將 即<br />

時 功 能 的 架 構 加 入 核 心 之 中 , 使 得 核 心 很 容 易 的 提 供 額 外 的 功 能 。 在 RTAI 的 實<br />

作 上 , 有 三 個 主 要 核 心 模 組 必 需 要 載 入 到 Linux 核 心 中 才 能 提 供 即 時 處 理 的 能<br />

力 , 好 處 是 不 必 為 了 加 入 一 個 新 功 能 而 整 個 Linux 要 重 新 編 譯 一 遍 , 需 要 時 再<br />

載 入 , 不 用 之 後 也 可 以 卸 下 。 實 作 即 時 的 Task 也 如 同 寫 一 個 核 心 模 組 一 樣 , 只<br />

要 三 個 主 要 核 心 模 組 有 載 入 , 就 可 以 載 入 即 時 的 Task。 這 三 個 主 要 核 心 模 組 分<br />

別 是 :rtai module ( 應 用 程 式 介 面 ),rtai_sched ( 排 程 器 ) 以 及 rt_fifos ( 佇 列 )。 下 面<br />

的 例 子 說 明 如 何 使 用 RTAI 來 提 供 即 時 功 能 , 假 設 有 一 件 工 作 需 要 及 處 理 , 我 們<br />

把 它 寫 成 一 個 核 心 模 組 rt_process:<br />

insmod /home/rtai/rtai<br />

insmod /home/rtai/modules/rtai_fifo<br />

insmod /home/rtai/modules/rtai_sched<br />

insmod //rt_process<br />

當 不 再 需 要 些 處 理 時 :<br />

rmmod rt_process<br />

rmmod rtai_sched<br />

rmmod rtai_fifo<br />

rmmod rtai<br />

RTAI 目 前 提 供 大 約 八 十 個 功 能 , 含 括 了 程 序 處 理 , 時 間 處 理 , 同 步 機 制 , 程 序<br />

間 的 通 訊 , 以 及 一 些 中 斷 處 理 等 功 能 , 已 具 備 了 一 個 簡 單 的 即 時 核 心 所 需 提 供 的<br />

9


功 能 , 未 來 則 朝 著 提 供 與 VxWorks 及 pSOS 相 容 的 函 式 庫 , 發 展 環 境 , 除 錯 功<br />

能 及 通 訊 能 力 等 方 向 繼 續 發 展 。<br />

比 較 傳 統 Linux 套 件 與 加 入 即 時 功 能 之 後 的 差 異<br />

為 比 較 傳 統 Linux 與 加 入 即 時 功 能 之 後 的 差 異 , 阿 根 廷 的 La Plata University<br />

研 究 者 [18] 針 對 這 兩 種 Linux 設 計 了 一 些 測 試 來 比 較 其 差 異 , 測 試 主 要 分 兩 個 項<br />

目 :<strong>1.</strong> 測 試 時 間 的 間 隔 : 每 隔 40ms 對 parallel port 中 某 個 pin 做 I/O 以 產 生 40ms<br />

的 連 續 方 波 ,2. 產 生 一 個 IRQ 7 的 中 斷 , 當 中 斷 產 生 時 , 輸 出 一 個 訊 號 到 parallel<br />

port 中 某 個 pin。 測 試 的 條 件 分 成 下 列 6 種 :<br />

無 負 載 : 在 系 統 開 始 執 行 後 , 所 有 背 景 執 行 的 程 序 都 取 消 。<br />

數 個 背 景 執 行 的 程 序 : 在 背 景 執 行 包 括 httpd,lpd,smbd,nmbd,sendmail,<br />

inetd,crond,syslogd,and others。<br />

硬 碟 負 載 : 重 複 執 行 ”ls –IR”。<br />

網 路 負 載 : 重 複 執 行 ”ping –f”。<br />

全 負 載 : 上 述 兩 種 負 載 同 時 運 作 。<br />

運 算 負 載 : 執 行 一 個 小 的 C 程 式 , 重 複 執 行 浮 點 數 除 法 運 算 。<br />

表 四 為 執 行 上 述 測 試 的 結 果 :<br />

負 載 型 態 中 間 值 標 準 差 最 小 值 最 大 值 集 中 度<br />

無 負 載 19996 <strong>1.</strong>45 19989 20054 410.46<br />

數 個 背 景 執 19999 45.61 18186 20676 586.67<br />

行 的 程 序<br />

全 負 載 20009 538.84 16804 29908 27.38<br />

硬 碟 負 載 19991 39<strong>1.</strong>14 16594 25054 18.63<br />

網 路 負 載 19999 114.35 19653 22007 19.21<br />

運 算 負 載 19999 16.79 19643 20405 389.28<br />

表 四 Linux 未 加 入 即 時 功 能 而 以 一 般 方 式 實 作 所 測 出 的 結 果 (microsec)<br />

負 載 型 態 中 間 值 標 準 差 最 小 值 最 大 值 集 中 度<br />

無 負 載 19999 0.89 19993 20013 18.85<br />

數 個 背 景 執 19999 <strong>1.</strong>31 19993 20016 15.80<br />

行 的 程 序<br />

全 負 載 19999 2.45 19990 20016 2.10<br />

硬 碟 負 載 20000 <strong>1.</strong>92 19985 20014 5.92<br />

網 路 負 載 20001 2.53 19981 20019 3.31<br />

運 算 負 載 19999 <strong>1.</strong>39 19988 20016 18.62<br />

表 五 Linux 加 入 即 時 功 能 而 以 Real-Time Task 方 式 實 作 所 測 出 的 結 果<br />

(microsec)<br />

表 四 與 五 為 標 準 Linux 核 心 與 加 入 即 時 功 能 的 Linux 核 心 執 行 第 一 項 測 試 的<br />

結 果 , 很 明 顯 可 以 看 到 , 沒 有 RTLinux 的 支 援 , 面 對 需 要 時 候 很 精 確 的 工 作 時 ,<br />

10


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

性 。<br />

負 載 型 態 中 間 值 標 準 差 最 小 值 最 大 值 集 中 度<br />

無 負 載 2<strong>1.</strong>62 <strong>1.</strong>55 20.80 48.70 139.41<br />

數 個 背 景 執 28.16 312.70 2<strong>1.</strong>30 22103.00 4963.00<br />

行 的 程 序<br />

全 負 載 369.31 528.20 29.10 27546.00 1408.00<br />

硬 碟 負 載 440.61 420.82 26.60 8292.00 63.35<br />

網 路 負 載 114.33 9<strong>1.</strong>59 27.50 2593.80 107.06<br />

運 算 負 載 9790.10 2684.80 26.20 938<strong>1.</strong>10 -<strong>1.</strong>21<br />

表 六 Linux 未 加 入 即 時 功 能 而 以 一 般 方 式 實 作 中 斷 常 式 所 測 出 的 結 果<br />

(microsec)<br />

負 載 型 態 中 間 值 標 準 差 最 小 值 最 大 值 集 中 度<br />

無 負 載 2.36 0.55 2.10 15.50 266.11<br />

數 個 背 景 執 2.34 0.35 2.10 10.80 106.58<br />

行 的 程 序<br />

全 負 載 3.84 <strong>1.</strong>04 2.30 19.00 22.10<br />

硬 碟 負 載 3.20 0.67 2.10 19.40 112.96<br />

網 路 負 載 4.38 <strong>1.</strong>71 2.50 25.00 8.90<br />

運 算 負 載 2.56 0.43 2.20 14.50 243.16<br />

表 七 Linux 加 入 即 時 功 能 而 以 Real-Time Task 方 式 實 作 所 中 斷 常 式 測 出 的<br />

結 果 (microsec)<br />

表 六 與 七 分 別 為 標 準 Linux 核 心 與 加 入 即 時 功 能 的 Linux 核 心 處 理 中 斷 的 效<br />

率 比 較 , 很 明 顯 可 以 看 出 , 加 入 即 時 功 能 的 Linux 核 心 對 於 中 斷 的 處 理 大 部 分 都<br />

可 以 在 10 microseconds 內 處 理 完 畢 , 最 遲 不 過 25 microseconds, 但 是 對 於 標 準<br />

Linux 核 心 而 言 , 同 樣 的 中 斷 處 理 居 然 可 以 慢 到 好 幾 秒 甚 至 於 數 十 秒 鐘 , 這 對 即<br />

時 需 求 的 應 用 而 言 , 根 本 不 可 行 。<br />

6. 開 發 工 具 與 環 境<br />

對 系 統 的 開 發 者 而 言 , 好 的 發 展 環 境 可 以 加 速 產 品 的 開 發 流 程 , 增 進 效 率 。<br />

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

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

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

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

跨 平 台 編 譯 器 , 鏈 結 器 , 載 入 器 , 函 式 庫<br />

任 何 的 內 嵌 式 系 統 計 劃 , 都 需 要 有 一 個 好 的 跨 平 台 編 譯 器<br />

11


(cross-compiler)[19][20]、 聯 結 器 (Linker) 及 載 入 器 (loader)。GNU 的 編 譯 器 與 聯<br />

結 器 , gcc 及 ld, 是 一 個 相 當 便 宜 、 成 熟 、 穩 固 而 且 多 功 能 的 編 譯 器 , 它 能 夠 針<br />

對 許 多 不 同 的 系 統 , 產 生 高 品 質 的 程 式 碼 ,GNU 的 編 譯 器 與 聯 結 器 除 了 成 熟 、<br />

穩 固 之 外 , 它 還 有 許 多 相 當 精 巧 的 功 能 , 例 如 :<br />

語 法 與 執 行 期 潛 在 錯 誤 檢 查 :<br />

GNU 編 譯 器 提 供 許 多 Command-line 的 選 項 可 以 在 編 譯 階 段 找 出 許 多 程 式<br />

潛 在 的 問 題 , 例 如 “-Wall” 這 個 參 數 可 以 要 求 編 譯 器 針 對 所 有 可 疑 的 問 題 都 對 使<br />

用 者 提 出 警 告 。<br />

在 C 程 式 中 穿 插 組 合 語 言 指 令 :<br />

GNU 編 譯 器 提 供 一 個 強 而 有 力 的 語 法 , 它 可 以 在 C/C++ 程 式 碼 中 , 直 接<br />

寫 組 合 語 言 程 式 碼 , 而 且 不 會 影 響 到 編 譯 器 做 最 佳 化 的 功 能 。<br />

安 裝 GNU 跨 平 台 編 譯 器 ( 鏈 結 器 、 載 入 器 、 函 式 庫 ) 需 要 有 點 耐 心 , 通 常 都<br />

不 太 順 利 。 因 為 一 般 人 較 少 會 去 建 構 一 個 內 嵌 式 系 統 的 發 展 環 境 , 有 問 題 的 話 可<br />

就 要 自 己 想 辦 法 解 決 。<br />

除 錯 器 Debugger<br />

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

[21][22], 它 是 一 套 相 當 完 整 得 多 功 能 除 錯 器 , 使 用 者 介 面 是 以 文 字 為 基 礎 , 可<br />

以 用 來 對 C,C++,PASCAL,FORTRAN,Assembly language 所 寫 的 程 式 作 除<br />

錯 。GDB 功 能 強 大 , 最 基 本 的 一 些 功 能 比 如 在 程 式 中 設 中 斷 點 , 單 步 執 行 , 觀<br />

察 記 憶 體 內 容 , 觀 察 register 內 容 等 。 除 此 之 外 ,GDB 還 能 對 遠 端 的 機 器 作 除<br />

錯 的 操 作 , 它 有 一 套 通 訊 協 定 ,RSP (remote serial protocol), 可 以 用 來 作 為 GDB<br />

遠 端 除 錯 Host 與 Target 之 間 互 相 溝 通 的 協 定 。 因 為 GDB 有 這 種 功 能 , 除 了 能<br />

夠 對 Linux 核 心 除 錯 之 外 , 它 也 很 適 用 於 內 嵌 式 系 統 。 除 了 一 些 基 本 功 能 之 外 ,<br />

GUN debugger 還 有 一 套 Script language 可 以 來 對 系 統 做 一 聯 串 的 設 定 及 測 試 。<br />

GDB 是 種 互 動 性 工 具 , 雖 然 文 字 型 態 以 下 命 令 方 式 的 GDB 已 經 提 供 很 強 的 功<br />

能 了 , 但 是 對 大 多 數 人 而 言 , 圖 型 使 用 者 介 面 仍 然 是 最 容 使 用 的 。 因 此 有 許 多 的<br />

軟 體 以 GDB 為 基 礎 , 整 合 成 一 套 圖 型 使 用 者 介 面 的 GDB, 例 如 Emacs, 它 除<br />

了 是 一 套 功 能 強 大 的 編 輯 器 之 外 , 它 還 可 以 在 它 的 畫 面 中 列 出 原 始 程 式 碼 以 及<br />

program counter, 透 過 Emacs 的 命 令 列 還 可 以 對 GDB 下 指 令 。 除 了 Emacs 之<br />

外 , 其 他 類 似 的 軟 體 還 有 xxgdb,mxgdb,DDD,kdgb,Code Crusader 及 wind<br />

River’s Crosswind 。 圖 四 為 DDD 除 錯 器 的 畫 面 [23] 。<br />

12


整 合 性 發 展 環 境 與 工 具 (IDE)<br />

圖 四 DDD 的 GDB 畫 面<br />

有 些 公 司 就 專 門 發 展 一 些 軟 體 , 將 開 發 一 套 系 統 所 需 的 一 些 工 具 , 整 合 成 一 套<br />

package, 方 便 系 統 開 發 者 使 用 , 例 如 Red Hat 的 GNUPro Tool kit。 但 是 這 些<br />

Tools 都 相 當 昂 貴 , 所 幸 , 也 有 人 針 對 這 種 需 求 , 開 發 相 關 的 工 具 ,Kdevelop 這<br />

個 計 畫 就 是 為 了 在 Unix 的 環 境 下 提 供 整 合 C/C++ 編 譯 器 的 整 合 性 開 發 環 境<br />

IDE,Kdevelop[24] 可 以 在 KDE 或 GNOME 的 圖 形 介 面 的 環 境 下 執 行 。 圖 五 為<br />

Kdevelop <strong>1.</strong>1 版 在 GNOME 下 執 行 的 畫 面 。<br />

一 套 整 合 性 開 發 工 具 通 常 都 有 許 多 不 同 的 性 質 的 功 能 , 函 蓋 開 發 過 程 中 所 需<br />

的 工 具 , 以 Kdevelop 而 言 , 它 提 供 以 下 所 列 的 功 能 :<br />

Project Management: 提 供 專 案 計 畫 管 理 , 可 單 獨 對 某 一 檔 案 作 屬 性 設 定 ,<br />

並 且 協 助 程 式 設 計 者 整 合 開 發 進 度 , 作 版 本 控 制 。<br />

Dialog Editor: 幫 助 使 用 者 很 容 易 的 由 內 建 的 對 話 盒 , 去 建 構 GUI 使 用 者 介<br />

13


面 , 由 於 Kdevelop 完 全 open source, 使 用 者 也 可 以 借 由 修 改 內 建 的 對 話 盒 的 程<br />

式 , 來 提 供 更 多 的 功 能 。<br />

Graphical Class Viewer/Class parser/ Class tools: 可 提 供 概 觀 專 案 中 所 有 的 類<br />

別 (Class)、 類 別 中 的 C 及 C++ 敘 述 、 類 別 的 結 構 、 運 算 子 等 。 類 別 工 具 (Class tools)<br />

的 對 話 盒 可 以 增 加 、 減 少 或 修 改 類 別 的 屬 性 , 類 別 工 具 (Class tools) 是 Kdevelop 的<br />

一 個 新 的 功 能 , 它 基 本 的 想 法 是 可 以 利 用 類 別 工 具 來 觀 察 類 別 之 間 的 繼 承<br />

(inherence) 關 係 以 及 類 別 的 方 法 (method)。<br />

整 合 性 除 錯 工 具 : Kdevelop <strong>1.</strong>1 版 提 供 了 一 個 整 合 性 除 錯 器 , 使 用 者 在 使 用<br />

Kdevelop 的 Class Viewer 時 , 可 以 有 效 率 的 找 出 問 題 , 這 個 除 錯 器 可 以 以 原 始<br />

碼 的 型 式 除 錯 , 設 定 中 斷 點 , 觀 察 變 數 與 堆 疊 的 內 容 等 。<br />

YARD<br />

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

從 標 準 的 Linux 套 件 中 抽 取 所 需 的 部 份 , 放 入 一 或 兩 片 磁 片 中 , 不 需 要 硬 碟 就<br />

可 以 boot up Linux 的 工 作 而 言 , 並 非 難 事 。 麻 煩 的 地 方 在 於 如 何 選 擇 所 要 的 檔<br />

案 功 能 , 函 式 庫 , 區 動 程 式 等 , 這 些 工 作 非 常 煩 雜 。Bootdisk_HowTo 的 作 者 Tom<br />

Fawcett 特 別 針 對 這 種 的 需 求 , 以 Perl 語 言 寫 了 一 個 Script file,YARD[25], 可<br />

以 用 來 由 標 準 的 Linux 套 件 中 抽 出 必 要 的 部 分 , 做 成 一 片 開 機 磁 片 。<br />

BusyBox<br />

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

公 用 程 式 ,Shell 的 公 用 程 式 , 搜 尋 的 公 用 程 式 ,grep,gzip,tar 等 等 , 放 入 一<br />

個 小 的 執 行 檔 中 , 檔 案 大 小 約 為 200 多 K bytes, 可 以 用 來 取 代 大 部 份 常 用 的 公<br />

用 程 式 , 當 然 ,BusyBox 內 的 功 能 是 比 正 常 公 用 程 式 來 得 少 , 但 由 於 它 很 小 , 大<br />

部 份 常 用 的 選 項 都 能 夠 提 供 , 很 適 合 應 用 於 小 型 系 統 或 是 內 嵌 式 系 統 。BusyBox<br />

另 外 也 提 供 一 些 Script 檔 可 以 將 原 先 系 統 所 使 用 的 指 令 程 式 重 新 鏈 結 到<br />

Busybox, 讓 使 用 者 運 用 這 些 指 令 時 , 並 不 會 感 到 有 何 差 異 。<br />

因 為 BusyBox 設 計 得 相 當 精 簡 而 且 模 組 化 , 其 他 的 模 組 可 以 很 容 易 的 在 編<br />

譯 時 加 入 或 移 除 , 因 為 有 此 特 性 ,BusyBox 可 以 針 對 使 用 者 需 求 去 設 計 一 個 專<br />

屬 的 軟 體 模 組 , 加 到 一 個 內 嵌 式 系 統 中 。 有 許 多 計 劃 也 是 使 用 BusyBox, 如 Linux<br />

Router Project,Lineo Linux。<br />

TinyLogin<br />

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

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

組 之 管 理 , 它 也 提 供 shadow password 以 提 昇 系 統 的 安 全 性 。 就 如 同 它 的 名 字 所<br />

示 ,TinyLogin 程 式 很 小 , 很 適 用 於 記 憶 體 空 間 很 小 的 環 境 如 Boot Disk 或 內 嵌<br />

式 系 統 , 它 可 以 與 BusyBox 作 一 個 完 美 的 結 合 或 者 是 單 獨 使 用 。<br />

14


ASH<br />

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

跟 ”bash” 比 起 來 小 很 多 , 因 為 它 的 功 能 有 限 , 所 函 括 到 的 函 式 庫 也 很 少 , 所 以 很<br />

適 合 運 用 在 內 嵌 式 系 統 中 。<br />

7. 結 論<br />

圖 五 Kdevelop 的 IDE 畫 面<br />

Linux 在 內 嵌 式 作 業 系 統 發 展 日 新 月 異 , 本 文 只 是 節 錄 部 分 發 展 中 的 計 劃 ,<br />

在 寫 完 這 篇 文 章 的 同 時 , 網 路 上 又 有 更 多 更 新 的 關 於 內 嵌 式 Linux 相 關 資 料 被<br />

發 表 , 可 見 內 嵌 式 Linux 的 發 展 是 相 當 被 許 多 人 所 看 好 。 但 是 , 以 目 前 的 情 況 而<br />

言 , 內 嵌 式 Linux 尚 未 達 到 一 般 商 業 RTOS 的 境 界 , 仍 有 許 多 地 方 有 待 加 強 , 例<br />

如 Linux 的 縮 小 化 , 雖 然 一 些 小 型 Linux 的 套 件 已 經 可 以 將 它 縮 小 到 一 張 磁 片 以<br />

內 , 相 較 於 一 般 RTOS 數 十 Kbytes 的 核 心 仍 是 太 大 , 如 果 能 將 目 前 核 心 所 存 的<br />

一 些 功 能 如 驅 動 程 式 ,TCP/IP Protocol Stack, 檔 案 系 統 等 等 抽 離 核 心 , 使 核 心 只<br />

單 純 到 做 一 些 基 本 功 能 如 ,Thread 控 制 , 程 序 間 通 訊 , 同 步 機 制 等 , 其 他 功 能<br />

則 以 核 心 Thread 的 形 式 互 相 合 作 , 來 提 供 上 層 應 用 軟 體 的 系 統 軟 體 平 台 。 如 此<br />

一 來 將 可 以 更 進 一 步 縮 小 核 心 的 大 小 , 也 可 以 在 核 心 中 動 態 的 加 入 或 抽 出 某 些 功<br />

能 而 無 需 重 新 編 譯 核 心 , 更 可 以 給 應 用 層 撰 寫 即 時 程 序 的 能 力 ( 核 心 Thread 可 提<br />

供 等 級 )。 這 樣 Linux 將 更 適 用 於 內 嵌 式 系 統 。<br />

15


附 錄 及 參 考 資 料<br />

<strong>1.</strong> Joel R. Williams, “Embedding Linux in a Commercial Product”, August,<br />

1999.www.emlinux.com<br />

2. Free Software Fundation http://www.fsf.org/<br />

3. Jerry Epplin, “Linux as an Embedded Operating System”, Embedded<br />

System Programming, October 1997.<br />

4. Etlinux: http://www.prosa.it/etlinux/<br />

5. Embedix: http://www.lineo.com/<br />

6. BlueCat: http://www.lynx.com<br />

7. eCos : http://sourceware.cygnus.com/ecos/<br />

8. Alfalinux Home Page http://alfalinux.sourceforge.net/alfaeng.php3<br />

9. Linux Router Project, www.linuxrouter.org<br />

10. Phil Hochmuth “Diskless Linux terminals”,<br />

1<strong>1.</strong> Syslink : ftp://ftp.kernel.org /pub/linux/utils/boot/syslinux<br />

12. Thin Linux: http://www.thinlinux.org/<br />

13. How to build your own version of PicoBSD<br />

http://www.freebsd.org/~picobsd/<br />

14. Victor Yodaiken, “The RT-Linux approach to hard real-time”, RT-Linux.org<br />

Web site.<br />

15. Michael Borabanov & Victor Yodaiken,”Introducting Real-Time Linux”.<br />

16. RTAI: A Hard Real Time support for LINUX<br />

http://www.aero.polimi.it/projects/rtai/<br />

17. P. Mantegazza, E. Bianchi, L. Dozio,”Introducing the Real Time<br />

Application Interface (RTAI) for Linux”<br />

18. Test Real-Time Linux http://www.fisica.unlp.edu.at/rt/<br />

19. Embedded Linux How-to: Linux Documentation project<br />

http://metalab.unc.edu/mdw/<br />

20. Install GCC, http://gcc.gnu.org/install/index.html<br />

2<strong>1.</strong> Stan Shebs, “GDB: An Open Source Debugger for Embedded<br />

Development”, March 1999, ESC Online, www.esconline.com<br />

22. Gatliff, Bill, “Embedding with GNU: The GNU Debugger”, Embedded<br />

Systems Programming, September 1999, p.80.<br />

23. The Data Display Debugger,<br />

http://linux.cis.nctu.edu.tw/docs/ddd/index.html<br />

24. Kdevelop : C/C++ IDE (Integrated Development Enviroment) for Unix.<br />

http://www.kdevelop.org/<br />

25. YARD : A suite of Perl scripts for creating rescue disks<br />

http://www.croftj.net/~fawcett/yard/<br />

16


26. BusyBox: http://busybox.lineo.com/<br />

27. TinyLogin: smallest login/passwd/getty/etc http://tinylogin.lineo.com/<br />

28. Ash: http://www.debian.org/Packages/unstable/shells/ash.html<br />

17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!