A/libc:fatal signal 11(SIGSEGV).code 1, fault addr 0x0 in tid 26488 (VideoEncoder)

在调试Camera模块;发现相同的代码在厂家提供的环境里边编译、就是ok的,在我们的源码树中编译,将HAL库推进去后、就会signal 11退出。

一、现象

 1 F/libc    ( 4250): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4358 (CameraPreviewTh)  
 2 I/DEBUG   ( 2366): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***  
 3 I/DEBUG   ( 2366): Build fingerprint: 'TV/tclm6/tclm6:4.2.1/V8-AML7601-LF1R001/20130523:eng/test-keys'  
 4 I/DEBUG   ( 2366): Revision: '32'  
 5 I/DEBUG   ( 2366): pid: 4250, tid: 4358, name: CameraPreviewTh  >>> /system/bin/mediaserver <<<  
 6 I/DEBUG   ( 2366): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000  
 7 I/DEBUG   ( 2366):     r0 00000000  r1 00000500  r2 45498500  r3 0000001e  
 8 I/DEBUG   ( 2366):     r4 00000280  r5 00000000  r6 00000780  r7 00000000  
 9 I/DEBUG   ( 2366):     r8 00000500  r9 00000780  sl 00000f00  fp 45498f00  
10 I/DEBUG   ( 2366):     ip 00000280  sp 46054d80  lr 4410816f  pc 44108214  cpsr 80030030  
11 I/DEBUG   ( 2366):     d0  696765623e3e3e31  d1  3e3e3e2d2d2d2d2d  
12 I/DEBUG   ( 2366):     d2  3234767975793e3e  d3  32766e5f6f745f32  
13 I/DEBUG   ( 2366):     d4  54535f5745495645  d5  4552503e2d455441  
14 I/DEBUG   ( 2366):     d6  4154535f57454956  d7  0000823549742400  
15 I/DEBUG   ( 2366):     d8  0000000000000000  d9  0000000000000000  
16 I/DEBUG   ( 2366):     d10 0000000000000000  d11 0000000000000000  
17 I/DEBUG   ( 2366):     d12 0000000000000000  d13 0000000000000000  
18 I/DEBUG   ( 2366):     d14 0000000000000000  d15 0000000000000000  
19 I/DEBUG   ( 2366):     d16 0000000000000000  d17 0000000000000000  
20 I/DEBUG   ( 2366):     d18 4000000000000000  d19 bf66c168e3a87def  
21 I/DEBUG   ( 2366):     d20 3fc555533bceb625  d21 3e66376972bea4d0  
22 I/DEBUG   ( 2366):     d22 3fb0271122ac41c2  d23 bf8388915620e116  
23 I/DEBUG   ( 2366):     d24 3ff0271122ac41c2  d25 0000000000000000  
24 I/DEBUG   ( 2366):     d26 0000000000000000  d27 0000000000000000  
25 I/DEBUG   ( 2366):     d28 0000000000000000  d29 0000000000000000  
26 I/DEBUG   ( 2366):     d30 0000000000000000  d31 0000000000000000  
27 I/DEBUG   ( 2366):     scr 60000010  
28 I/DEBUG   ( 2366):   
29 I/DEBUG   ( 2366): backtrace:  
30 I/DEBUG   ( 2366):     #00  pc 0002e214  /system/lib/hw/camera.meson6.so (yuyv422_to_nv21(unsigned char*, unsigned char*, int, int)+195)  
31 I/DEBUG   ( 2366):     #01  pc 0002d05b  /system/lib/hw/camera.meson6.so (android::V4LCameraAdapter::previewThread()+490)  
32 I/DEBUG   ( 2366):     #02  pc 0002d145  /system/lib/hw/camera.meson6.so  
33 I/DEBUG   ( 2366):     #03  pc 00011253  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+94)  
34 I/DEBUG   ( 2366):     #04  pc 00010dcd  /system/lib/libutils.so  
35 I/DEBUG   ( 2366):     #05  pc 0000e478  /system/lib/libc.so (__thread_entry+72)  
36 I/DEBUG   ( 2366):     #06  pc 0000db64  /system/lib/libc.so (pthread_create+160)  
37 I/DEBUG   ( 2366):   
38 I/DEBUG   ( 2366): stack:  
39 I/DEBUG   ( 2366):          46054d40  401da160  /system/lib/libc.so  
40 I/DEBUG   ( 2366):          46054d44  401b3a6d  /system/lib/libc.so (vfprintf+44)  
41 I/DEBUG   ( 2366):          46054d48  000001e0    
42 I/DEBUG   ( 2366):          46054d4c  00000280    
43 I/DEBUG   ( 2366):          46054d50  4411bce1  /system/lib/hw/camera.meson6.so  
44 I/DEBUG   ( 2366):          46054d54  45498500  /dev/video0  
45 I/DEBUG   ( 2366):          46054d58  00000003    
46 I/DEBUG   ( 2366):          46054d5c  401b167d  /system/lib/libc.so (printf+24)  
47 I/DEBUG   ( 2366):          46054d60  4411d5fa  /system/lib/hw/camera.meson6.so  
48 I/DEBUG   ( 2366):          46054d64  46054d74    
49 I/DEBUG   ( 2366):          46054d68  00000280    
50 I/DEBUG   ( 2366):          46054d6c  4410816f  /system/lib/hw/camera.meson6.so (yuyv422_to_nv21(unsigned char*, unsigned char*, int, int)+30)  
51 I/DEBUG   ( 2366):          46054d70  4411d5fa  /system/lib/hw/camera.meson6.so  
52 I/DEBUG   ( 2366):          46054d74  00000000    
53 I/DEBUG   ( 2366):          46054d78  df0027ad    
54 I/DEBUG   ( 2366):          46054d7c  00000000    
55 I/DEBUG   ( 2366):     #00  46054d80  00000280    
56 I/DEBUG   ( 2366):          46054d84  45498000  /dev/video0  
57 I/DEBUG   ( 2366):          46054d88  45498500  /dev/video0  
58 I/DEBUG   ( 2366):          46054d8c  45498a00  /dev/video0  
59 I/DEBUG   ( 2366):          46054d90  00000780    
60 I/DEBUG   ( 2366):          46054d94  0004b000    
61 I/DEBUG   ( 2366):          46054d98  0004b280    
62 I/DEBUG   ( 2366):          46054d9c  0004b001    
63 I/DEBUG   ( 2366):          46054da0  0004b281    
64 I/DEBUG   ( 2366):          46054da4  45498000  /dev/video0  
65 I/DEBUG   ( 2366):          46054da8  45498500  /dev/video0  
66 I/DEBUG   ( 2366):          46054dac  45498a00  /dev/video0  
67 I/DEBUG   ( 2366):          46054db0  45498f00  /dev/video0  
68 I/DEBUG   ( 2366):          46054db4  45498001  /dev/video0  
69 I/DEBUG   ( 2366):          46054db8  45498a01  /dev/video0  
70 I/DEBUG   ( 2366):          46054dbc  45498003  /dev/video0  
71 I/DEBUG   ( 2366):          ........  ........  
72 I/DEBUG   ( 2366):     #01  46054e08  00000000    
73 I/DEBUG   ( 2366):          46054e0c  00000000    
74 I/DEBUG   ( 2366):          46054e10  00000000    
75 I/DEBUG   ( 2366):          46054e14  00000000    
76 I/DEBUG   ( 2366):          46054e18  00000000    
77 I/DEBUG   ( 2366):          46054e1c  00000000    
78 I/DEBUG   ( 2366):          46054e20  00000000    
79 I/DEBUG   ( 2366):          46054e24  00000000    
80 I/DEBUG   ( 2366):          46054e28  00000280    
81 I/DEBUG   ( 2366):          46054e2c  000001e0    
82 I/DEBUG   ( 2366):          46054e30  00000000    
83 I/DEBUG   ( 2366):          46054e34  00000000    
84 I/DEBUG   ( 2366):          46054e38  00000000    
85 I/DEBUG   ( 2366):          46054e3c  00000000    
86 I/DEBUG   ( 2366):          46054e40  00000000    
87 I/DEBUG   ( 2366):          46054e44  00000000    
88 I/DEBUG   ( 2366):          ........  ........  
89 I/DEBUG   ( 2366):     #02  46054e98  44001498    
90 I/DEBUG   ( 2366):          46054e9c  40226255  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+96)  
91 I/DEBUG   ( 2366):   
92 I/DEBUG   ( 2366): memory near r2:  
93 I/DEBUG   ( 2366):     454984e0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     454984f0 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498500 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498510 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498520 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498530 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498540 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498550 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498560 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498570 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498580 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498590 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     454985a0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     454985b0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     454985c0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     454985d0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):   
94 I/DEBUG   ( 2366): memory near fp:  
95 I/DEBUG   ( 2366):     45498ee0 ffffffff ffffffff ffffffff ffffffffI/DEBUG   ( 2366):     45498ef0 ffffffff ffffffff ffffffff ffffffff  
96 I/DEBUG   ( 2366):     45498f00 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f10 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f20 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f30 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f40 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f50 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f60 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f70 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f80 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498f90 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498fa0 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498fb0 ffffffff ffffffff ffffffff ffffffff I/DEBUG   ( 2366):     45498fc0 ffffffff ffffffff ffffffff..  

