最近工作上开始转向android,虽然以前接触过,但并没有在一个全新的硬件平台上移植android。
这次需要移植的平台是 imx35 cpu的一个硬件设备。主要设备有 lcd,touch panel,audio,battery,g sensor,light sensor,backlight,keypad,wifi,bluetooth,gps等等。目前已经做了除wifi和bt之外的其他部分,计划两个星期内,做好这两个部分。
整个移植过程比较繁琐,首先要做好各个部分驱动,然后把android的代码添加到先前做好的base上。其中经历了不下百次的实验和失败,所以最终的经验弥为珍贵。在此,以切身操作的经历为基础,把关键环节记录下来。
移植的前期当然是调查,然后实验。但网络上的信息多是 在一种广泛使用的硬件平台上移植,而且没有精确的操作细节。所以只能对移植有一个大体的概念,出现的问题和解决方法都没有描述。
首先做移植的前提条件,一,当前平台的BSP,即有效地内核和驱动。二,android 源码。包括内核代码,和rootfs 代码。对于后者的获取,在此就不说了,网上的指导很多,可以照着做。 如果没有当前平台的BSP,那么还是先把对应的驱动完成吧,毕竟rootfs是建立在内核和驱动之上的。比如,lcd的驱动没有或者没有完成,rootfs又怎么能操作lcd进行显示呢?在此,可以简单的测试一下lcd,和audio,比如用MPlayer放个视频,用aplayer 放个 MP3。如果显示正常,播放流畅,说明lcd 的framebuffer 和 alsa 基本正常。
如果这个两个前提准备好了,那么就可以开始移植内核了。 当然有两种方法可以选择:一,在现有的内核上添加对android的支持,二,在android内核之上添加平台的支持。 至于选择哪种方法,就要看自己的要求,已经工作量大小了。其实,android内核与标准内核相比,改动不是特别多,可能有几十个文件。用 beyond compare看一下,我直接手动拷贝过去,然后改一下Kconfig 和Makefile。这里,几个比较重要的文件是,misc目录下的文件,ashmem。这里需要一定的内核和驱动基础,要确保最终编译通过。
此时得到一个支持android的内核,放到硬件上,试试看,此时可以看看对应的设备节点是否出现。前提是,你的rootfs中有udev或者mdev。同时在启动信息中,可以看到一些新的关于android支持的内容。
根据新加入的android驱动代码,可以在/sys下,/dev下看到对应的节点。如果没有出现,那么说明移植失败了,需要重新修改。
现在手里没有设备,明天看一下,有哪些新生成的节点,在下一篇中列一下。
至此,得到一个“支持”android的内核了。