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模塊。session

出錯的時候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初始化失敗了。spa

這應該屬於系統出錯了,而不是出在咱們的程序。再查kernel log,終於發現csid初始化失敗了。線程

09-30 08:06:56.936     0     0 E msm_csid_init: 587 msm_csid_reset failedserver

默認的csid reset的timeout是100 ms。懷疑硬件上的改動致使reset時間可能不夠,偶爾就會初始化失敗,增長到500。事件

相關文章
相關標籤/搜索