早在moblin出来时,我就想玩了;不过,又不想在虚拟机上捣鼓,总有种隔靴搔痒的感觉。家里一直在用的是一台hp的cq515,AMD的平台,2.1G处理器加上RadeonHD3200的集成显卡,说实话,配置上很适合搭载moblin这种专为小笔电优化过的系统。可惜,默认的moblin被指定为“专门为atom优化的。。。”,网上也没看到过有将moblin配在非intel系的本本上。于是,我就自个儿来个tear it down。
我没有用官方build好的img文件,而用的是moblin-image-creator系列工具来build。开始时以为moblin像openembedded一样,也是build from scratch,其实不然,它是从moblin remote repository上pull现成的rpm包直接作为系统组件。不过build过程本身还是可以根据用户需要自己进行订制、裁减(基于redhat的kickstart);moblin使用bootstrap方式来隔离host os的依赖影响(这一点和ChromeOS的build过程一样),所以哪怕我的宿主os用的redflag linux,仍然可以顺利完成build过程。用户还可以用chroot-bootstrap方式从源代码build自己需要的组件,oem应该也是用这种方式来build一个新的distribution。当然,我也做好了要替换诸如kernel之类的准备了,毕竟moblin repository上面的包应该都是为intel优化的。
build instruction:
first create the bootstrap filesystem to be chroot resolving the dependancy with host OS
moblin-create-bootstrap --cache=pkg-caches --reponame=moblin2 --repourl=http://repo.moblin.org/moblin/releases/2.1/ia32/os/ --outdir=~/moblin-bootstrap-fs
moblin-bootstrap-fs就是生成的bootstrap file system目录。pkg-caches目录就是从repourl地址download下来的rpm包。在接下来的ceate image的过程中就不再需要从远程地址获取。
then based on bootstrap filesystem to build the last image.
moblin-image-creator --bootstrap=~/moblin-bootstrap-fs --config=2.1-developer-final.ks --format=raw --cache=pkg-caches
image format选择的raw,即ext2/ext3文件系统映像。mobln-image-creator用到redhat kickstart提供一定的订制化能力。ks文件来自于moblin-image-creator source tree下的example目录中。选用developer版本是为了安装一些sdk以方便后面阶段需要从源代码build组件的需求。
这一步应该会根据kickstart configure文件从pkg-caches中选取指定的rpm包安装到最终的target filesystem中。最后产生的是一个ext3文件系统img文件。
生成的目标系统的kernel是2.6.31。别忘了,default moblin是为intel平台定制的,不用试也可以知道,在amd/ati平台上肯定是unworkable。所以我还有许多工作要做。作为一个可用的系统,首先要保证的就是graphics interface的可用性,比如最基本的点亮屏、窗体平滑拖动、3D界面流畅等。amd/ati平台和intel平台在graphics部分(显卡芯片)是完全不一样的,显卡驱动自然是要自己去捣鼓。当然,我也可以用vesa driver,不过这样就失去了硬件加速,自然是不爽。moblin依赖于GEM,KMS,DRI2等graphics新技术(因为intel很早就实现它们了),但2.6.31的内核还不支持radeon的GEM/KMS等,我git了kernel,发现在2.6.34的时候是支持的,所以,需要重新build 2.6.34的kernel。其实除了GEM/KMS的原因外,还因为我的radeon显卡是r600系列,在2.6.31 kernel中r600的firmware也不完整,所以也需要更新kernel。
底层的kernel driver准备好了后,上层的user mode显卡驱动也得跟上,比如xserver driver和mesa opengl driver。在build driver过程中,肯定会遇到不知道用什么版本或者不知道需要build哪些module,一般采取的办法是先通过lspci得到chip ID,然后再在源码中grep对应的chip ID找到哪几个文件对应这支chip;版本则自然是越新的越好。如此,整个graphics stack都重新build了一套。
在default kernel config中发现,除了graphics driver外,moblin为了最小化disk space以及快速启动,基本上一些重要的外围设备中都只包含了intel芯片组的驱动(比如sata),于是,再次通过lspci在source tree中挖掘,将我的本本的一些配置添上。对于这些eth,wireless,audio驱动等,虽然kernel driver都有,但也许还不够成熟,需要以后的测试来发现可改进的地方,但早期应该是不会影响设用的。
最后,burn到移动硬盘,直接从硬盘启动。问题还是很多的,比如如果直接进图形界面会宕机,可能还是KMS/GEM不稳定;于是,我只有修改/usr/sbin/moblin-dm,手动startx来进入图形界面,还可以接受。最后,startx,it works!总体来说,效果还算流畅,字体也比较好看,不过没中文输入法。比较喜欢上面那排图标点击它时跳动的感觉。。。
上图~
因为用了radeonhd 3200用作集成显卡,看看3D performance,结果,惨不忍睹,比普通distribution低太多。
moblin内置了一些游戏~倒是可以玩,fps也还可以,就是audio问题很大,几乎听不清楚音乐,一直破音