提供給 Beagleboard 的 Image Installer

這幾周,0xlab 的開發者都在準備新的 Android distribution,標的平台是 Beagleboard,可望在 COSCUP 到來前釋出,過程中順便寫了一個簡單易用的 Image Installer,可從 SD card 開機並將可運作的 Android system image 植入 Beagleboard 之上的 NAND flash,而不必依據繁瑣的流程,才能體驗我們的新創作。目前已有初步成果,可參見下圖:
已實做的特徵有:

  • 僅需要放置單一檔案 (uImage.bin) 到 VFAT 格式的 SD card 中,在 Beagleboard 插入 SD 開機進入 Image Installer,即有簡單俐落的 UI
  • 整個 Image Installer (kernel + busybox + file system + MTD tools + UI) 佔用不到 2Mb 的空間
  • 預設讀取 SD card 裡頭的 android_beagle.ubi 與 0xkernel-beagle.bin 兩個檔案,自動寫入 NAND flash,並設定必要的 u-boot 環境參數。放置 image 檔案的動作可在多數的作業系統平台下進行,舉凡 MS-Windows, GNU/Linux, Mac OS X 等等,只要支援 VFAT 與 SD/MMC 讀寫即可
貌似單純的 Image Installer 開發,卻折騰了好幾天,歸納有若干因素:
  • 準備在 Beagleboard/OMAP3 環境下可最小可啟動的 Linux image,需要考慮到 device driver 間的相依性,比方說若將 USB subsystem 完全移除的話,很可能無法正常開機。又,OMAP3 內建的 MFD (Multi-Function Device) 要注意到驅動順序的議題,不然功能無法正確運作
  • 要留意 TI OMAP3 / Beagleboard 啟動順序,即使 boot from SD,但 u-boot 與其 u-boot bootenv 很可能仍讀取自 NAND flash,這導致後續啟動的 Linux kernel 採用了預設值,致使 Image Installer 無法在預期的環境參數下啟動
  • ARM/Linux 啟動過程中,會試圖自一段特別的記憶體空間讀取 command line parameters,這空間稱為 ATAGS,係由 boot loader (以 Beagleboard 來說就是由 X-Loader 帶起的 u-boot) 填寫的記憶體內容,也就是所謂的 u-boot bootenv。但對 Image Installer 來說,雖然 u-boot 給予頗大的彈性,但也使得執行環境充滿不確定性
關於 ARM/Linux 的 ATAGS 實做程式碼可參考 arch/arm/boot/compressed/head.S 與 arch/arm/kernel/setup.c 兩個檔案,筆者做了簡單的 hack 以迴避:
--- android-omap.orig/arch/arm/kernel/setup.c 2009-08-08 18:40:30.000000000 +0800
+++ android-omap/arch/arm/kernel/setup.c 2009-08-08 18:43:09.000000000 +0800
@@ -613,7 +613,6 @@

static int __init parse_tag_cmdline(const struct tag *tag)
{
- strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
return 0;
}


由此可見,原本的動作是將 u-boot 對 ATAGS 寫入的資料寫入預設的 command line。至於安裝 Linux kernel image 與 root file system image 到 NAND flash 後,還得作 (NAND 裡頭的) u-boot bootenv 的編輯動作,這部份的工作原理可參考 Openmoko 開發的 Devirginator。喔,忘了說,這些惱人的限制,會在轉換到 Qi boot-loader 後迎刃而解 :)


About this entry


  1. voyager 2009年9月2日 下午4:18

    Dear Jserv:

    如果在DevKit-8000插入SD開機, 能進入 Image Installer嗎?

    我按照您的步驟, 沒有出現簡單俐落的 UI and go for nothing?
    您認為有可能的原因是?

    謝謝.

    Alex ~

     

張貼留言