编译在 G1 上运行的 android 2.2(froyo) 代码 _ 山寨版

一、说明

1. 下载编译最基本的 android 源码,无法在真机上使用(不能生成 boot.img

),只能在模拟器上使用。这是因为没有编译相关机型的内核和硬件驱动。以下介绍的是用 android 源码编译出对应 HTC G1

的版本,和烧写的过程。编译生成的版本绝大部分功能都能正常使用(电话,短信,上网,音乐,软件安装等正常使用,SD 卡还不能自动挂载,正在修改之中),在

G1 上运行 2.2 版稳定性不错,也很顺畅。

2. 本文主要参考编译 android 2.1 的日文文档 G1/G2 烧机指南,感谢原文作者,原文地址: [http://code.google.com/p/android-development-

environment/wiki/EclaironADP1andADP2](http://code.google.com/p/android-

development-environment/wiki/EclaironADP1andADP2)
同时加入中文系统的支持和 2.2 部分相关修改,以及相关文字解释。

3. 以下步骤都经过验证(只验证 G1 手机),实验系统 ubuntu8.04,实验日期 2010 年 7 月 2 日

4. 关键字: android 2.2 froyo g1 源码编译

二、编译

1. 建立 android 源码编译目录
_ $ export ANDROID=/exports/android/android_2.2/
$ mkdir -p $ANDROID
$ cd $ANDROID _

2. 源码下载
_ $ repo init -u git://android.git.kernel.org/platform/manifest.git -b

android-2.2_r1#设定下载 2.2 版代码 _
_ $ vi.repo/local_manifest.xml # _ 新建下载配置文件
编辑内容如下
_

_
注意:其中 msm 是高通芯片组,path 指明下载到源码目录中的位置,name 指明 git 上的项目名
_ $ repo sync # 开始下载代码,此时需要等待较长时间 _

3. 编译内核及无线网络驱动
_ $ cd $ANDROID/kernel
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-

eabi-4.4.0/bin/arm-eabi- msm_defconfig # 设定默认的 msm 配置 _
_ $ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-

eabi-4.4.0/bin/arm-eabi- # _ 编译内核
_ $ cd $ANDROID/system/wlan/ti/sta_dk_4_0_4_32
$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-

eabi-4.4.0/bin/arm-eabi- KERNEL_DIR=$ANDROID/kerne l _ #编译无线网络驱动
_ $ cp $ANDROID/kernel/arch/arm/boot/zImage $ANDROID/vendor/htc/dream-

open/kernel
$ cp $ANDROID/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko

$ANDROID/vendor/htc/dream-open/wlan.ko _

4. 编译 android 源码
在 HTC 网站 [http://developer.htc.com/adp.html

](http://developer.htc.com/adp.html)
下载名为 signed-dream_devphone_userdebug-ota-14721.zip 的包,并把它放在 _ $ANDROID 目录下

_
_ $ cd $ANDROID
$ source build/envsetup.sh
$ lunch aosp_dream_us-eng # _ 指明机型
_ $ cd vendor/htc/dream-open
$./unzip-files.sh _ #解压 htc 相关驱动
_ $ cd $ANDROID
$ vi buildspec.mk _ #新建配置文件
加入如下内容
_ CUSTOM_LOCALES:=zh_CN # _ 设置编译为中文系统
_ $ vi build/core/prebuild.mk
_ _ 注掉第 59 行 ($error No LOCAL_CERTIFICATE……)

,否则编不过,这是由于对硬件部分的一个包的签名检测不过引起的(硬件部分的代码已经很久没更新了)_
_ $ vi device/htc/dream-sapphire/libsensors/Android.mk
_ _ 将第 39 行,改为 LOCAL_MODULE:=sensor.trout1

,否则编不过,这是由于硬件部分的模块名与源码中自带的模块名冲突引起 _
_ $ vi hardware/msm7k/libaudio/Android.mk
_ _ 在第 29 行 (CLEAR_VARS 之后),加入 LOCAL_PRELINK_MODULE:=false,

否则,系统无法运行,启动时会报错“failed to link libandroid_servers.so” _
_ $ make -j4 _ #编译 android 源码,需要等待较长时间
_ $ mmm -B $ANDROID/packages/apps/Luancher2/ snod # _

编译桌面程序,否则桌面将无法启动,系统总停在开机动画
_ $mmm -B $ANDROID/framework/base/packages/DefaultContainerService/ snod # _

_ 编译 ContainerService,否则无法安装软件 _

三、把编译好的软件烧写到手机

用 usb 线连接手机到电脑,按 home+power 键将手机启动到工程模式,按 back 键准备烧写
_ $ export PATH=\(PATH:\)ANDROID/out/host/linux-x86/bin # _ 把烧写工具所在目录加上路径
_ $ cd out/target/product/dream-open/
$ fastboot flash system system.img
$ fastboot flash boot boot.img
$ fastboot reboot _
烧写系统后第一次启动手机需要几分钟,请耐心等

四、修改

1. 支持 SD 卡
_ $ adb remount
$ adb push $ANDROID/system/core/rootdir/etc/vold.fstab /etc/ _
烧写手机后 SD 卡没有挂载是由于没有找到配置文件,将挂载服务 vold 所需的配置文件 vold.fstab 写入手机即可,然后重启即可.
注意,你的 SD 卡最好只含一个 fat 格式分区,如果之前自己配置过早期的 APP2SD,分有 ext2 分区,可能出现卡不被识别的情况

.

2. 支持 GPRS 上网
添加 APN 即可上网和发彩信,详见 [http://www.andbeta.com/Basics/678.html

](http://www.andbeta.com/Basics/678.html)

3. 支持 APP2SD
_ $ adb shell

pm setInstallLocation 2 _

重启之后,程序即被安装到 SD 卡上

五、参考

1. 刷写部分未详细描述,具体请参考文档
[http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1452.entry

](http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1452.entry)

2. 源码编译部分未详细描述,具体请参考文档
[http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1364.entry

](http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1364.entry)

注意:以上灰色标出的是与编译 éclair 不同的部分

(转载请注明作者及出处 [http://xy0811.spaces.live.com

](http://xy0811.spaces.live.com/))