Android相机启动crash错误排查
一个android的用到相机的service程序,在比较少的情况下会出现在系统启动时crash。log显示是在调用acameradevice_createcapturesession时返回错误acamera_error_stream_configure_fail(这个程序是用jni操作相机的),configure的宽高都是0。再看前面mct线程开启camera的模块的地方,正常应该有6个模块,sensor,iface,isp,stats,pproc,imglib,出错的log只开启了5个,少了最重要的sensor模块。
出错的时候mct没有正常开启sensor模块,没看到任何输出,怀疑sensor这个module根本就没有传给mct。camera的daemon入口在/vendor/qcom/proprietary/mm-camera/mm-camera2/server-imaging/server.c的main函数,会调用server_process_module_sensor_init()初始化sensor,调用server_process_module_init()初始化其他module。然后主循环处理hal事件,如果是camera new session,会一路调用server_process_hal_event()->mct_controller_new()->mct_pipeline_start_session()去开启所有的模块,为每个模块单独启动线程。
server_process_module_sensor_init()会调用sensor自己的初始化函数module_sensor_init()去初始化sensor。server_process_module_sensor_init()只有在把sensor加入module list的时候出错了才会返回false。即使module_sensor_init()失败了,也只是没有把sensor加入到module list,还是会返回true。所以基本上可以确认是sensor初始化失败了。
这应该属于系统出错了,而不是出在我们的程序。再查kernel log,终于发现csid初始化失败了。
09-30 08:06:56.936 0 0 e msm_csid_init: 587 msm_csid_reset failed
默认的csid reset的timeout是100 ms。怀疑硬件上的改动导致reset时间可能不够,偶尔就会初始化失败,增加到500。
推荐阅读
-
Android启动相机拍照并返回图片
-
Android启动相机拍照并返回图片
-
WAC启动Android模拟器 transfer error: Read-only file system错误解决方法
-
WAC启动Android模拟器 transfer error: Read-only file system错误解决方法
-
排查启动网卡启动错误
-
Android相机启动crash错误排查
-
Android NDK 开发Jni 遇到Fatal 崩溃错误后,怎么定位crash的位置
-
Android Studio app启动错误 Error running :Default Activity not found
-
【Android错误解决方案】解决AndroidStudio在手机上安装apk成功之后不能直接自动启动Activity---终极解决方案
-
Android相机启动crash错误排查