一、 说明
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
同时加入中文系统的支持和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
下载名为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
3. 支持APP2SD
$ adb shell
# pm setInstallLocation 2
重启之后,程序即被安装到SD卡上
五、 参考
1. 刷写部分未详细描述,具体请参考文档
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1452.entry
2. 源码编译部分未详细描述,具体请参考文档
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1364.entry
注意:以上灰色标出的是与编译éclair不同的部分
http://code.google.com/p/android-development-environment/wiki/EclaironADP1andADP2
同时加入中文系统的支持和2.2部分相关修改,以及相关文字解释。
$ export ANDROID=/exports/android/android_2.2/
$ mkdir -p $ANDROID
$ cd $ANDROID
$ 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 # 开始下载代码,此时需要等待较长时间
$ 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
在HTC网站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,否则无法安装软件
$ 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
烧写系统后第一次启动手机需要几分钟,请耐心等
$ adb remount
$ adb push $ANDROID/system/core/rootdir/etc/vold.fstab /etc/
烧写手机后SD卡没有挂载是由于没有找到配置文件,将挂载服务vold所需的配置文件vold.fstab写入手机即可,然后重启即可.
注意,你的SD卡最好只含一个fat格式分区,如果之前自己配置过早期的APP2SD,分有ext2分区,可能出现卡不被识别的情况.
添加APN即可上网和发彩信,详见http://www.andbeta.com/Basics/678.html
$ adb shell
# pm setInstallLocation 2
重启之后,程序即被安装到SD卡上
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1452.entry
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1364.entry
(转载请注明作者及出处http://xy0811.spaces.live.com)