Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2764531
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类:

2012-03-24 10:36:17

移植 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 就下来了,最后,下载源代码

$ repo sync

下载过程会很慢,因为要拉下整整 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


然后,(以及在每次你新打开终端开始干活之前)输入:

. env.sh


载入环境变量。

至此,环境设定完成。欲知后事如何请听下回分解。
阅读(3305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~