[RK3288][Android6.0] 调试笔记 --- 播放搜狐视频会Crash问题

来源:互联网 发布:highcharts java 封装 编辑:程序博客网 时间:2024/06/03 18:30
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

现象
通过adb安装搜狐视频之后打开apk没进入界面之后系统就Crash,导致Android重启。

Crash Log:
--------- beginning of crash
01-21 19:31:22.786   174   174 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 174 (surfaceflinger)
01-21 19:31:22.862  1152  1303 D DataRequestActivity: net connect spend time : 1
01-21 19:31:22.888   209   209 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-21 19:31:22.888   209   209 F DEBUG   : Build fingerprint: 'Android/rk3288/rk3288:6.0.1/3.0.02/kris05101452:user/platform-keys'
01-21 19:31:22.888   209   209 F DEBUG   : Revision: '0'
01-21 19:31:22.888   209   209 F DEBUG   : ABI: 'arm'
01-21 19:31:22.888   209   209 F DEBUG   : pid: 174, tid: 174, name: surfaceflinger  >>> /system/bin/surfaceflinger <<<
01-21 19:31:22.888   538   622 W NativeCrashListener: Couldn't find ProcessRecord for pid 174
01-21 19:31:22.888   209   209 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8
01-21 19:31:22.892   209   209 F DEBUG   :     r0 b7db6f00  r1 b7fbdec0  r2 592c0592  r3 0000000a
01-21 19:31:22.892   209   209 E DEBUG   : AM write failed: Broken pipe
01-21 19:31:22.892   209   209 F DEBUG   :     r4 b2b49348  r5 00000000  r6 00000000  r7 b7db7b54
01-21 19:31:22.892   209   209 F DEBUG   :     r8 b7db6f00  r9 b7fbdec0  sl b2b4a580  fp b2b49348
01-21 19:31:22.892   209   209 F DEBUG   :     ip beffc618  sp beffcaf0  lr b2b425eb  pc 00000008  cpsr 600f0010
01-21 19:31:22.896   209   209 F DEBUG   : 
01-21 19:31:22.896   209   209 F DEBUG   : backtrace:
01-21 19:31:22.896   209   209 F DEBUG   :     #00 pc 00000008  <unknown>
01-21 19:31:22.896   209   209 F DEBUG   :     #01 pc 0000c5e9  /system/lib/hw/hwcomposer.rk30board.so (_Z14hwc_try_policyP11_hwcContextP22hwc_display_contents_1i+56)
01-21 19:31:22.896   209   209 F DEBUG   :     #02 pc 0000f68f  /system/lib/hw/hwcomposer.rk30board.so
01-21 19:31:22.896   209   209 F DEBUG   :     #03 pc 0000fba1  /system/lib/hw/hwcomposer.rk30board.so
01-21 19:31:22.896   209   209 F DEBUG   :     #04 pc 00025c57  /system/lib/libsurfaceflinger.so
01-21 19:31:22.896   209   209 F DEBUG   :     #05 pc 0001be5d  /system/lib/libsurfaceflinger.so
01-21 19:31:22.896   209   209 F DEBUG   :     #06 pc 0001b3cb  /system/lib/libsurfaceflinger.so
01-21 19:31:22.896   209   209 F DEBUG   :     #07 pc 0001b165  /system/lib/libsurfaceflinger.so
01-21 19:31:22.896   209   209 F DEBUG   :     #08 pc 000135a1  /system/lib/libutils.so (_ZN7android6Looper9pollInnerEi+456)
01-21 19:31:22.897   209   209 F DEBUG   :     #09 pc 000136bb  /system/lib/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+130)
01-21 19:31:22.897   209   209 F DEBUG   :     #10 pc 00018601  /system/lib/libsurfaceflinger.so
01-21 19:31:22.897   209   209 F DEBUG   :     #11 pc 0001ad8d  /system/lib/libsurfaceflinger.so (_ZN7android14SurfaceFlinger3runEv+8)
01-21 19:31:22.897   209   209 F DEBUG   :     #12 pc 00000e45  /system/bin/surfaceflinger
01-21 19:31:22.897   209   209 F DEBUG   :     #13 pc 00016631  /system/lib/libc.so (__libc_init+44)
01-21 19:31:22.897   209   209 F DEBUG   :     #14 pc 00000cac  /system/bin/surfaceflinger

调试

通过objdump定位具体是哪个函数出现了问题:

#prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-objdump -d -S out/target/product/rk3288/symbols/system/lib/hw/hwcomposer.rk30board.so  > ~/objdump.txt
找到对应函数是: hwc_try_policy()@rk_hwcomposer.cpp
int hwc_try_policy(hwcContext * context,hwc_display_contents_1_t * list,int dpyID){    int ret;    for(int i = 0;i < HWC_POLICY_NUM;i++){......        ret = context->fun_policy[i]((void*)context,list);        if(!ret){            break; // find the Policy        }    }    return ret;}
添加Log,发现crash在context->fun_policy,再打印context->fun_policy地址,
结果crash的时候地址被修改,说明有其他地方把这个地址的内容给改写了!

解决方法
像这种问题比较难处理,而且特别像这种复杂的和硬件相关的HWC模块,需要非常熟悉才能找到问题点。
幸好更新了rk的最新HWC code之后问题得到了解决。
阅读全文
1 0
原创粉丝点击