1. 相关硬件
电池,RTC,键值(普通键值,DOCKING键值),LED灯,背光,传感器(亮度,距离,速度,指南针等),振动,蓝牙,相机,音视频引擎,网络,显示,电话
2. 硬件相关的主要目录
kernel,vendor,device,hardware,bootable
3. 以HTC G1为例分析其主要的平台配置目录device/htc/dream/* (froyo源码)
1) 注意:froyo以前版本在vendor/htc中,需要单独下载,现在都已经在git里包含了g1,g2的支持。
2) 说明 (参见g1,g2)
a) AndroidProducts.mk
说明产品都需要编什么东西,定义产品使用哪个mk文件
b) vendorsetup.sh
加上某硬件的支持,以便编译前用lunch选择
c) full_dream.mk
定义产品所要编译的项目,指定需要编译哪些应用,产品名称,设备,型号(重要)
d) BoardConfig.mk
含mtd设备的分区,硬件相关的模块,及编译工具
e) AndroidBoard.mk
编译kernel, bootload, nandwrite, 键值定义文件, 开机画面的说明,重要的是kernel的默认配置文件KERNEL_DEFCONFIG
f) device_*.mk
相关具体硬件(美国版的G1),
g) overlay
格式类似源码根目录,存在定制产生用到的资源
h) *.kl, *.kcm
键值定义
i) *.sh
辅助工具的脚本,如从update.zip中提取库
4. 编译某平台相关代码
1) G1/G2
a) 下载并编译kernel
b) 从手机或update.zip中提取so库
c) 编译,烧写
2) 其它机型
a) 下载并编译kernel
b) 按froyo新规则添加硬件相关目录结构(vender=>device),修改mk文件
c) 从手机或update.zip中提取so库
d) 编译,烧写
5. 技巧
1) 可以逐步替换boot.img,system.img以定位问题
2) 逐个对比新旧system目录,以确认问题
3) 先让adb shell可用,以便调试
a) 重要的包
i. boot.img:含kernel和基本的文件系统
理论上说,只有boot.img而没有system.img也是可以启动并连接adb调试的,因为adbd在boot.img所含的基本文件系统中,但是需要重新定义init.rc
ii. system.img:含主要系统,命令,库,图形界面
iii. userdata.img:放用户数据
b) 启动顺序为bootloader->kernel->system->launcher