众所周知,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 风格。
想要扩展功能,只需提供构建菜单就可以了。