衆所周知,Moblin Image Creator 是moblin.org 的項目之一, 其 構建映象的方式 要 比命令行容易 的多 ,此外, 還可以 通過apt-get 或yum 極其簡單地擴展所 需的包,然而MIC 並非唯一的開發工具。 上面 提到收購 OpenedHand 的 消息 不知 你 有何感觸,那 可是大名鼎鼎的Matchbox,還有Poky linux等的開發者 。 當 我看到O -hand網站出現“Intel acquires OpenedHand”時,我就不由自主地想到既然被intel收購了, 那 能不能用bitbake來構建Moblin的映象呢?猜測poky 會 添加meta-moblin, 想法 果然 得到證實 ,有了bb文件,bitbake會爲你做好一切。 只是 Sato的界面並不十分理想, 相比於MIC, bitbake 的擴展也顯得有點複雜,但使用bitbake構建moblin 也算是另闢蹊徑吧。
對於bitbake,如果不知道OpenEmbedded,你可能會覺得比較陌生。 其實,我也是一知半解,依葫蘆畫瓢寫寫bb 文件而已。 大概知道 OpenEmbedded/bitbake的設計思想主要源於Gentoo的portage,其中,bitbake 是系統的核心,負責具體的構建工作,OpenEmbedded(或者Poky)提供構建的菜單,系統根據菜單到互聯網上按單索料,然後下鍋烹調,而你所要做的就是耐心等待美味大餐出爐。 心動了吧, 那就 試試bitbake 。
取得poky 的代碼,git 貌似很流行, 但 我用它取得poky 代碼會出錯,還是用svn 。
git clone http://git.moblin.org/repos/tools/poky.git svn co http://svn.o-hand.com/repos/poky/truck poky |
進行烘烤之前,最好先看一下poky-handbook.pdf (在poky/handbook 目錄下make 可以得到 )。
source poky-init-build-env bitbake moblin-image-netbook ( moblin 的其他映象參見poky/meta-moblin/packages/images ) |
本 以爲會順利地編譯出內核&根文件系統 ,沒想到錯誤是接踵而至,甚至還沒有解析bb 文件 ,bitbake 就出了問題 : “Using dash as /bin/sh causes various subtle build problems, please use bash instead” 。 原來是sanity.bbclass 對/bin/sh 做了檢測,只需將 原來 指向dash 的/bin/sh 改成指向bash 。 此外,還 需要注意代理 ,參考 poky/build/conf目錄中的site.conf.sample 進行設置 ,但http和ftp的代理 有點特殊, 似乎已經不再從環境變量中取得,可以在site.conf文件中添加HTTP_PROXY=http://10.19.5.1:808實現。 碰到 源碼無法下載 的情況, 一般是下載源的問題,在base.bbclass 中添加地址,或者在相應的bb 文件中直接修改SRC_URI 參數即可。 比如base.bbclass聲明的kernel的ftp無法下載,可以添加http 的地址 :
${KERNELORG_MIRROR} http://www.kernel.org/pub |
生成內核和根文件系統 以後 ,還是老辦法qemu :
qemu -kernel bzImage-2.6.27-r4-netbook-20081021004550.bin -hda moblin-image-netbook-netbook-20081021004550.rootfs.ext3 –append “root=/dev/sda rw” |
X 無法啓動,出現“(EE):Failed to load module “ cirrus ” ” 的錯誤,本以爲是xorg.conf 的問題,root 登錄以後使用Xorg -configure ,錯誤依舊,但得到了一點信息 : 僅支持Intel 和i810 ,那cirrus 是哪裏來的呢? 沒錯,qemu ,而且它 支持的顯卡僅爲cirrus 和vesa 。 既然qemu不能適應moblin,那就讓moblin適應qemu吧。MID 和PC一樣都 是x86的, 那 本 機的動態連接庫應該可用,掛載 moblin-image-netbook-netbook-20081021004550.rootfs.ext3到本地${rootfs},拷貝 /usr/lib/xorg/modules/drivers目錄下cirrus相關的幾個so文件到${rootfs}/usr/lib/xorg /modules/drivers 目錄 。再次使用qemu仿真,得到的結果依然是 “ (EE):Failed to load module “ cirrus ” ”,但提示變成 了 ABI版本不一致。簡單的辦法不成,那就用bitbake構建cirrus好了。在poky/meta/packages/xorg-driver目錄下創建xf86-video-cirrus_git.bb 。
require xf86-video-common.inc DESCRIPTION = "X.Org X server -- Cirrus display driver" DEPENDS += "virtual/libx11 libxvmc drm dri2proto glproto / virtual/libgl xineramaproto libpciaccess" PROVIDES = "xf86-video-cirrus" PR = "r1" PV = "1.2.1+git${SRCREV}" SRC_URI = "git://anongit.freedesktop.org/git/xorg/driver/xf86-video-cirrus;protocol=git" S = "${WORKDIR}/git" COMPATIBLE_HOST = '(i.86.*-linux)' EXTRA_OECONF = "--enable-dri –disable-static" |
然後bitbake xf86-video-cirrus_git , 拷貝${WORKDIR}/image/usr到掛載的文件系統 ,再次運行qemu 將看到sato 風格。
想要擴展功能,只需提供構建菜單就可以了。