錯誤現象見下面:
出了一個buserr,又是我們熟悉的0xdeadbaad,進程自殺。
這個進程退出了,android還是能正常起來。
問題大家跟蹤了很久沒有發現原因,最後倒內核版本發現是內核配置了一個宏引起的,CONFIG_ARCH_USES_GETTIMEOFFSET。
該宏是幹嘛的呢,就是在gettimeofday獲得時間的時候會調用一個arch_gettimeoffset函數,用來獲得比一個時間片更小的時間,簡單的說就是獲得獲得更精確的時間。
問題來了,配了這個宏爲什麼會導致這個音頻的進程退出呢?又琢磨了一段時間,經過大膽的嘗試,發現當連續兩次獲得時間,第二次時間比第一次時間小的時候,就會觸發這個buserr。
然後就懷疑到gettimeofday的問題了,寫了一個小case,發現連續gettimeofday,第二次的時間有時候會比第一次小。
接着把timer中斷的頻率還改成4ms一次,原先是10ms一次,就不會出現這個問題了。
在V10的板子上發現一個現象,就是當總線頻率爲40M的時候沒有問題,總線頻率爲45M以上就會有問題。
這個是個關鍵的發現,從而懷疑到了數據溢出的問題。
見下:
I/AwesomePlayer( 544): track of type 'audio/vorbis' does not publish bitrate arch/csky/kernel/traps.c(131): Bus Error Trap CURRENT PROCESS: COMM=.vorbis.decoder PID=666 TEXT=00008000-00008d8c DATA=00009000-00009184 BSS=00009184-000fa000 USER-STACK=7fd3ec60 KERNEL-STACK=92b494c0 PC: 0x2ab34868 orig_a0: 0x0000016c PSR: 0x00020140 r0: 0x0000016c r1: 0x00000027 r2: 0x00000000 r3: 0x00000000 r4: 0x2d23a88c r5: 0x000007cc r6: 0x2ab9b000 r7: 0x2ab336b0 r8: 0x00000000 r9: 0x2d23ad58 r10: 0x2b296a0c r11: 0x00000084 r12 0x00000000 r13: 0xdeadbaad r15: 0x2ab34860 r16:0x000cfae8 r17: 0x000cfafc r18: 0x00000001 r19: 0xffffe6b0 r20 0xffffe6b8 r21: 0xffffe6c0 r22: 0x2ab16340 r23: 0x0000008a r24 0x0000000b r25: 0x00000001 r26: 0x00000000 r27: 0x00000000 r28 0x2ab8e684 r29: 0x00000000 r30: 0x00000000 r31: 0x2d23af00 hi 0x0000832b lo: 0x196e9c09 CODE: 2ab34848: d27c3001 7bd10824 e9039263 ea12ffcd 2ab34858: d7810001 7bcd0832 0021ea8d 11013127 2ab34868: 0000dc2d 0827d01c ea8c7bdd d19c001f 2ab34878: 31060826 33007bd9 1000ea39 0000ea17 KERNEL STACK: 92b4df30: 000cfae8 000cfafc 80002b8a 803b2388 92b4df40: 92b4df40 92b4deb8 00000004 2d23af00 92b4df50: 00009184 000fa000 92b4df70 000007cc 92b4df60: 2ab9b000 80002e34 2d23a88c 800009c2 92b4df70: 2ab34868 0000016c 00020140 0000016c 92b4df80: 00000027 00000000 00000000 2d23a88c 92b4df90: 000007cc 2ab9b000 2ab336b0 00000000 92b4dfa0: 2d23ad58 2b296a0c 00000084 00000000 92b4dfb0: deadbaad 2ab34860 000cfae8 000cfafc 92b4dfc0: 00000001 ffffe6b0 ffffe6b8 ffffe6c0 92b4dfd0: 2ab16340 0000008a 0000000b 00000001 92b4dfe0: 00000000 00000000 2ab8e684 00000000 F/SoftVorbis( 544): frameworks/base/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp:272 CHECK_EQ( 0,_vorbarch/csky/kernel/traps.c(131): Bus Error Trap