遇到死机问题,有如下提示:
==============================================================================================================
> do_page_fault() #2: sending SIGSEGV to #UIFrameworkTas for invalid read access from
0000000c (epc == 2af0b124, ra == 2ab1d7f8)
(!) [ 483: 0.000] --> Caught signal 11 (at 0xc, invalid address) <--
(!!!) *** WARNING [still objects in 'Layer Region Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Layer Context Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Surface Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
Aborted
==============================================================================================================
epc 应该是应用程序Crash时程序指针地址,ra 应该是当前函数要返回的地址。
反汇编:
/opt/tuxbuilder-1.0/mipsel-unknown-linux-gnu/cross/bin/mipsel-unknown-linux-gnu-objdump -D stb225/build_STBmico_NANDflash_HDdecoding/rootfs/opt/nxp/bin/appCabotMico > dumplog
到dumplog中找两个地址或其近似地址,没有!!!
估计两个地址源于动态库文件中,方法是把动态库作为静态库链接到程序中,再进行反汇编。
关键需要加入IceAuroraDVR, tmNxpDVR等库,方法如下:
IceAuroraDVR - makefile
all: lib
+ rm $(BUILDROOT)/rootfs/opt/nxp/lib/libIceAuroraDVR.so //大概目的是使appCabotMico在链接时找不到动态库,然后找静态库
tmNxpDVR - makefile
all: lib
+ rm $(BUILDROOT)/rootfs/opt/nxp/lib/libtmNxpDVR.so
tmNxpMediaPlayer - makefile
all: lib
+ rm $(BUILDROOT)/rootfs/opt/nxp/lib/libtmNxpMediaPlayer.so
appCabotMico - makefile
LIBS = tmUIPenguinDVR \
IceAuroraDVR \
- tmNxpDVR
+ tmNxpDVR \
+ tmNxpMediaPlayer \
+ phStbKBufMgr \
+ phStbVideoRenderer \
+ phStbImage \
+ tmhwClock
这样,重新生成appCabotMico, 复现死机问题,得到如下打印:
==============================================================================================================
> do_page_fault() #2: sending SIGSEGV to #UIFrameworkTas for invalid read access from
0000000c (epc == 2ac21124, ra == 004b70f8)
(!) [ 594: 0.000] --> Caught signal 11 (at 0xc, invalid address) <--
(!!!) *** WARNING [still objects in 'Layer Region Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Layer Context Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Surface Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
Aborted
==============================================================================================================
反汇编:
/opt/tuxbuilder-1.0/mipsel-unknown-linux-gnu/cross/bin/mipsel-unknown-linux-gnu-objdump -D stb225/build_STBmico_NANDflash_HDdecoding/rootfs/opt/nxp/bin/appCabotMico > dumplog
打开dumplog, 查找近似地址,发现:
==============================================================================================================
004b70d0 <FROST_MutexLock>:
... ...
4b70f8: 0320f809 jalr t9
... ...
==============================================================================================================
所以问题应该是:FROST_MutexLock调用了某个函数,在该函数内部(epc == 2ac21124)出现非法地址访问。
发现FROST_MutexLock()函数没有排除Null指针的问题,修正后情况发生变化,该函数不再有问题,但是出现其它错误。信息如下:
==============================================================================================================
00000018 (epc == 004b712c, ra == 00658fcc)
(!) [ 668: 0.000] --> Caught signal 11 (at 0x18, invalid address) <--
(!!!) *** WARNING [still objects in 'Layer Region Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Layer Context Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
(!!!) *** WARNING [still objects in 'Surface Pool'] *** [object.c:241 in fusion_object_pool_destroy()]
Aborted
==============================================================================================================
反汇编:
/opt/tuxbuilder-1.0/mipsel-unknown-linux-gnu/cross/bin/mipsel-unknown-linux-gnu-objdump -D stb225/build_STBmico_NANDflash_HDdecoding/rootfs/opt/nxp/bin/appCabotMico > dumplog
打开dumplog,查找地址发现
==============================================================================================================
004b711c <FROST_MutexUnlock>:
... ...
4b712c: 03200008 jr t9
... ...
00658d2c <_ZN7DemoApp16onUsbDetectTimerERK14UITimerMessage>:
... ...
658fcc: 8fbc0040 lw gp,64(sp)
... ...
==============================================================================================================
说明: DemoApp::onUsbDetectTimer::UITimerMessage()
调用FROST_MutexLock()出现非法访问。