移植 Android 至龙芯笔记本
序
龙芯:龙芯(英语:Loongson,旧称GODSON[1])是计算所自主开发的通用CPU,采用简单指令集,类似于MIPS指令集。
这两者相结合能得到什么,这正是本文想探索的。
修订记录
2010-12-13: 第二篇 2.4 章中增加对 dalvik 和 gralloc 模块的修补2010-12-1: 第二篇 2.4.1 章中增加对 bionic/libc/arch-mips/include/machine/asm.h 的修补
第一章 思路
2010年上半年,我得到一台龙芯笔记本,Yeeloong notebook。在完成了原本的 Fedora 任务后,闲置了下来。恰逢 mipsandroid.com 发布了 Android Froyo 的源码,而我又很空,那么就产生了把 Android 搞上去跑一跑的想法。在网上搜索(这是做任何事情的第一步:建筑在前人的基础上,避免重复劳动),发现此前有人将 Android 1.5 移植成功过。已经是1年以前的事了,之后很可惜没有任何下文,也没有任何方法、经验遗留下来。不得以一切从头开始。
在网上能找到大量基于 ARM 的移植文章,都极有参考价值,但离我们的目标还有一段距离。基本上,我们有现成的移植方法,有现成的 Android 内核,有移植好了的 MIPS Android 源码和编译器,那么我们的工作就从这些的基础上开始。所有事情的第一步,是下载源码。
第二章 Android rootfs
2.1 下载 mipsandroid froyo 源码
首先,你需要准备一台 PC 机,跑一个比较新的普通 Linux 发行版。为避免麻烦尽量选用大牌的,如 Fedora。Ubuntu 或者 Suse 也可以,其他冷门发行版或者 cygwin 等那你就得自己搞定一切了。预留个20G硬盘空间是必要的,因为这注定是条坎坷的路。网络和CPU那是越快越好,因为那跟等待时间成反比。一切预备妥当后,开始下载。
首先,在你的家目录下建立 bin 目录:
mkdir ~/bin
然后获取 repo 工具
$ curl >~/bin/repo $ chmod a+x ~/bin/repo |
获取菜单文件
|
|
好了,经过一整晚的下载,童鞋们都下载好了吧?那么我们继续。
2.2 针对龙芯进行配置
下载回来的代码,默认的编译架构是 MIPS32R2。MIPS32 指令集内含有 MIPS IV 和 MIPS V 中的32位指令,可想而知对于只支持到 MIPS3 的龙芯,它会遇到大量的“非法指令”,不改编译出来是不能运行的。2.2.1 龙芯配置文件 loongson2f.mk
在 froyo 下载目录的底下,在build/core/combo/arch/mips/处置入配置文件 loongson2f.mk:
|
是的,你没有看错。虽然龙芯具备强大的硬浮点运算单元,但这里仍然设定了软浮点。原因是 mipsandroid 改的代码里多处用到了只有 MIPSIV 才有的乘加等汇编指令。为避免节外生枝,在这里先统一使用软浮点。将来如果此项目商用化了,再组织人力物力收拾这些汇编码。除此之外,鉴于 binutils 也只有 2.20.1,2F专属的 nop 修正也没带进去,在此也是一并忽略了,等事成之后再算回头帐。
2.2.2 装载环境变量 env.sh
在 froyo 根目录置入 shell 脚本 env.sh:
|
然后,(以及在每次你新打开终端开始干活之前)输入:
|
载入环境变量。
至此,环境设定完成。欲知后事如何请听下回分解。