一、  说明

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,实验日期201072

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://xy0811.spaces.live.com)

 

posted on 2010-07-03 09:37  xieyan0811  阅读(21)  评论(0编辑  收藏  举报