2、开发环境搭建:AOSP源码下载、编译环境配置、模拟器与真机调试准备
做Camera HAL开发,环境搭建是第一道坎。
说实话,我见过太多新手卡在这一步。源码下到一半断了,编译报错看不懂,模拟器跑不起来。嗯,这些坑我都踩过。今天我把完整流程拆开揉碎了讲,你跟着做就行。
2.1 AOSP源码下载:别让网络坑了你
下载AOSP源码,说白了就是跟Google的服务器打交道。国内网络环境你懂的,直接repo sync大概率会断。
我的做法是这样的:
- 先装repo工具
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo - 初始化仓库
选一个稳定的分支。我个人习惯用android-13.0.0_r41,这个版本Camera HAL相对成熟。
mkdir aosp-13 cd aosp-13 repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41 - 同步源码
这里有个坑。直接repo sync -j4可能会卡死。我建议加个参数:
repo sync -j4 --force-sync --no-clone-bundle⚠️ 我曾经遇到过:同步到一半网络断了,重新跑repo sync时各种报错。后来发现加个--force-sync能强制覆盖本地冲突文件。另外,建议用screen或tmux挂后台,不然一关终端就白下了。
如果你在下载时遇到「无法连接到gerrit.googlesource.com」,别慌。试试清华或中科大的镜像:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r41
2.2 编译环境配置:Ubuntu 20.04 是最稳的
你想想看,AOSP编译对系统要求挺苛刻的。我试过Ubuntu 22.04,有些依赖包版本太高反而出问题。目前最稳的还是Ubuntu 20.04 LTS。
硬件要求:
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4核 | 8核以上 |
| 内存 | 16GB | 32GB |
| 磁盘 | 200GB | 500GB SSD |
| 系统 | Ubuntu 18.04 | Ubuntu 20.04 |
安装依赖包:
sudo apt-get update
sudo apt-get install -y git-core gnupg flex bison build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
嗯,这里要注意。Android 13开始需要Python 3.8以上。Ubuntu 20.04自带Python 3.8,刚好够用。如果你用Ubuntu 18.04,记得手动升级Python。
2.3 编译AOSP:第一次编译大概要2小时
环境配好了,开始编译。我个人习惯先编译一次完整的系统,后面改HAL模块时只编译模块,会快很多。
source build/envsetup.sh
lunch aosp_x86_64-eng
make -j$(nproc)
关键点:
aosp_x86_64-eng是模拟器用的。如果你要编译真机镜像,选对应的设备名,比如aosp_blueline-eng(Pixel 3)。-j$(nproc)表示用所有CPU核心编译。但如果你内存只有16GB,建议用-j4,不然容易OOM。- 第一次编译建议用eng版本,带debug工具,方便调试。
编译过程中如果报错,别慌。90%的情况是缺依赖包。看报错信息,缺什么装什么就行。
repo sync 重新同步一次,再 make clean && make。
2.4 模拟器调试:快速验证Camera HAL
编译完成后,启动模拟器:
emulator -writable-system -show-kernel
-writable-system 这个参数很重要。不加的话,你push进去的HAL库重启就没了。
模拟器调试Camera HAL的步骤:
- 编译你的HAL模块
mmm hardware/libhardware/modules/camera/ make -j4 - push到模拟器
adb root adb remount adb push out/target/product/generic_x86_64/system/lib64/hw/camera.*.so /system/lib64/hw/ adb reboot - 验证
adb shell dumpsys media.camera看输出里有没有你的HAL版本信息。
2.5 真机调试准备:解锁、刷机、root
真机调试才是Camera HAL开发的常态。我建议准备一台Pixel设备,兼容性最好。
准备工作:
- 解锁Bootloader
adb reboot bootloader fastboot flashing unlock注意:解锁会清空所有数据。记得先备份。
- 刷入编译好的镜像
fastboot flashall -w-w会清空data分区。如果你不想清,去掉这个参数。 - 获取root权限
eng版本默认就有root。如果是userdebug版本,需要:
adb root adb disable-verity adb reboot adb root adb remount
BOARD_AVB_ENABLE := false,或者用 fastboot flash vbmeta vbmeta.img --disable-verity。
2.6 调试工具链:你需要的都在这里
环境搭好了,工具也得备齐。我常用的调试工具清单:
| 工具 | 用途 | 安装方式 |
|---|---|---|
| adb | 设备通信、文件传输 | AOSP自带 |
| fastboot | 刷机、解锁 | AOSP自带 |
| logcat | 查看日志 | AOSP自带 |
| dumpsys | 查看系统服务状态 | AOSP自带 |
| strace | 跟踪系统调用 | adb shell strace |
| GDB | 调试native代码 | 交叉编译版本 |
我个人最常用的是logcat加grep过滤:
adb logcat -v threadtime | grep -E "Camera|HAL|hal"
这样只显示Camera相关的日志,不会刷屏。
2.7 避坑指南:我踩过的那些坑
总结一下常见问题:
- 源码下载慢:用国内镜像,或者晚上下载(避开高峰)。
- 编译报错:先看是不是缺包。缺包就装,装完记得
make clean。 - 模拟器起不来:检查KVM是否开启。运行
kvm-ok确认。 - 真机adb连不上:检查USB调试是否开启,驱动是否安装。
- push HAL库后不生效:确认
adb remount成功,或者直接刷入system.img。
环境搭建这块,说白了就是耐心活。我第一次搭环境花了整整两天,各种报错。但只要你按上面的步骤来,应该半天就能搞定。
下节课我们开始讲Camera HAL的架构。到时候我会结合代码,带你看看HAL层到底是怎么跟内核和Framework打交道的。