二、解决

1.分析其中的重要信息

1 I/DEBUG   ( 2366):     #00  pc 0002e180  /system/lib/hw/camera.meson6.so (yuyv422_to_nv21(unsigned char*, unsigned char*, int, int)+157)  
2 I/DEBUG   ( 2366):     #01  pc 0002d00b  /system/lib/hw/camera.meson6.so (android::V4LCameraAdapter::previewThread()+458)  
3 I/DEBUG   ( 2366):     #02  pc 0002d0dd  /system/lib/hw/camera.meson6.so  
4 I/DEBUG   ( 2366):     #03  pc 00011253  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+94)  
5 I/DEBUG   ( 2366):     #04  pc 00010dcd  /system/lib/libutils.so  
6 I/DEBUG   ( 2366):     #05  pc 0000e478  /system/lib/libc.so (__thread_entry+72)  
7 I/DEBUG   ( 2366):     #06  pc 0000db64  /system/lib/libc.so (pthread_create+160)  

2.代码跟踪

操作:
out/target/product/tclm6/obj/SHARED_LIBRARIES/camera.meson6_intermediates/LINKED
arm-none-Linux-gnueabi-addr2line 0002e180 -e camera.meson6.so
结果:
hardware/amlogic/camera/utils/util.cpp:157      
////(*ptrdesty1++) = (*ptrsrcy1);在yuyv422_to_nv21(unsigned char*, unsigned char*, int, int)函数中

操作:
arm-none-linux-gnueabi-addr2line 0002d00b -e camera.meson6.so
结果:
hardware/amlogic/camera/V4LCameraAdapter/V4LCameraAdapter.cpp:1571   
//// yuyv422_to_nv21(src,dest,width,height); 

操作:
arm-none-linux-gnueabi-addr2line 0002d0dd -e camera.meson6.so
结果:
hardware/amlogic/camera/V4LCameraAdapter/V4LCameraAdapter.cpp:303    
////writefile((char*)SYSFILE_CAMERA_SET_PARA, (char*)"1");

3.分析

    从上边结果来看,在hardware/amlogic/camera/V4LCameraAdapter/V4LCameraAdapter.cpp:1571处调用yuyv422_to_nv21(src,dest,width,height)挂掉的可能性比较打;于是加如下log:

1 D/V4LCameraAdapter( 2371): TK----------->>>>>src is 0x45d0f000  
2 D/V4LCameraAdapter( 2371): TK---------->>>>>>dest is 0x0  
3 D/V4LCameraAdapter( 2371): TK------------>>>>>width is 640  
4 D/V4LCameraAdapter( 2371): TK--------->>>>>height is 480  

  不难发现,上边dest指针为NULL、导致的signal 11。

4.解决

  通过对比编译环境发现,在dest赋值处;用到的头文件位置不同,导致结果差异。通过重新设置头文件路径,问题解决。

