2. Camera HAL开发环境搭建:Android源码下载、Camera HAL模块编译、adb调试环境配置

搭建稳定、可复现的Camera HAL开发环境是进行参数配置与调试工作的前提。本章将系统讲解从Android源码获取、Camera HAL模块独立编译,到adb调试链路验证的完整流程,帮助开发者建立高效的本地开发闭环。

环境概览: 推荐使用Ubuntu 20.04 LTS或22.04 LTS作为宿主系统,磁盘剩余空间至少250GB(含源码与编译产物),内存建议16GB以上。

2.1 Android源码下载与版本选择

Camera HAL作为Android系统的一部分,其源码随AOSP(Android Open Source Project)一起发布。选择正确的源码分支是后续编译与调试的基础。

2.1.1 分支选择策略

Android版本 API Level Camera HAL主要变更 推荐场景
Android 12 (S) 31 HAL3强制、CameraX集成 中端设备调试
Android 13 (T) 33 HIDL转AIDL、多摄框架增强 主流开发学习
Android 14 (U) 34 Ultra HDR、Camera HAL V4 最新特性验证

2.1.2 使用repo工具下载源码

AOSP采用多仓库管理,必须使用repo工具进行同步。以下为完整操作步骤:

  1. 安装repo工具:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
  1. 初始化指定分支(以android-13.0.0_r41为例):
mkdir ~/aosp-13
cd ~/aosp-13
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
repo sync -c -j8  # -c仅下载当前分支,-j8并行任务数
网络注意事项: 国内开发者建议使用清华或中科大AOSP镜像源。将repo init中的URL替换为https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest,可显著提升下载速度。
  1. 验证源码完整性:
cd ~/aosp-13
repo status
# 确认所有仓库均显示为"clean"状态
AOSP源码下载流程 安装repo工具 repo init初始化 repo sync同步 验证完整性 关键参数说明 -b 指定分支 | -jN 并行任务数 | -c 仅下载当前分支(节省空间) 国内镜像:https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

2.2 Camera HAL模块编译

Camera HAL模块位于hardware/interfaces/camera或hardware/qcom/camera(高通平台)等路径下。掌握独立编译方法可大幅缩短开发迭代周期。

2.2.1 编译环境初始化

cd ~/aosp-13
source build/envsetup.sh
lunch aosp_arm64-userdebug  # 选择目标设备
lunch目标选择: 开发调试阶段建议使用userdebug或eng版本,它们保留root权限与调试工具。user版本会移除adb root等关键功能。

2.2.2 全编译与模块编译对比

编译方式 命令 耗时(参考) 适用场景
全编译 make -j16 2~4小时 首次搭建、系统级变更
模块编译 make camera.hal -j16 5~15分钟 HAL代码修改、日常调试
单文件编译 mm(在模块目录下) 1~3分钟 快速验证语法与逻辑

2.2.3 Camera HAL模块独立编译步骤

  1. 定位模块目录:
cd hardware/interfaces/camera
# 或针对高通平台:
cd hardware/qcom/camera
  1. 查看模块注册名称:
grep -r "LOCAL_MODULE" Android.bp Android.mk 2>/dev/null
# 输出示例:LOCAL_MODULE := camera.hal
  1. 执行模块编译:
source build/envsetup.sh
lunch aosp_arm64-userdebug
make camera.hal -j16
  1. 确认编译产物:
ls -l out/target/product/generic_arm64/vendor/lib/hw/camera.*.so
# 或
ls -l out/target/product/generic_arm64/vendor/lib64/hw/camera.*.so
编译加速技巧: 使用ccache缓存编译中间文件。在~/.bashrc中添加export USE_CCACHE=1和export CCACHE_DIR=~/.ccache,首次编译后后续增量编译可提速50%以上。
Camera HAL模块编译流程 source build/envsetup.sh lunch 目标设备 cd camera模块目录 make camera.hal 编译产物路径 out/target/product/<device>/vendor/lib(64)/hw/camera.*.so 验证:adb push & 重启 cameraserver

2.3 adb调试环境配置

adb(Android Debug Bridge)是连接开发主机与目标设备的核心工具。Camera HAL调试依赖adb进行文件推送、日志捕获与服务控制。

2.3.1 adb工具安装与版本确认

# 安装adb(Ubuntu)
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot

# 确认版本(建议 ≥ 1.0.41)
adb version

2.3.2 设备连接与权限配置

  1. USB连接与识别:
adb devices
# 若显示"unauthorized",需在设备上确认USB调试授权
# 若显示"no permissions",需配置udev规则
  1. 配置udev规则(解决权限问题):
# 创建规则文件
sudo vim /etc/udev/rules.d/51-android.rules

# 添加内容(以Google设备为例)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
  1. 常用adb调试命令速查:
命令 功能 Camera HAL调试用途
adb root 以root权限重启adbd 获取vendor分区写入权限
adb remount 重新挂载分区为可读写 替换HAL库文件
adb push 推送文件到设备 部署编译好的camera HAL .so
adb pull 从设备拉取文件 获取HAL日志或dump文件
adb logcat -s CameraHAL 过滤Camera HAL日志 实时监控HAL行为
adb shell killall cameraserver 重启cameraserver进程 加载新HAL库

2.3.3 验证调试链路

完成上述配置后,执行以下命令验证整个调试链路是否畅通:

# 1. 确认设备在线
adb devices
# 输出示例:0123456789ABCDEF    device

# 2. 获取root权限
adb root
# 输出:restarting adbd as root

# 3. 重新挂载分区
adb remount
# 输出:remount succeeded

# 4. 推送测试文件
echo "test" > /tmp/test_hal.txt
adb push /tmp/test_hal.txt /vendor/lib/hw/
# 输出:/vendor/lib/hw/test_hal.txt: 1 file pushed

# 5. 验证文件存在
adb shell ls -l /vendor/lib/hw/test_hal.txt
常见问题排查:
  • adb devices显示offline: 重新插拔USB线,或执行adb kill-server && adb start-server。
  • adb remount失败: 确认设备已解锁bootloader,且当前为userdebug/eng版本。
  • 推送后HAL未生效: 执行adb shell killall cameraserver强制重启相机服务进程。
adb调试链路验证流程 开发主机 adb devices USB Android设备 USB调试已授权 adb root adb remount 验证检查点 ✓ adb devices → device ✓ adb root → restarting as root ✓ adb remount → remount succeeded ✓ adb push → 1 file pushed ✓ adb shell ls → 文件存在

2.4 开发环境快速验证清单

完成上述所有步骤后,建议执行以下清单确认环境就绪:

检查项 验证命令 预期结果
源码完整性 repo status 所有仓库clean
编译环境 which m && echo $ANDROID_PRODUCT_OUT 输出有效路径
模块编译 make camera.hal -j4 2>&1 | tail -5 包含"#### build completed"
设备连接 adb devices 显示device状态
root权限 adb root && adb shell id uid=0(root)
分区可写 adb remount && adb shell touch /vendor/test 无错误输出
环境就绪标志: 当你能在5分钟内完成"修改HAL代码 → 模块编译 → adb push → 重启cameraserver → logcat查看效果"这一完整闭环时,说明开发环境已搭建成功,可以进入下一阶段的参数配置学习。