虽然对移植Android很感兴趣,苦于手上没有合适的移动硬件平台,苦闷阿。结合开发社区的一些hacking news纸上谈兵,说说我所认为的理论上的移植步骤吧,欢迎交流,如果有朋友移植成功,不吝赐教!
  通过前两天对Android的Linux平台 以及启动过程的初步学习,我觉得Android的意义不仅仅是手机平 台那么简单,通过对其框架,结构的分析,我们可以将Android应用到任何移动硬件平台上,甚至自己研发出新的更好的框架。连Google自己也说,我 们的目标是,让我们发布的强大的平台能够应用到数千种不同的移动设备上。这是可以理解的,Google就是这样,它的每个策略都比常理要更进一步。不推出 专属的硬件,而是一个通用的移动设备的软件平台,使Android可以更方便的快速占领手机操作系统的市场,而最终可以达到的份额也会非常的可观。
  当然,这都是后话了,group上这几天的焦点话题就是,我们如何让Android在现有的硬件平台上跑起来,而不是仅仅用模拟器来模拟它?这 个命题估计对所有hacker都有巨大的吸引力,如果Android能在自己的手机平台上跑起来,所有的开发,就突然变得有意义了。我不是说目前的开发没 有意义,毕竟GoogleN位数的奖金在那里摆着的,呵呵,不过对于上层开发者来说,最终目的还是应用的实际性和流行性,对吧?应用有没有实际价值,实际 硬件平台上跑一跑就知道了。
  从Android现有的开源情况看,所有的hacking已经有一个比较明确的指导方向了,就是依靠Benno最先放出的方法来hack各种 p_w_picpath并分析一些东西,从我之前的两篇文章也可以看出大致步骤。我们现在能够得到的东西,包括ramdisk p_w_picpath,systemp_w_picpath以及data p_w_picpath,当然还有open source的Linux kernel。所以,所有的工作都应该从这几个东西入手。
  先看看kernel部分。由于Android基于Linux,因此所有的目标移植平台都应该允许运行Linux,对于尝试阶段的我们来说,最好 是找一款默认就是采用Linux操作系统并提供完善的develop environment的设备,这样,我们只需要找出Google提供的Linux2.6.23kernel和现有的kernel有什么不同,把所有需要 的修改做成patch,patch到现有系统上,就有可能成功移植整个Android,无须重新编译Google的Linux 2.6.23 kernel,然后绞尽脑汁想怎么port到某个设备上。先下载一个standard Linux2.6.23 kernel,然后使用命令
  diff -ruN linux-2.6.23/ Google-linux-2.6.23/ >lk.patch
  打开lk.patch,God,有3万多行。仔细分析一下,大部分都是和Qemu以及goldfish有关的。我们要做的事情,是让 Android在真实平台上跑起来,所以不管是用于虚拟处理器的Qemu还是SDK模拟的硬件平台Goldfish,都不是我们所需要的,要在patch 里面去掉他们,因为我们希望运行在真实的硬件平台上。恩,说实话,是一个很麻烦的事情,你要分析又30000多行的patch阿……不过里面有一超长段是 关于yaffs的补丁,如果你目标平台所带的内核已经支持yaffs了,就没必要要了。这是我修改后的patch ,放在googlepages上的,要是哪天又被和谐了我也没有办法。
  下一步,就是让打了Android patch的内核运行在你的目标硬件上,具体步骤是和不用硬件的开发环境相联系的。当然,还需要导入Android的rootfs以及filesystem。将他们用mkfs.jffs2构建成jffs文件系统即可。
  需要注意的是,这个合适的硬件平台是需要挑选的,看看Android模拟器里面的信息:
  # cat /proc/cpuinfo
  Processor : ARM926EJ-S rev 5 (v5l)
  BogoMIPS : 331.77
  Features : swp half thumb fastmult vfp edsp java
  Google默认的是ARM926EJ-S核心。这就在一定程度上限制了我们能够port的平台选择,Benno曾经试验在Openmoko上 移植Android ,最后失败了,原因就是ARM926EJ-S采用的是ARMv5TEJ指令集,而Openmoko的ARM920T采用的是ARMv4T指令集。所以,不 仅仅是需要能运行兼容EABI的Linux的设备那么简单。
  以上是理论步骤的逻辑分析,由于我目前手上没有试验平台,所以也无法验证,如果有朋友最后成功移植了Android,多多交流。