三、思考

  目前掌握的结局signal 11故障的方法是使用交叉编译工具链给我们提供的arm-none-linux-gnueabi-addr2line工具,通过地址定位源文件中出错的函数或具体行数。

四、补充:Fatal signal 8 (SIGFPE)

  最近在帮助同事看一个打印堆栈问题时发现,程序并没有被kill掉

 1 F/libc    ( 3254): Fatal signal 8 (SIGFPE) at 0x00000cb6 (code=0), thread 3254 (TVMSFserver)  
 2 I/DEBUG   ( 2455): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***  
 3 I/DEBUG   ( 2455): Build fingerprint: 'TV/tclm6/tclm6:4.2.2/V8-AML7602-LF1V002/20140520:eng/test-keys'  
 4 I/DEBUG   ( 2455): Revision: '32'  
 5 I/DEBUG   ( 2455): pid: 3254, tid: 3254, name: TVMSFserver  >>> TVMSFserver <<<  
 6 I/DEBUG   ( 2455): signal 8 (SIGFPE), code -6 (?), fault addr 00000cb6  
 7 D/atv_hd  ( 2439): ATVTunerSetStd, tuner std = 0x40000e0(V4L2_COLOR_STD_PAL, V4L2_STD_PAL_DK).  
 8 I/DEBUG   ( 2455):     r0 00000000  r1 00000008  r2 0000270f  r3 00000000  
 9 I/DEBUG   ( 2455):     r4 00000000  r5 ffffffff  r6 00000000  r7 00000025  
