您的位置:首页 > 移动开发 > Android开发

Android系统介绍与移植

2009-08-13 17:32 573 查看
成功移植Google Android操作系统至摩托E680【转】
2009-02-09 12:12

小E真是太太太太太(省略n个太)强大了!!!

不只能在DOS下模拟WIN,还能用OPIE,QTOPIA。。。

当然都不太成熟啦。。。


不过强大就强大!现在android也弄起来啦,不知道发展下去会成啥样,期待啊~

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)

下载链接http://code.google.com/p/android/downloads/list

Android Root 文件系统,获取自SDK。

下载链接http://code.google.com/android/download_list.html

获得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做一

个对比。地址:http://elinux.org/Android_on_OMAP

现在没有在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下载地址

http://www.codesourcery.com/gnu_toolchains/arm/download.html

你应该下载arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar !

其他的不要下载!

Patch tool:

我们需要OpenEzx 2.6.24.x-补丁设置工具去升级A1200的kernel。

下载地址:http://savannah.nongnu.org/projects/quilt

USB Boot:

OpenEzx开发的一个工具,使得你可以使用USB去启动kernel。

下载0.2版本:http://svn.openezx.org/trunk/src/host/boot_usb/

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

http://www.kernel.org/pub/linux/kernel/v2.6/

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 - http://www.openezx.org/

[2] Google Android homepage - http://code.google.com/android/

[3] Benno’s engineering Blog - http://benno.id.au/blog/

[4] Android on Zaurus - http://androidzaurus.seesaa.net/article/74237419.html

[5] Omegamoon Blog

http://www.omegamoon.com/blog/in ... 0423-212550&cat

egory=1

[6]AndroidPortingOnRealTarget

http://wiki.kldp.org/wiki.php/An ... ealTarget?refresh=1

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.




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: