camera crash

camera crash很是让人崩溃,遇到这种问题,出来一大堆地址和报错的库。看着很头大,我们常见的方法addr2line来解析到是哪一个函数,哪一行报错,这样子的话,分析起来问题,范围就会缩小很多。

首先看一个camera crash的log。

06-04 14:33:13.860   411 17923 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x69b69a86 in tid 17923 (CAM_stMachine)
06-04 14:33:14.096 18030 18030 F DEBUG   : xtc_crash_begin:
06-04 14:33:14.096 18030 18030 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-04 14:33:14.096 18030 18030 F DEBUG   : Build fingerprint: 'XTC/msm8909w_i18/msm8909w_i18:7.1.1/NMF26F/liwanc06031847:userdebug/release-keys'
06-04 14:33:14.097 18030 18030 F DEBUG   : Revision: '0'
06-04 14:33:14.097 18030 18030 F DEBUG   : ABI: 'arm'
06-04 14:33:14.097 18030 18030 F DEBUG   : pid: 411, tid: 17923, name: CAM_stMachine  >>> /system/bin/cameraserver <<<
06-04 14:33:14.097 18030 18030 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x69b69a86
06-04 14:33:14.097 18030 18030 F DEBUG   :     r0 b547d000  r1 b60a8648  r2 ffffffff  r3 69b69a87
06-04 14:33:14.098 18030 18030 F DEBUG   :     r4 b5419258  r5 b6b7d158  r6 b5419030  r7 b5419000
06-04 14:33:14.098 18030 18030 F DEBUG   :     r8 00000002  r9 b6b6a8a3  sl b6b6a858  fp b6b6a8e0
06-04 14:33:14.098 18030 18030 F DEBUG   :     ip b5419000  sp b587f7d0  lr b6b498cb  pc 69b69a86  cpsr a00f0030
06-04 14:33:14.160 18030 18030 F DEBUG   : 
06-04 14:33:14.160 18030 18030 F DEBUG   : backtrace:
06-04 14:33:14.164 18030 18030 F DEBUG   :     #00 pc 69b69a86  <unknown>
06-04 14:33:14.164 18030 18030 F DEBUG   :     #01 pc 0002a8c9  /system/lib/hw/camera.msm8909.so (_ZN7qcamera20QCameraGrallocMemory10deallocateEv+140)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #02 pc 00031007  /system/lib/hw/camera.msm8909.so (_ZN7qcamera13QCameraStream12releaseBuffsEv+110)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #03 pc 00031391  /system/lib/hw/camera.msm8909.so (_ZN7qcamera13QCameraStreamD1Ev+44)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #04 pc 000313d1  /system/lib/hw/camera.msm8909.so (_ZN7qcamera13QCameraStreamD0Ev+4)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #05 pc 0002ea2f  /system/lib/hw/camera.msm8909.so (_ZN7qcamera14QCameraChannelD1Ev+50)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #06 pc 0002ea7f  /system/lib/hw/camera.msm8909.so (_ZN7qcamera17QCameraPicChannelD1Ev+14)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #07 pc 0002ea91  /system/lib/hw/camera.msm8909.so (_ZN7qcamera17QCameraPicChannelD0Ev+4)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #08 pc 0002583f  /system/lib/hw/camera.msm8909.so (_ZN7qcamera25QCamera2HardwareInterface10delChannelENS_22qcamera_ch_type_enum_tEb+18)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #09 pc 00027d9b  /system/lib/hw/camera.msm8909.so (_ZN7qcamera25QCamera2HardwareInterface13cancelPictureEv+174)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #10 pc 0002d8e7  /system/lib/hw/camera.msm8909.so (_ZN7qcamera19QCameraStateMachine21procEvtPicTakingStateENS_21qcamera_sm_evt_enum_tEPv+846)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #11 pc 0002e773  /system/lib/hw/camera.msm8909.so (_ZN7qcamera19QCameraStateMachine16smEvtProcRoutineEPv+174)
06-04 14:33:14.164 18030 18030 F DEBUG   :     #12 pc 000473b3  /system/lib/libc.so (_ZL15__pthread_startPv+22)
06-04 14:33:14.165 18030 18030 F DEBUG   :     #13 pc 0001a0bd  /system/lib/libc.so (__start_thread+6)
06-04 14:33:15.683 18030 18030 F DEBUG   : xtc_crash_end:
06-04 15:02:19.435 18060 23672 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0xb651da03 in tid 23672 (CAM_stMachine)
06-04 15:02:19.615 23783 23783 F DEBUG   : xtc_crash_begin:

 

 

06-04 14:33:14.164 18030 18030 F DEBUG   :     #01 pc 0002a8c9  /system/lib/hw/camera.msm8909.so

06-04 14:33:14.164 18030 18030 F DEBUG   :     #02 pc 00031007  /system/lib/hw/camera.msm8909.so

06-04 14:33:14.164 18030 18030 F DEBUG   :     #03 pc 00031391  /system/lib/hw/camera.msm8909.so

看这三行,表示报错的库是在camera.msm8909.so这个库里面报错了,错误的地址是0002a8c9。

这个库的地址要注意,是在/out/target/product/msm8909w_i18/symbols/system$这个路径下面,然后执行如下命令:

addr2line -f -e camera.msm8909.so 0002a8c9   这样子就可以直接解析出来出错的是哪一个函数,那一行。

---------------------------------------------------------------------------------------------------------------------------------------------

不要高兴的太早,这种方法只是缩小了出现问题的范围,但是八九不离十。问题就是这一块。接下来就要自己去加log,一步一步去排除。一般是空指针,或者就是某个库没有正确加载。

下面列举一个例子,自己导致的camera crash。就是有一次在添加otp的时候,所有的代码都添加上去,但是每次烧进去版本,打开camera都是crash掉了,很崩溃啊。因为自己做高通不久,之前是做mtk的,经验也比较少。用上面的方法只能定位出来,肯定是otp错误了。其实这样一来,问题的范围也缩小了很多,接下来就重点分析otp。

首先在otp驱动里面自己添加log,突然发现啊,otp驱动里面的log,没有一句是打印出来的,这就奇怪了。

我们都知道,eeprom驱动,sensor驱动,其实最后编译出来的就是一个库文件,只要正确加载了这个库文件,那么eeprom驱动里面的log肯定是可以打印出来的。因为一句log都没有,所以怀疑这个库没有正确加载。

eeprom驱动编译出来的库是在eeporm.c文件里面加载的,有一个函数是eeprom_load_library。这个函数就是用来加载eeprom驱动编译出来的那个库的。自己加log,发现是eeporm驱动的入口函数写错了,这个入口函数其实是有一定的规定的。因为这个代码是模组厂扔过来的,所以就没怎么仔细看。改正了驱动里面的入口函数名字就解决掉这个问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值