比特烘烤 Moblin
Moblin由Intel于去年7月启动,旨在为移动设备开发合适的Linux系统和应用。之前没听说Intel有成熟的Linux系统方案,但其在业界的地位再一次让我们看到了什么叫“振臂一呼,应者云集”,Novell等公司先后宣布参与Moblin并为之贡献一份力量;Linux的发布者Canonical推出为移动网络设备开发的Ubuntu MID版本。当然,作为主角的Intel动作也不小, 先是收购了移动Linux开发商OpenedHand,使其为Atom处理器软件进行最佳化;又在不久前的IDF上宣布将于明后年推出下一代的Moorestown 平台。一切都表明了Intel要在MID领域大展拳脚的决心。
众所周知,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就出了问题:“Usingdash 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 loadmodule “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风格。
想要扩展功能,只需提供构建菜单就可以了。
Intel收购OpenedHand,利用其在用户界面框架方面的专长,以解决MID界面的难题。同时,Intel还将继续支持OpenedHand已有的开发项目,其中包括用于GUI 的Clutter、Matchbox,这些项目也将成为Moblin的重要组成部分。Intel收购OpenedHand实为明智之举,现如今的电子产品,若不能呈现炫酷的视听体验,毫无疑问,将很难有所作为,在IC领域擅长的Intel也需要弥补其在软件上的空缺。当然,Intel的雄厚实力和巨大投入,让我们相信MID有着美好的前景。