2、开发环境搭建与调试工具链:MTK平台Camera调试工具(Meta Tool、Camera Tool、Logcat)、ADB常用命令、dump raw图方法
2.1 调试工具链全景概览
MTK Camera HAL层开发调试依赖一套完整的工具链,覆盖从底层寄存器读写、ISP参数调优到上层应用日志分析的全链路。掌握这些工具的使用是解决Camera问题的基本功。
核心调试工具矩阵
| 工具名称 | 主要用途 | 调试层级 | 连接方式 |
|---|---|---|---|
| Meta Tool | 底层寄存器读写、NVRAM参数校准、EEPROM烧录 | Kernel / Sensor Driver | USB + META模式 |
| Camera Tool | ISP参数调优、3A算法调试、效果图预览 | HAL / ISP Pipeline | USB + ADB Forward |
| Logcat | HAL层日志、Framework层日志、错误栈捕获 | HAL / Framework | ADB |
| ADB | 设备控制、文件传输、dump raw图、属性设置 | 全层级 | USB / TCP/IP |
2.2 Meta Tool 使用详解
Meta Tool 是 MTK 平台最底层的调试工具,用于直接操作 Camera 模组的寄存器、读取/写入 NVRAM 校准数据、烧录 EEPROM 等。在 HAL 层开发中,当遇到 sensor 无法点亮、ID 读取失败、OTP 数据异常等问题时,Meta Tool 是首选排查工具。
2.2.1 连接步骤
- 设备进入 META 模式:关机状态下按住 音量上键 + 电源键,或通过
adb reboot meta命令(部分平台支持)。 - 连接 USB 线,打开 Meta Tool,选择对应的 COM 端口(设备管理器查看)。
- 点击 Connect,状态栏显示
META Connected表示成功。 - 在 Chip Select 中选择对应的 Camera 模组(如 IMX586、OV64B 等)。
注意:META 模式下设备不启动 Android 系统,仅运行底层通信协议栈。如果设备无法进入 META 模式,请检查 bootloader 是否支持或尝试使用
fastboot oem meta 命令。
2.2.2 常用功能
| 功能模块 | 操作路径 | 典型场景 |
|---|---|---|
| Sensor ID 读取 | Sensor → Read Register | 确认 sensor 是否正常通信 |
| NVRAM 读写 | NVRAM Editor → Camera | 校准数据异常导致效果问题 |
| EEPROM 烧录 | EEPROM → Write | 更换模组后写入校准数据 |
| GPIO 控制 | GPIO → Set/Get | 排查供电/复位/使能信号 |
| I2C 通信测试 | I2C → Read/Write | 验证 sensor 寄存器读写通路 |
2.3 Camera Tool 使用详解
Camera Tool 是 MTK 平台 ISP 调优的核心工具,用于实时调整 3A(AE/AWB/AF)参数、预览效果图、dump 中间数据。HAL 层开发中,当遇到曝光异常、白平衡偏色、对焦不准等问题时,Camera Tool 是最高效的调试手段。
2.3.1 连接与配置
- 确保设备已 root 并开启 ADB 调试。
- 执行 ADB 端口转发:
adb forward tcp:1234 tcp:1234(端口号根据平台版本可能不同)。 - 打开 Camera Tool,在 Connection 中选择 TCP,输入
127.0.0.1:1234。 - 点击 Connect,工具界面显示实时预览流即表示成功。
2.3.2 核心调试面板
- Preview Window:实时显示 Camera 预览画面,支持缩放、冻结、保存为 BMP。
- 3A Tuning:手动调节 AE Target、AWB Gain、AF 位置等参数,观察实时效果。
- ISP Debug:查看 ISP Pipeline 各模块的中间输出,如 BPC、NR、EE 等。
- Sensor Control:直接设置 sensor 的曝光时间、增益、帧率等寄存器。
- Log Viewer:实时显示 HAL 层输出的调试日志,支持过滤和导出。
调试技巧:当预览画面出现闪烁或条纹时,使用 Camera Tool 的 Flicker Detection 功能可以快速判断是否为 50Hz/60Hz 频闪问题,并自动推荐对应的 AE 参数。
2.4 ADB 常用命令
ADB(Android Debug Bridge)是 Camera HAL 开发中使用频率最高的命令行工具,用于设备控制、文件传输、日志捕获、属性设置等。以下是在 Camera 调试中最高频使用的命令集合。
| 命令 | 用途 | 示例 |
|---|---|---|
adb devices |
查看已连接的设备列表 | adb devices → 显示设备序列号 |
adb logcat -c |
清除旧日志缓冲区 | 在开始抓取前执行 |
adb logcat -v time -s CameraHal |
按时间戳过滤 CameraHal 标签日志 | adb logcat -v time -s CameraHal > hal.log |
adb shell setprop |
设置系统属性,控制调试开关 | adb shell setprop persist.vendor.camera.dump 1 |
adb shell getprop |
读取系统属性值 | adb shell getprop | grep camera |
adb pull |
从设备拉取文件到本地 | adb pull /data/vendor/camera_dump/ . |
adb push |
推送本地文件到设备 | adb push libcamera_hal.so /vendor/lib64/ |
adb shell dumpsys media.camera |
查看 Camera 服务状态和 session 信息 | 排查 HAL 服务是否正常注册 |
adb shell killall cameraserver |
重启 Camera 服务进程 | 修改 HAL 配置后快速生效 |
2.5 Dump Raw 图方法
Raw 图是 Camera 调试中最关键的数据源,包含了 sensor 输出的原始像素数据,未经 ISP 处理。通过分析 Raw 图可以判断 sensor 硬件是否正常、Bayer 排列是否正确、是否有坏点、暗电流水平等。MTK 平台提供多种 dump Raw 图的方式。
2.5.1 方法一:通过 HAL 层属性开关(推荐)
在 MTK Camera HAL 中,通常预置了 dump Raw 图的属性开关,无需修改代码即可启用。
# 开启 Raw dump(通常需要 root 权限)
adb shell setprop vendor.debug.camera.dump.raw 1
# 设置 dump 帧数(可选,默认 1 帧)
adb shell setprop vendor.debug.camera.dump.raw.count 5
# 启动 Camera 应用,拍照或预览
# Raw 图默认保存在 /data/vendor/camera_dump/ 目录下
# 文件名格式:raw_<sensor_id>_<frame_number>.raw
# 拉取到本地分析
adb pull /data/vendor/camera_dump/ .
2.5.2 方法二:通过 Camera Tool 的 Dump 功能
- 连接 Camera Tool 并建立预览。
- 在 ISP Debug 面板中,选择 Raw Dump 选项卡。
- 设置 dump 的帧数和输出路径(默认保存到设备
/sdcard/)。 - 点击 Start Dump,工具会自动捕获指定帧数的 Raw 数据。
- 通过
adb pull /sdcard/raw_dump/拉取到本地。
2.5.3 方法三:通过 ADB 直接读取 sensor 寄存器
适用于底层验证,不依赖 HAL 层逻辑,直接通过 I2C 读取 sensor 输出。
# 使用 MTK 提供的 i2c_read 工具(需预置在设备中)
adb shell i2c_read 0x34 0x0012 # 读取 sensor ID 寄存器
# 或者通过 /sys/class/i2c-dev/ 节点操作
adb shell cat /sys/class/i2c-dev/i2c-1/device/1-0034/raw_data
Raw 图分析工具推荐:
- RawViewer(MTK 官方):支持 Bayer 排列显示、坏点标注、统计直方图。
- dcraw(开源):命令行工具,可将 Raw 图转换为 TIFF/PPM 格式。
- Python + numpy:自定义脚本分析 Raw 数据,适合批量处理。
2.6 调试流程最佳实践
在实际开发中,建议按照以下流程进行问题排查,避免盲目操作:
经验总结:80% 的 Camera 问题可以通过 Logcat + ADB 组合定位到模块级别,再使用 Meta Tool 或 Camera Tool 进行精确验证。不要一开始就修改代码,先通过工具确认问题边界。