我将最新Android系统的Linux内核2.6.29下载下来,针对我的G1手机进行了打补丁(nand flash、多点触摸支持),并编译出了G1的Linux内核,使用Fastboot引导入G1,实践证明此内核可以使用。之后便开始了向mini2440移植的工作。
我的移植和之前的网上已有的人的移植方法有不同,之前的移植者都是向已经移植好S3C2440的内核里打Android补丁,这样补丁量大,出错的机会也大。而我经过考虑,决定使用反方法,先实现可以使用的Android内核,然后在这之上打上mini2440的补丁。这样避免了打大量的补丁产生大量的错误。而这个2440的补丁要实现LCD 、触摸屏和网卡等基本驱动。
我从Tekkaman Ninja处得到了他最新的Linux-2.6.29.4的补丁(Tekkaman Ninja会在近期发布此补丁)。在去除了内核中的fusion模块(用于DFB)和Yaffs模块(G1内核已经有了)后把这个补丁打在了我的android的Linux内核2.6.29上,很快,也很顺利(除了Makefile有问题之外,但很好解决,就是改一下交叉编译器)。
然后就是配置内核,这很关键,我一开始大部分按照G1去配置(除了system type和一些驱动的配置),可是用在启动到nfs文件系统的时候就挂了。后来我根据网上的文章,只是在原来mini2440的配置上稍作修改,添加必要的android系统特有的驱动,编译好后就可以引导最简单的文件系统,这说明这内核基本OK了。
要证明这个内核的可用性,只能使用android的文件系统来测试了。在此之前已经有高人搞了一个可以在ARMV4上使用的Android文件系统(armv4.tar.gz)。其实这个文件系统是从openmoko 的 freerunner 的文件系统中简化来的。现在暂时用拿来主义先测试一下内核,以后在自己做一个。
在下载文件系统armv4.tar.gz之后,根据网上的说明:
3.拷贝包中的system目录到nfs中rootfs根目录下的/system, data目录到nfs中rootfs根目录下的/data, root目录中的内容到nfs中rootfs根目录下
4.设置内核启动参数中的init=/init,既指向根目录下的init
5.删除init.rc中的部分内容,去掉除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外所有的mount命令
现在就可以开启mini2440,使用nfs作为根文件系统。以下是启动后的画面:
网上已有触摸屏的解决方法,请自己google下.