10 I/DEBUG   ( 2455):     r8 00000001  r9 00000000  sl 4012e228  fp bed8ca2c  
11 I/DEBUG   ( 2455):     ip fffdc390  sp bed8c660  lr 4011e010  pc 400fc27c  cpsr 200a0010  
12 I/DEBUG   ( 2455):     d0  6168772d2d2d2d2d  d1  5654582d2d2d2d2d  
13 I/DEBUG   ( 2455):     d2  6b6361626c6c6163  d3  2d2d2d2d7070632e  
14 I/DEBUG   ( 2455):     d4  6c6c61635654582d  d5  45533a3a6b636162  
15 I/DEBUG   ( 2455):     d6  4c41435f48435241  d7  2d2d2d4b4341424c  
16 I/DEBUG   ( 2455):     d8  0000000000000000  d9  0000000000000000  
17 I/DEBUG   ( 2455):     d10 0000000000000000  d11 0000000000000000  
18 I/DEBUG   ( 2455):     d12 0000000000000000  d13 0000000000000000  
19 I/DEBUG   ( 2455):     d14 0000000000000000  d15 0000000000000000  
20 I/DEBUG   ( 2455):     d16 41d4e400c2003127  d17 3f50624dd2f1a9fc  
21 I/DEBUG   ( 2455):     d18 41cc382ea1800000  d19 0000000000000000  
22 I/DEBUG   ( 2455):     d20 0000000000000000  d21 0000000000000000  
23 I/DEBUG   ( 2455):     d22 0000000000000000  d23 0000000000000000  
24 I/DEBUG   ( 2455):     d24 0000000000000000  d25 0000000000000000  
25 I/DEBUG   ( 2455):     d26 0000000000000000  d27 0000000000000000  
26 I/DEBUG   ( 2455):     d28 0000000000000000  d29 0000000000000000  
27 I/DEBUG   ( 2455):     d30 0000000000000000  d31 0000000000000000  
28 I/DEBUG   ( 2455):     scr 00000010  
29 I/DEBUG   ( 2455):  
30 I/DEBUG   ( 2455): backtrace:  
31 I/DEBUG   ( 2455):     #00  pc 0001827c  /system/lib/libc.so (kill+12)  
32 I/DEBUG   ( 2455):     #01  pc 0003a00c  /system/lib/libc.so (__aeabi_idiv0+8)  
33 I/DEBUG   ( 2455):  
34 I/DEBUG   ( 2455): stack:  
35 I/DEBUG   ( 2455):          bed8c620  00000008  
36 I/DEBUG   ( 2455):          bed8c624  00000000  
37 I/DEBUG   ( 2455):          bed8c628  00000000  
38 I/DEBUG   ( 2455):          bed8c62c  00000000  
39 I/DEBUG   ( 2455):          bed8c630  00000000  
40 I/DEBUG   ( 2455):          bed8c634  41010001  /system/lib/libamplayer.so (ff_ps_init+1361)  
41 I/DEBUG   ( 2455):          bed8c638  00000000  
42 I/DEBUG   ( 2455):          bed8c63c  00000030  
43 I/DEBUG   ( 2455):          bed8c640  ffffffe0  
44 I/DEBUG   ( 2455):          bed8c644  00000000  
45 I/DEBUG   ( 2455):          bed8c648  00000000  
46 I/DEBUG   ( 2455):          bed8c64c  00000000  
47 I/DEBUG   ( 2455):          bed8c650  00000000  
48 I/DEBUG   ( 2455):          bed8c654  00000000  
49 I/DEBUG   ( 2455):          bed8c658  df0027ad  
50 I/DEBUG   ( 2455):          bed8c65c  00000000  
51 I/DEBUG   ( 2455):     #00  bed8c660  00000000  
52 I/DEBUG   ( 2455):          ........  ........  
53 I/DEBUG   ( 2455):     #01  bed8c660  00000000  
54 I/DEBUG   ( 2455):          bed8c664  ffffffff  
55 I/DEBUG   ( 2455):          bed8c668  00000000  
56 I/DEBUG   ( 2455):          bed8c66c  bed8c6a0  [stack]  
57 I/DEBUG   ( 2455):          bed8c670  fffdc390  
58 I/DEBUG   ( 2455):          bed8c674  4011e010  /system/lib/libc.so (__aeabi_idiv0+12)  
59 I/DEBUG   ( 2455):          bed8c678  00000000  
60 I/DEBUG   ( 2455):          bed8c67c  4038223d  /data/test/libTVMSFService.so (android::postEventsFromhal(int, android::Parcel const*)+236)  
61 I/DEBUG   ( 2455):          bed8c680  00000002  
62 I/DEBUG   ( 2455):          bed8c684  00000002  
63 I/DEBUG   ( 2455):          bed8c688  41bd2c28  
64 I/DEBUG   ( 2455):          bed8c68c  00000063  
65 I/DEBUG   ( 2455):          bed8c690  000c2e2a  
66 I/DEBUG   ( 2455):          bed8c694  00000003  
67 I/DEBUG   ( 2455):          bed8c698  00000004  
68 I/DEBUG   ( 2455):          bed8c69c  418fbb01  /data/test/libdtvapi_dtv.so (std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::xsputn(char const*, int)+8)  


通过地址定位:

arm-none-linux-gnueabi-addr2line 0001827c -e libc.so

  结果:

bionic/libc/arch-arm/bionic/kill.S:46

1 ENTRY(kill)  
2     stmfd   sp!, {r4-r7, ip, lr}  
3     ldr     r7, =__NR_kill  
4     swi     #0  
5     ldmfd   sp!, {r4-r7, ip, lr}  //46行,恢复现场  
6     movs    r0, r0  
7     bxpl    lr  
8     b       __set_syscall_errno  
9 END(kill)  

  后发现signal 8问题一般是由于除数为0导致,后问题解决;通过该问题分析:可能是因为signal 8后系统需要kill该进程、但没有kill成功。

转自:http://blog.csdn.net/tankai19880619/article/details/9004619

好吧 其实我并没有看懂。。。(摊手)先马着,万一我哪天想通了呢...

我本身的问题是出在视频硬编码的时候,出现signal 11的错误

暂时,不知道怎么搞还

原文地址:https://www.cnblogs.com/Sharley/p/6605347.html