2009年2月17日 星期二

Poky porting

最近這幾天,我一邊研究 OpenEmbedded building system 的目錄結構及設定檔撰寫,一邊嘗試利用 Poky 來編譯目前最新穩定版本 (2.6.28) 的核心。原因無他,主要是 2.6.27 以後的核心才有支援我現在使用的開發板。是故整個過程可分為兩階段,一是增加新版本核心用的 bb 檔案,另一項則為增加新硬體的設定檔。

要加入新版本核心其實可以將 meta/packages/linux/ 下的 bb 檔找一個你覺得適合的複製一份來改,內容大同小異,操作如下:

cd meta/packages/linux
vi linux-<MACHINE>_2.6.28.bb
# 填入自訂的內容,或複製現有的來修改
...

要注意的是,我們還需要再新建一個目錄,名稱如下所示,並複製核心使用的組態檔到該目錄下,檔名隨意,方便記憶即可:

mkdir linux-<MACHINE>
cp ~/defconfig ./defconfig-2.6.28

接著在修改 bb 檔時,幾個重要的變數需要設定:
  • PV: 套件版號,OpenEmbedded 會利用該變數來決定使用那個版本來編譯,預設是找最新的版本。
  • S: 套件原始碼目錄,也就是 tarball 解開後放置的路徑,在這個例子中是 ${WORKDIR}/linux-2.6.28
再來就是在 bb 檔中撰寫上 patch 以及複製核心組態檔用的 shell script,這部分可以參考其他 bb 檔的做法,在此就不贅述。

加入新硬體的設定檔可參考 meta/conf/machine/ 下的檔案來修改,由於我的開發板和 OpenMoko 所使用的硬體是同屬於 S3C2440 的晶片,是故就直接複製 fic-gta01.conf 來修改:

cd meta/conf/machine
cp fic-gta01.conf <MACHINE>.conf

修改的部分如下:
  • MACHINE_FEATURES = "kernel26 vfat ext2"
  • MACHINE_DISPLAY_WIDTH_PIXELS = "800"
  • MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
  • PREFERRED_PROVIDER_virtual/kernel = "linux-<MACHINE>"
  • 移除 MACHINE_CLASS
  • 移除 MACHINE_EXTRA_RDEPENDS, MACHINE_EXTRA_RRECOMMENDS
  • 移除 EXTRA_IMAGECMD_JFFS2
  • 移除 SERIAL_CONSOLE
  • 移除 EXTRA_IMAGEDEPENDS
其餘照舊。

修改完成後,在 build 目錄下 (別忘了要 source poky-init-build-env),鍵入以下的指令:

bitbake linux-<MACHINE>

就會開始進行編譯程序。若發生錯誤,查看 build/tmp/work/<MACHINE>-poky-linux-gnueabi/linux-<MACHINE>.../temp/ 下的紀錄檔並修正。

目前已經加入了 2.6.28 及 2.6.29-rc4 的 recipe。其中 2.6.29-rc4 包含了開發板上 SD 控制器LCD 控制器的支援,相信不久應該就可以看到跑 GNOME Mobile 的樣子了。

沒有留言: