android 适配硬件平台

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)

  1. AndroidProducts.mk
    说明产品都需要编什么东西,定义产品使用哪个 mk 文件

  2. vendorsetup.sh
    加上某硬件的支持,以便编译前用 lunch 选择

  3. full_dream.mk
    定义产品所要编译的项目,指定需要编译哪些应用,产品名称,设备,型号(重要)

  4. BoardConfig.mk
    含 mtd 设备的分区,硬件相关的模块,及编译工具

  5. AndroidBoard.mk
    编译 kernel, bootload, nandwrite, 键值定义文件, 开机画面的说明,重要的是 kernel 的默认配置文件

KERNEL_DEFCONFIG

  1. device_*.mk
    相关具体硬件(美国版的 G1),

  2. overlay
    格式类似源码根目录,存在定制产生用到的资源

  3. .kl, .kcm
    键值定义

  4. *.sh
    辅助工具的脚本,如从 update.zip 中提取库

4. 编译某平台相关代码

  1. G1/G2
  1. 下载并编译 kernel

  2. 从手机或 update.zip 中提取 so 库

  3. 编译,烧写

  1. 其它机型
  1. 下载并编译 kernel

  2. 按 froyo 新规则添加硬件相关目录结构(vender=>device),修改 mk 文件

  3. 从手机或 update.zip 中提取 so 库

  4. 编译,烧写

5. 技巧

  1. 可以逐步替换 boot.img,system.img 以定位问题

  2. 逐个对比新旧 system 目录,以确认问题

  3. 先让 adb shell 可用,以便调试

  1. 重要的包
  1. boot.img:含 kernel 和基本的文件系统
    理论上说,只有 boot.img 而没有 system.img 也是可以启动并连接 adb 调试的,因为 adbd 在 boot.img

所含的基本文件系统中,但是需要重新定义 init.rc

  1. system.img:含主要系统,命令,库,图形界面

  2. userdata.img:放用户数据

  1. 启动顺序为 bootloader->kernel->system->launcher