2012-09-21 95 views
5

我是內核調試的新手。以下是最後一條內核消息。根據我的理解,它試圖訪問空指針。但我不明白爲什麼它關閉杯子0.調試linux kernel panic

Unable to handle kernel paging request at virtual address 40025694 
[37655.473976] pgd = d7138000 
[37655.474007] [40025694] *pgd=9ec1a831, *pte=bf2e659d, *ppte=00000000 
[37655.474038] Internal error: Oops: 17 [#1] PREEMPT SMP 
[37655.474038] Modules linked in: 
[37655.474068] CPU: 1 Not tainted (3.0.21-g572d9be-00004-g4ec4db2 #1) 
[37655.474099] PC is at vector_swi+0x28/0x88 
[37655.474129] LR is at 0x40025698 
[37655.474160] pc : c01065a8 lr : 40025698 psr : 60000093 
[37655.474160] sp : d6eaffb0 ip : 4062c18c fp : 5ed97c24 
[37655.474190] r10: 58702b64 r9 : 5ea56f98 r8 : 20000010 
[37655.474221] r7 : 000000a8 r6 : 41b13530 r5 : 4062c270 r4 : 4062c140 
[37655.474251] r3 : 00000000 r2 : ffffffff r1 : 00000001 r0 : 5ed97bd0 
[37655.474251] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user 
[37655.474282] Control: 10c5787d Table: 9ec3806a DAC: 00000015 
[37655.474282] 
[37655.474282] PC: 0xc0106528: 
[37655.474312] 6528 e31100ff 1afffff0 e59d1040 e5bde03c e16ff001 f57ff01f e95d7fff e1a00000 
[37655.474343] 6548 e28dd00c e1b0f00e eb01ae0e e1a096ad e1a09689 e5991000 e3a08001 e3110c01 
[37655.474373] 6568 0affffec e1a0100d e3a00001 eb0006ef eaffffe8 e320f000 e24dd048 e88d1fff 
[37655.474404] 6588 e28d803c e9486000 e14f8000 e58de03c e58d8040 e58d0044 e3180020 13a0a000 
[37655.474434] 65a8 051ea004 e59fc0ac e59cc000 ee01cf10 f1080080 e1a096ad e1a09689 e28f809c 
[37655.474465] 65c8 e3daa4ff 122a7609 159f808c e599a000 e92d0030 e31a0c01 1a000008 e3570f5e 
[37655.474465] 65e8 e24fee13 3798f107 e28d1008 e3a08000 e357080f e2270000 2a001084 ea022377 
[37655.474526] 6608 e1a02007 e28d1008 e3a00000 eb0006c7 e28fe014 e1a07000 e28d1008 e3570f5e 
[37655.474526] 
[37655.474526] SP: 0xd6eaff30: 
[37655.474556] ff30 c004815c c004a2c0 c0c02080 0000000a c0d8a580 c017a2f0 c1ef1984 00000012 
[37655.474587] ff50 ffffffff d6eaff9c 41b13530 000000a8 20000010 c010602c 5ed97bd0 00000001 
[37655.474617] ff70 ffffffff 00000000 4062c140 4062c270 41b13530 000000a8 20000010 5ea56f98 
[37655.474648] ff90 58702b64 5ed97c24 4062c18c d6eaffb0 40025698 c01065a8 60000093 ffffffff 
[37655.474678] ffb0 5ed97bd0 00000001 ffffffff 00000000 4062c140 4062c270 41b13530 000000a8 
[37655.474678] ffd0 5ed97bd0 5ea56f98 58702b64 5ed97c24 4062c18c 5ed97bc8 406283d7 40025698 
[37655.474709] fff0 20000010 5ed97bd0 a8afc821 a8afcc21 e033cfc0 40eb3000 40eb6000 d6eb0058 
[37655.474739] 0010 d75a9d68 0000079f 00100073 d6eb017d d6eb00cc d6e98f94 00000000 00000000 
[37655.474770] Process UEventObserver (pid: 675, stack limit = 0xd6eae2f0) 
[37655.474770] Stack: (0xd6eaffb0 to 0xd6eb0000) 
[37655.474801] ffa0:          5ed97bd0 00000001 ffffffff 00000000 
[37655.474801] ffc0: 4062c140 4062c270 41b13530 000000a8 5ed97bd0 5ea56f98 58702b64 5ed97c24 
[37655.474831] ffe0: 4062c18c 5ed97bc8 406283d7 40025698 20000010 5ed97bd0 a8afc821 a8afcc21 
[37655.474831] Code: e58d8040 e58d0044 e3180020 13a0a000 (051ea004) 
[37655.474862] ---[ end trace 2416079997dfe426 ]--- 
[37655.474862] Kernel panic - not syncing: Fatal exception 
[37655.474892] [<c010cdec>] (unwind_backtrace+0x0/0x12c) from [<c078872c>] (panic+0x80/0x1a4) 
[37655.474923] [<c078872c>] (panic+0x80/0x1a4) from [<c010a578>] (die+0x1d4/0x21c) 
[37655.474953] [<c010a578>] (die+0x1d4/0x21c) from [<c0111510>] (__do_kernel_fault+0x64/0x84) 
[37655.474953] [<c0111510>] (__do_kernel_fault+0x64/0x84) from [<c0111798>] (do_page_fault+0x268/0x288) 
[37655.474984] [<c0111798>] (do_page_fault+0x268/0x288) from [<c0100340>] (do_DataAbort+0x134/0x1a4) 
[37655.474984] [<c0100340>] (do_DataAbort+0x134/0x1a4) from [<c010602c>] (__dabt_svc+0x4c/0x60) 
[37655.475014] Exception stack(0xd6eaff68 to 0xd6eaffb0) 
[37655.475014] ff60:     5ed97bd0 00000001 ffffffff 00000000 4062c140 4062c270 
[37655.475014] ff80: 41b13530 000000a8 20000010 5ea56f98 58702b64 5ed97c24 4062c18c d6eaffb0 
[37655.475045] ffa0: 40025698 c01065a8 60000093 ffffffff 
[37655.475045] [<c010602c>] (__dabt_svc+0x4c/0x60) from [<c01065a8>] (vector_swi+0x28/0x88) 
[37655.475075] CPU0: stopping 
[37655.475075] [<c010cdec>] (unwind_backtrace+0x0/0x12c) from [<c010b438>] (handle_IPI+0x100/0x1d4) 
[37655.475106] [<c010b438>] (handle_IPI+0x100/0x1d4) from [<c010044c>] (gic_handle_irq+0x9c/0xac) 
[37655.475106] [<c010044c>] (gic_handle_irq+0x9c/0xac) from [<c0106094>] (__irq_svc+0x54/0x80) 
[37655.475136] Exception stack(0xc874bc68 to 0xc874bcb0) 
[37655.475136] bc60:     d3cf4948 cd6dbd54 0000001f 00000000 b1d2a59d 5ea1f000 
[37655.475136] bc80: d3cf4948 5ea1f000 00000000 c874a000 d2b9207c d7e55670 5ea1f02b c874bcb0 
[37655.475167] bca0: c01eb894 c010bbb4 60000013 ffffffff 
[37655.475167] [<c0106094>] (__irq_svc+0x54/0x80) from [<c010bbb4>] (flush_tlb_page+0x8c/0x98) 
[37655.475197] [<c010bbb4>] (flush_tlb_page+0x8c/0x98) from [<c01eb894>] (ptep_clear_flush+0x30/0x38) 
[37655.475197] [<c01eb894>] (ptep_clear_flush+0x30/0x38) from [<c01e743c>] (try_to_unmap_one+0xc4/0x3a4) 
[37655.475228] [<c01e743c>] (try_to_unmap_one+0xc4/0x3a4) from [<c01e77a0>] (try_to_unmap_file+0x84/0x4b4) 
[37655.475228] [<c01e77a0>] (try_to_unmap_file+0x84/0x4b4) from [<c01e80b0>] (try_to_unmap+0x34/0x4c) 
[37655.475258] [<c01e80b0>] (try_to_unmap+0x34/0x4c) from [<c01d28dc>] (shrink_page_list+0x258/0x78c) 
[37655.475258] [<c01d28dc>] (shrink_page_list+0x258/0x78c) from [<c01d31b4>] (shrink_inactive_list+0x1e0/0x330) 
[37655.475289] [<c01d31b4>] (shrink_inactive_list+0x1e0/0x330) from [<c01d3704>] (shrink_zone+0x400/0x588) 
[37655.475289] [<c01d3704>] (shrink_zone+0x400/0x588) from [<c01d3fd8>] (kswapd+0x594/0x970) 
[37655.475319] [<c01d3fd8>] (kswapd+0x594/0x970) from [<c018e04c>] (kthread+0x80/0x88) 
[37655.475319] [<c018e04c>] (kthread+0x80/0x88) from [<c01075c0>] (kernel_thread_exit+0x0/0x8) 

任何指針,以便我可以前進。

感謝

+0

消息告訴你你試圖訪問的是:虛擬地址'40025694'。這看起來像用戶空間中的指針 - 訪問用戶提供的緩衝區時,是否忘記了'copy_from_user' /'copy_to_user'? – nneonneo

+1

OK,實際上,'PC/LR'組合暗示系統調用來自非法地址0x40025694 ......這是不可能的。祝你好運調試... – nneonneo

+0

ldreq r10,[lr,#-4] @得到SWI指令pc在執行這條線時崩潰。它試圖在r10中調整LR地址,這是無效的。我不明白這是怎麼可能的。 – shunty

回答

3

如果你不能夠重現哎呀,你擁有的唯一真正的辦法是看內核objdump的,並匹配在哎呀傾銷與變量的位置的CPU狀態。曾經有一個指南(由Linus自己寫!)在內核樹中:Documentation/oops-tracing.txt。但是現在看起來內核用戶手冊有更多的更新日期documentation rendered from the source tree

+0

它不存在。它可能在某個時候存在。嗯... –