这一周里用晚上的时间把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.29git checkout origin/android-2.6.29 -b amuhong-2629diff 一下获得与标准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_AEABICONFIG_ANDROID_PARANOID_NETWORKCONFIG_ANDROID_PMEMCONFIG_ANDROIDCONFIG_ANDROID_BINDER_IPCCONFIG_ANDROID_LOGGERCONFIG_ANDROID_LOW_MEMORY_KILLERCONFIG_SHMECONFIG_ASHMECONFIG_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 3mknod -m 660 console c 5 14. 设置内核启动参数中的init=/init,既指向根目录下的init5. reboot the board, try and enjor it.
阅读(2922) | 评论(1) | 转发(0) |