Embedded Linux 測試:Bootstrap root filesystem(x86)階段《程式執行測試》

jollen 發表於 January 17, 2007 3:43 PM

本文是單純實作時的測試方法說明,「Bootstrap root filesystem」的做法、步驟、概念與隱含的觀念請自行參考相關文件。

前情提要:由 Busybox 開始

這個階段的實作「提要」如下。

我們到 Busybox 官方網站下載原始碼:http://busybox.net/downloads/busybox-1.3.1.tar.bz2。如果您是初次「把玩」open source package,必須了解一個重要的概念:對任何的 open source 套件而言,以下二份文件是必讀的:

  • README

  • INSTALL

大多數的套件都包含以上二個檔案,並且許多重要的資訊都寫在這二份文件檔裡。將 Busybox 套件解開後,先檢查以下的 utility 是否有勾選:

  • init process

  • shell(請優先選用 ash)

並且將安裝路徑(install prefix)設定到事先建立的 root filesystem 空目錄。接著進行編譯,在編譯過程中可能會產生一些錯誤,請先把產生錯誤的選項取消,試著將 Busybox 編譯出來後並安裝至 root filesystem 目錄下。

我要怎麼測試此階段 root filesystem 的正確性?

假設 root filesystem 放在 /tmp/busybox_project/rootfs 目錄下,那麼直接用 chroot 來做第一次測試是不錯的方式。指令如下:

$ chroot /tmp/busybox_project/rootfs/ /bin/sh

若出現以下訊息,表示此 root filesystem 是無法運作的:

chroot: /bin/sh: No such file or directory

以下是正確無誤的畫面:

# chroot /tmp/busybox_project/rootfs/ /bin/sh


BusyBox v1.3.1 (2007-01-17 14:42:55 CST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

# ls
bin      lib      linuxrc  sbin     usr

進到 shell 模式後,就可以跑 root filesystem 裡的應用程式了。這種測試方式,主要是對 root filesystem 裡的應用程式進行執行測試,主要的目的可能有:

  1. 了解 shell 與應用程式是否能正常執行。
  2. 了解 library dependencies 的正確性。
  3. 了解應用程式的執行結果是否正確。
  4. 了解應用程式的設定檔是否正確設定。
  5. Root filesystem 是否還缺少什麼元件(檔案、工具、設定檔等等)。

常見原因

此階段產生錯誤的原因可能有:

  1. 缺少 shell。
  2. library dependencies 問題。

這種測試方式,可能無法真正有效測試到 init process 階段的問題,因此變更 root 根目錄後的第一個執行程式應該指定為 shell。

如果您想練習 chroot 測試,必須下載 Busybox 並自行建構基本的 root filesystem。我也提供了此階段的成果檔案 [http://tw.jollen.org/root-filesystem/busybox_project_001.tar.bz2],以方便您練習 chroot 用法。

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw