本文是针对Android5.1、8.1、9.0版本的camera调试,log相关的配置做一个记录。如有错误,请交流指正。
调试 打开 kernel cam log
用于观察上电时序,match_id 匹配ID,CCI读写。
Camera 打开关键的 kernel log (以8953平台为例)
路径:
kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/io/msm_camera_dt_util.c
kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_init.c
代码如:
-#define CDBG(fmt, args...) pr_debug(fmt, ##args)
+#define CDBG(fmt, args...) pr_err(fmt, ##args) // 提高log打印等级
查看 可以使能的上层 cam module
路径:
vendor\qcom\proprietary\mm-camera\mm-camera2\includes\camera_dbg.h
代码如:
typedef enum {
CAM_NO_MODULE,
CAM_MCT_MODULE,
CAM_SENSOR_MODULE,
CAM_IFACE_MODULE,
CAM_ISP_MODULE,
CAM_PPROC_MODULE,
CAM_IMGLIB_MODULE,
CAM_CPP_MODULE,
CAM_HAL_MODULE,
CAM_JPEG_MODULE,
CAM_C2D_MODULE,
CAM_STATS_MODULE,
CAM_STATS_AF_MODULE,
CAM_STATS_AEC_MODULE,
CAM_STATS_AWB_MODULE,
CAM_STATS_ASD_MODULE,
CAM_STATS_AFD_MODULE,
CAM_STATS_Q3A_MODULE,
CAM_STATS_IS_MODULE,
CAM_STATS_HAF_MODULE,
CAM_STATS_CAF_SCAN_MODULE,
CAM_SHIM_LAYER,
CAM_LAST_MODULE
} cam_modules_t;
查看 当前使能的上层 cam log
adb指令:
adb shell getprop | grep "camera"
adb shell getprop | find "camera" // android5.1 用 find
查看 当前使能的上层 cam log 的等级
路径:
vendor\qcom\proprietary\mm-camera\mm-camera2\log_debug\android\camera_dbg.c
代码如:
框架定义了如下6个 log 级别, INFO 级别不可控,是一定会打印的。
/* string representation for logging level */
static const char *cam_dbg_level_to_str[] = {
"", /* CAM_GLBL_DBG_NONE */
"<ERROR>", /* CAM_GLBL_DBG_ERR */
"< WARN>", /* CAM_GLBL_DBG_WARN */
"< HIGH>", /* CAM_GLBL_DBG_HIGH */
"< DBG>", /* CAM_GLBL_DBG_DEBUG */
"< LOW>", /* CAM_GLBL_DBG_LOW */
"< INFO>" /* CAM_GLBL_DBG_INFO */
};
/* values that persist.vendor.camera.global.debug can be set to */
/* all camera modules need to map their internal debug levels to this range */
typedef enum {
CAM_GLBL_DBG_NONE = 0,
CAM_GLBL_DBG_ERR = 1,
CAM_GLBL_DBG_WARN = 2,
CAM_GLBL_DBG_HIGH = 3,
CAM_GLBL_DBG_DEBUG = 4,
CAM_GLBL_DBG_LOW = 5,
CAM_GLBL_DBG_INFO = 6
} cam_global_debug_level_t;
调试 使能 HAL cam log
开机状态,用这些命令设置之后就生效了,重启依旧有效,刷机后设置消失
adb shell setprop persist.camera.hal.debug.mask 536870915 // Android 8.0
或者
// HAL-3 Android9.0
adb shell setprop persist.vendor.camera.hal.debug 3
调试 抓取 cam 上层 log
这个抓log不会停,会一直抓。
adb logcat –v time –b main –b system > log.log
调试 设置 cam module log
全局debug log 等级配置
persist.camera.global.debug
数值:0-5 // [-- 数字越小等级越高 --]
功能: 设置不同的数值,将打印对应级别的log。该属性是总的log级别开关。
注意: 若子模块的log级别小于该属性设置值,则以该属性为准;若子模块的log 级别大于该属性设置值,则以子模块设置的log级别为准。
代码如:
adb shell setprop persist.camera.global.debug 5
或者(android5/8 和android9.0 之间的属性设置会差一个“vendor”)
adb shell setprop persist.vendor.camera.global.debug 5
调试 设置 cam module log Android8.0
// android 8 开启 camera logcat 等级
adb shell setprop persist.camera.sensor.debug 3
adb shell getprop persist.camera.sensor.debug // 查看当前等级
!!! 常用的 camera debug 属性
// 参考链接: https://blog.csdn.net/liaochaoyun/article/details/89671195
// 可能实际代码有出入 具体请参考实际代码设置
// 以 android 8.1 为例 参考以下路径
// QCameraParameters.cpp 8909_APP_O\hardware\qcom\camera\QCamera2\HAL
全局debug log 属性
1. adb shell setprop persist.vendor.camera.sensor.debug 3
2. adb shell setprop persist.vendor.camera.global.debug 3
ISP LOG
3. adb shell setprop persist.camera.ISP.debug.mask 3
查看 cam module log 等级定义
路径:
camera_dbg.h vendor\qcom\proprietary\mm-camera\mm-camera2\includes
代码如:
typedef enum {
CAM_NO_MODULE,
CAM_MCT_MODULE,
CAM_SENSOR_MODULE,
CAM_IFACE_MODULE,
CAM_ISP_MODULE,
CAM_PPROC_MODULE,
CAM_IMGLIB_MODULE,
CAM_CPP_MODULE,
CAM_HAL_MODULE,
CAM_JPEG_MODULE,
CAM_C2D_MODULE,
CAM_STATS_MODULE,
CAM_STATS_AF_MODULE,
CAM_STATS_AEC_MODULE,
CAM_STATS_AWB_MODULE,
CAM_STATS_ASD_MODULE,
CAM_STATS_AFD_MODULE,
CAM_STATS_Q3A_MODULE,
CAM_STATS_IS_MODULE,
CAM_STATS_HAF_MODULE,
CAM_STATS_CAF_SCAN_MODULE,
CAM_SHIM_LAYER,
CAM_LAST_MODULE
} cam_modules_t;
设置各模块 LOG 等级,数字越小等级越高
/* values that persist.vendor.camera.global.debug can be set to */
/* all camera modules need to map their internal debug levels to this range */
typedef enum {
CAM_GLBL_DBG_NONE = 0,
CAM_GLBL_DBG_ERR = 1,
CAM_GLBL_DBG_WARN = 2,
CAM_GLBL_DBG_HIGH = 3,
CAM_GLBL_DBG_DEBUG = 4,
CAM_GLBL_DBG_LOW = 5,
CAM_GLBL_DBG_INFO = 6
} cam_global_debug_level_t;
实测
adb shell setprop persist.camera.global.debug x // 设置log等级
adb shell getprop persist.camera.global.debug // 查看log等级
查看 cam module log 关键字
LOG-keyword // 关键字
1. 打开相机
CAM_PhotoModule: onCameraOpened
2. 获取到的camera配置信息
sensor_get_resolution_info: sensor info: name:
3. 帧冻结错误
mm-camera: <MCT><ERROR> 98: mct_bus_sof_thread_run: FATAL Session 1: SOF Freeze! Sending error message
mm-camera: <MCT >< INFO> 133: mct_bus_sof_thread_run: Sending HW_ERROR from MCT on session =1
mm-camera: <MCT ><ERROR> 817: mct_controller_send_cb: FATAL: Sending HW_Error
Camera : Error 100
4.帧冻结错误-关键字
I QCamera : <HAL><INFO> start_preview: 394: [KPI Perf]: X ret = 0