这一周里用晚上的时间把Android 在 QQ2440 上跑起来了。
总体来说,不算太复杂。
--------
整个Porting 工作包括以下几个部分。
我是希望用 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 在硬件上基本相同.
99.html
由于我的 QQ2440 只有64M 的存储空间, 所以我选择了用NFS.
关于NFS 的设置,可以参考我的一篇文章:
首先安装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
把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 扳子上.
由于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
阅读(1649) | 评论(0) | 转发(1) |