移植 Android 至龙芯笔记本
序
Android:android一词的本义指“机器人”,当时同时Android也是Google于07年11月5日宣布的基于Linux平台开源手机操作系统名称,该平
台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
龙芯:龙芯(英语: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
|
获取菜单文件
$ mkdir mipsandroid-froyo
$ cd mipsandroid-froyo
$ repo init -u git://public.mipsandroid.com/mips/platform/manifest.git -b mips-froyo
|
稍候一会儿,menifest 就下来了,最后,下载源代码
下载过程会很慢,因为要拉下整整 2 个多 G 的数据。网络越好就越快,但如果下载失败了也不要紧,重复执行此命令即可。反复重试直到成功为止。
好了,经过一整晚的下载,童鞋们都下载好了吧?那么我们继续。
2.2 针对龙芯进行配置
下载回来的代码,默认的编译架构是 MIPS32R2。MIPS32 指令集内含有 MIPS IV 和 MIPS V 中的32位指令,可想而知对于只支持到 MIPS3 的龙芯,它会遇到大量的“非法指令”,不改编译出来是不能运行的。
2.2.1 龙芯配置文件 loongson2f.mk
在 froyo 下载目录的底下,在
build/core/combo/arch/mips/处置入配置文件 loongson2f.mk:
$ cat build/core/combo/arch/mips/loongson2f.mk
# Configuration for Android on Loongson-2F.
# Generating binaries for loongson2f/soft-float/little-endian
TARGET_STRIP_MODULE:=false
arch_variant_cflags :=
-EL
-march=loongson2f
-mtune=loongson2f
-mabi=32
-msoft-float #
# -Wa,-mfix-loongson2f-nop
# -Xassembler "-mfix-loongson2f-nop"
arch_variant_ldflags :=
-EL
|
是的,你没有看错。虽然龙芯具备强大的硬浮点运算单元,但这里仍然设定了软浮点。原因是 mipsandroid 改的代码里多处用到了只有 MIPSIV 才有的乘加等汇编指令。为避免节外生枝,在这里先统一使用软浮点。将来如果此项目商用化了,再组织人力物力收拾这些汇编码。除此之外,鉴于 binutils 也只有 2.20.1,2F专属的 nop 修正也没带进去,在此也是一并忽略了,等事成之后再算回头帐。
2.2.2 装载环境变量 env.sh
在 froyo 根目录置入 shell 脚本 env.sh:
$ cat env.sh
export TOP='pwd'
export TARGET_ARCH=mips
export USE_CCACHE=1
source build/envsetup.sh
export TARGET_ARCH_VARIANT=loongson2f
export TARGET_CPU_ENDIAN=EL
setpaths
settitle
|
然后,(以及在每次你新打开终端开始干活之前)输入:
载入环境变量。
至此,环境设定完成。欲知后事如何请听下回分解。
阅读(2953) | 评论(4) | 转发(2) |