1.引言
如今越来越多的Google Android爱好者们开始移植Android系统到现有掌上设备上。最早的成功移植
Android系统是在Zaurus上,然后是在OMAP芯片组基础上的N810。
有些开发者将Android运行在来PXA270的开发板上。我们知道,摩托罗拉 MOTO E680系列
EZX 手机使用intel XScal-PXA270 应用芯片处理器,同时使用Linux 2.4.20 kernel。在经过一些研
究之后,我们认为E680完全满足移植Android系统的条件。
2.移植Android到E680
事实上,移植Android系统就是移植Google ndroid kernel到目标装置上,同时让Android root文件系统
和android kernel一同在目标系统上工作。Google在Android SDK中提供了二进制的Android root file
system文件系统以及android kernel的源。因此我们可以轻易的从Android SDK中提取出Android root文
件系统,但是我们要考虑怎样将Android kernel移植到我们的E680上面去。
这里有两种方法移植Android系统到E680上。
a)将所有的Android固件整体移植到E680上
b)将E680的kernel升级到2.6.x,然后再装入Android固件。
显而易见的是,方法a要花更多的力气,因为E680的kernel是2.4.20,而Android的Kernel是基于2.6.23
的。
如果我们选择方法b,那么我们需要先升级E680的kernel到2.6.x。幸运的是,有个开源项目叫做
OpenEzx 可以简单的帮助我们升级E680的kernel到2.6.x。这个文档详细的说明了如何通过方法b移植
Android系统到E680上。
2.1 Android Kernel/Root 文件系统
首先我们需要最新版本的Android模拟器系统。(原文使用的是android-emulator-m5-rc14.tar.gz)
下载链接
Android Root 文件系统,获取自SDK。
下载链接
获得Android升级补丁去升级2.6.x Linux kernel,你需要将Android SDK kernel从official 2.6.23 kernel中
分离,然后确认所有的Android驱动已经正确改变。这个为Linux 2.6.24做的Android patch在安装
包中
对于Android Root文件系统,你需要一些时间去制作。你去要从SDK中解压三个镜像ramdisk.img,
system.img and userdata.img去简历你需要的root文件系统。你可以在这里和OMAP上的Android做一
个对比。地址:。
现在没有在E680上能够使用的Root文件系统,我使用busybox toolkit和Android SDK自己制作了一个
新的Android NFS Root文件系统。你可以在网上找到很多有关NFS Root文件系统建立的文章,在这里
就不多讲了。同样,我也在补丁包内放入了Android NFS Root文件系统。
2.2. SW/HW 环境要求
在我们建立了Android kernel和Root文件系统之后,让我们对需要使用的软硬件环境列个清单。
2.1.1 软件环境
Linux Host:
你可以使用任何主流的Linux系统环境,比如Redhat,Fedora等等。看你自己喜欢。
tool-chain :
SDK中的Android Root System是使用ARM EABI兼容编译器编译的,因此我们需要ARM EABI兼容编译
器去编译我们的kerne。
ARM EABI compatible too-chain下载地址
你应该下载arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar !
其他的不要下载!
Patch tool:
我们需要OpenEzx 2.6.24.x-补丁设置工具去升级A1200的kernel。
下载地址:
USB Boot:
OpenEzx开发的一个工具,使得你可以使用USB去启动kernel。
下载0.2版本:
Busybox 1.1.3:
就像前面所说的,我使用了busybox去建立Android NFS Root文件系统。我使用的是1.3版本,同时我
在升级包中放入了busybox config配置文件给你参考。
2.1.2 硬件环境
我们只需要一个E680手机以及一条USB连接线去移植Android。
好了,现在我们来讲一下实施移植的细节。是不是很激动呢!- -0
#下面是我的环境搭建过程
Linux Host: VMwareStation + TurboLinux 10
Tool-Chain: arm-none-linux-gnueabi- tool chain 安装在目录 /home/arm-2007q3
Patch tool: 工具安装在目录/home/quilt-0.46 directory
USB Boot tool: 编译后将其放在 /home/testKernel/ezx_usb_boot
我为kernel建立了/home/android文件夹,为Android root文件系统建立了/home/android_nfs文件夹。
2.3 E680 Android移植工程
1)解压Linux-2.6.24 kernel tar文件(linux-2.6.24.tar.bz2)到/home/android/linux-2.6.24
你可以从以下地址下载到linux-2.6.24.tar.bz2
2)简历补丁目录在/home/android/linux-2.6.24下面,然后复制所有的OpenEzx patchset folder下的文件
到这个目录里
3)在目录/home/android/linux-2.6.2下应用OpenEzx patches,通过via cad命令:quilt push –a
4)在目录/home/android/linxu-2.6.24 下使用如下cmd命令:patch –p2 <../ ***.patch
u android-core.patch
u android-config-nfs.patch
u android-e680*-pcap.patch
u android-e680*-16bpp.patch
u android-framebuffer.patch
u android-touchscreen.patch
注:必须在步骤3)完成并且成功之后完成步骤4)!
5)在OpenEzx patchset的Makefile.openezx中以如下方法修正变量CROSS_COMPILE:
PHONES = e680*
CROSS_COMPILE ?= /home/arm-2007q3/bin/arm-none-linux-gnueabi-
在这里 我将我的tool chain放在了/home/arm-2007q3目录里,你可以随意改变。
6)在目录/home/android/linux-2.6.24下编译android kernel,使用如下命令:make –f patches/
Makefile.openezx
大约在半小时以后,你可以在/home/android/linux-2.6.24目录下看到zImage-e680*和modulese680*.
tar.gz
现在我们开始Android via NFS
A.解压android_nfs_root-m5-r14.bz2到移植文档指定目录
注:这个目录必须和置顶文档中的内核命令运行参数defoncif-e680*一致.这里我们使用/home/
android_nfs这个目录.
defconfig-e680*
这里我使用目录 /home/android_nfs
文件移植到E680
B.解压e680*.tar.fz所得内容到编译阶段相同文档目录android_nfs_root-m5-r14.bz2中.所得tar扩展名内
容解压到/home/android_nfs/lib目录
C.添加USB数据线到E680并且让手机进入mbm flash模式(画面为红色状态)
D.用us_boot软件启动内核到/home/下面.测试是否可以通过cmd./ezx_usb_boot zImage-e680*’这一命
令
核心上传到E680之后,你在E680的屏幕上看到核心正在加载.
屏幕会滚动的显示加载信息参数
E.大约几秒钟后,从LINUX终端主机通过命令参数'telnet telent 192.168.1.2'远程登陆E680电话
F.运行'./init'执行远程登陆到电话,你可以看到android字符串
G.运行'/system/bin/runtime',过会,你就能看到让人振奋的红色始终在屏幕上有左至右的做着循环.
然后大约2分钟左右,你可以看到让人感觉倍感亲近的android桌面.Rahman你可以通过手机的触摸屏开
始申请(拨号器,地图,浏览器等)
毫无疑问,如果你使用cmd_line命令修改默认的A1200的设置核心参数让android从SD卡启动的话,那么
android的启动程序会更快
现在,我修正android的键盘映射让摄像头的硬件来做打电话的键盘,同时让虚拟的硬件来结束电话.你可
以按一下E680导航键的中心的键位来选择返回到桌面上.
注:你可以选择用cmd_line命令来修改E680的默认参数使其更容易在mmc卡生成编译,同样你也必须修
改android系统根目录下/etc/init.rc文档
3.已知问题和现状
现状
l Android能正常加载.(android字符显示,红眼循环运行,Android桌面显示)
l 触摸屏可以在A1200/E680上工作
l 硬件(VR,摄像头,选择键)能够在部分A1200运行
l 个别主要程序请求(拨号器.地图,浏览器,联系人)可以从用户界面启动加载
l 声音不工作
问题:
l 显示屏颜色在A1200/A910使用18插针后在屏幕的面板上产生不错,但是android的变量文件系统使用16
位色
l 虽然触摸屏能用,但是还得校准
l 其他的硬件还是不工作
4. 原作者下面要做的工作
l BP MUX 在A1200上运行
l Implement RIL (Radio Interface Layer) 共享库,让GSM电话正常
l Android audio在A1200运行
l 按键功能在A1200上正常使用
l 触摸屏校准
l 解决A1200触摸屏颜色显示问题
5. 小技巧
l When building Android root file system by yourself, several critical dev nodes (/dev/binder,
/dev/log/main, /dev/log/radio, /dev/log/event) must be created correctly.
l If your touch screen does not work, you should check whether touch screen driver is assigned
to event1 via ‘cat /proc/bus/input/devices’ which Android application use /dev/input/event1 to
get touch driver info.
l You can modify /system/usr/keylayout/qwerty.kl file to change Android key mapping.
l You can use strace to debug during your porting.
6. 参考出处
[1] OpenEZX homepage -
[2] Google Android homepage -
[3] Benno’s engineering Blog - http://benno.id.au/blog/
[4] Android on Zaurus -
[5] Omegamoon Blog
http://www.omegamoon.com/blog/index.php?m=04&y=08&d=23&entry=entry080423-212550&cat
egory=1
[6]AndroidPortingOnRealTarget
7. 可用资源
1) OpenEZX-patchset.zip – OpenEZX patchset for 2.6.24-x.
2) android-patches.zip – android specific patches including
ü android-core.patch
ü android-config-nfs.patch
ü android-a1200-pcap.patch
ü android-a12000-16bpp.patch
ü android-framebuffer.patch
ü android-touchscreen.patch
3) android-nfs-root-m5r14.bz2 – Android NFS root file system package.
4) android_nfs_kernel – Android test kernel
5) modules-a1200.tar.gz – Android test modules package
6) busybox.config – busybox config file for NFS root file system.
阅读(1553) | 评论(0) | 转发(0) |