Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300819
  • 博文数量: 43
  • 博客积分: 2071
  • 博客等级: 大尉
  • 技术积分: 488
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 17:48
文章分类

全部博文(43)

文章存档

2014年(5)

2013年(4)

2011年(9)

2010年(8)

2009年(17)

我的朋友

分类: LINUX

2010-05-01 18:06:35

这一周里用晚上的时间把Android 在 QQ2440 上跑起来了。
总体来说,不算太复杂。
--------
整个Porting 工作包括以下几个部分。
i. 升级 QQ2440 kernel 到 2.6.29 版本
ii. porting Android 在kernel 里相关的驱动
iii. 编译基于 armv4 的文件系统
下面具体介绍
--------
1. 升级 QQ2440 kernel 到 2.6.29 版本
我是希望用 Android 的 Eclair 版本,所以对应的 kernel 版本是 2.6.29.
升级有两种方法:
一种是利用 QQ2440 自带的 kernel 2.6.13 版本,由于该版本已经移植了QQ2440 的相关驱动,所以只需要将标准的kernel 的 2.6.13 和  2.6.29 的差异移植过来即可.
另一种方法是直接在 上下载标准的 2.6.29 版本, 然后把 QQ2440 的驱动移植过来.
我想接触更多的驱动移植, 所以选择了第二种方法.
关于驱动移植的具体步骤, 可以参考下面这篇文档, 我觉得很不错.
虽然它是基于 MINI2440 的, 但是与 QQ2440 在硬件上基本相同.

由于我的 QQ2440 只有64M 的存储空间, 所以我选择了用NFS.
关于NFS 的设置,可以参考我的一篇文章:
http://blog.chinaunix.net/u3/103613/showart_2222144.html

2. porting Android 在kernel 里相关的驱动
首先安装Git, 并下载2.6.29版本
git clone git://android.git.kernel.org/kernel/common.git

[root@localhost common]# git branch -a
  android-2.6.27
  origin/HEAD
  origin/android-2.6.25
  origin/android-2.6.27
  origin/android-2.6.29
  origin/android-2.6.32
  origin/android-goldfish-2.6.27
  origin/android-goldfish-2.6.29

git checkout origin/android-2.6.29 -b amuhong-2629
diff 一下获得与标准2.6.29 的差异,
git diff v2.6.29 HEAD > android.patch
文件:android.rar
大小:216KB
下载:下载


把patch copy 到我自己的 kernel 2.6.29目录下面,执行
patch -p1< android.patch

很顺利,没有任何冲突.

下面使能一些编译选项, 包括:
CONFIG_AEABI
CONFIG_ANDROID_PARANOID_NETWORK
CONFIG_ANDROID_PMEM
CONFIG_ANDROID
CONFIG_ANDROID_BINDER_IPC
CONFIG_ANDROID_LOGGER
CONFIG_ANDROID_LOW_MEMORY_KILLER
CONFIG_SHME
CONFIG_ASHME
CONFIG_ARM_THUM

由于我用的是NFS, 所以没有使能 YAFFS 的选项
编译 kernel, 烧到 QQ2440 扳子上.

3. 编译基于 armv4 的文件系统
由于S3C2440 用的是 armv4 指令集, 而 Android 编译系统用的是 armv5, 我虽然看到在 build/core/combo/arch/arm/ 里有armv4t.mk 文件.
但是我在将 build/core/combo/linux-arm.mk 里指定 armv4 后,编译时 log 显示目前这个选项不支持, 可能以后的 Andoid 版本可以支持.
修改Eclair 以使其支持 armv4 比较复杂, 我在网上搜了一些信息, 包括一些 patch, 但是都没有成功.
所以退而求其次, 我在下面的link 中下了一个别人编好的 armv4 的 Android 文件系统.


3.1 解压该文件, 把 system 目录拷贝到 root/ 下面, 覆盖空的 system.
data 做同样的操作.
然后把 root 作为 NFS.
3.2 在 init.rc 中有一行如下:
mount rootfs rootfs / ro remount
它是将根目录变为只读, 但是 /cache 是在根目录的, 所以需要注释掉它.
3.3 在 dev 目录下, 创建两个字符节点
mknod -m 660 null c 1 3
mknod -m 660 console c 5 1

4. 设置内核启动参数中的init=/init,既指向根目录下的init

5. reboot the board, try and enjor it.

阅读(2887) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-23 15:11:16

那个armv4的文件系统是cupcake的,不是eclair的,eclair要移植到2440上估计没戏了,新出的cpu越来越好,android估计不会再支持armv4了