OOPS信息解读
root@firefly:~/mnt/module#insmodoops_module.ko [867.140514]UnabletohandlekernelNULLpointerdereferenceatvirtualaddress00000000 [867.141279]pgd=ffffffc0f0a65000 [867.141582][00000000]*pgd=0000000000000000,*pud=0000000000000000 [867.142164]Internalerror:Oops:96000045[#1]SMP [867.142592]Moduleslinkedin:oops_module(O+) [867.143006]CPU:4PID:1163Comm:insmodTainted:GO4.4.194+#7 [867.143649]Hardwarename:Firefly-RK3399Board(LinuxOpensource)(DT) [867.144236]task:ffffffc0cdc44380task.stack:ffffffc00a4fc000 [867.144761]PCisatinit_oopsdemo+0x24/0x38[oops_module] [867.145247]LRisatinit_oopsdemo+0x18/0x38[oops_module] [867.145732]pc:[]lr:[ ]pstate:40000145 [867.146386]sp:ffffffc00a4ffc40 [867.146688]x29:ffffffc00a4ffc40x28:ffffff80081376d0 [867.147178]x27:0000000000000001x26:ffffffc0cde6e880 [867.147491]x25:0000000000000001x24:ffffff8000ef2050 [867.147495]x23:0000000000000000x22:ffffff80095b7860 [867.147498]x21:ffffffc0cdce10c0x20:ffffff80095b7860 [867.147501]x19:ffffff8000ef0000x18:ffffff80897bfa97 [867.147504]x17:0000007fb096c8a0x16:ffffff800813b204Segmentationfau lt [867.147508]x15:0000000000000000root@firefly:~/mx14:00000000000224d6nt/module# [867.147511]x13:000000000000000ax12:0000000000000030 [867.147515]x11:00000000fffffffex10:ffffff80097bfa9f [867.147518]x9:0000000005f5e0ffx8:ffffff8008463c3c [867.147522]x7:ffffff80096280b0x6:0000000000000022 [867.147525]x5:ffffffc0f7f24b38x4:0000000000000001 [867.147528]x3:0000000000000007x2:0000000000000007 [867.147534]x1:0000000019760817x0:0000000000000000 [867.147536] [867.147536]PC:0xffffff8000eeffa4: [867.147550]ffa4**************************************************************** [867.147561]ffc4**************************************************************** [867.147572]ffe4********************************************************a9bf7bfd [867.147581]0004910003fdaa1e03e0d503201f5800010095ca7426d2800000528102e172a32ec1 [867.147590]0024b9000001a8c17bfdd65f03c000ef1024ffffff80a9bf7bfd910003fdaa1e03e0 [867.147599]0044d503201f5800008095ca7418a8c17bfdd65f03c000ef1038ffffff8000000000 [867.147607]00640000000000000000000000000000000000000000000000000000000000000000 [867.147616]00840000000000000000000000000000000000000000000000000000000000000000 [867.147618] [867.147618]LR:0xffffff8000eeff98: [867.147629]ff98**************************************************************** [867.147639]ffb8**************************************************************** [867.147650]ffd8**************************************************************** [867.147659]fff8****************a9bf7bfd910003fdaa1e03e0d503201f5800010095ca7426 [867.147668]0018d2800000528102e172a32ec1b9000001a8c17bfdd65f03c000ef1024ffffff80 [867.147677]0038a9bf7bfd910003fdaa1e03e0d503201f5800008095ca7418a8c17bfdd65f03c0 [867.147685]005800ef1038ffffff80000000000000000000000000000000000000000000000000 [867.147693]00780000000000000000000000000000000000000000000000000000000000000000 [867.147695] [867.147695]SP:0xffffffc00a4ffbc0: [867.147705]fbc0095b7860ffffff80000000000000000000ef2050ffffff800000000100000000 [867.147713]fbe0cde6e880ffffffc00000000100000000081376d0ffffff800a4ffc40ffffffc0 [867.147726]fc0000ef0018ffffff800a4ffc40ffffffc000ef0024ffffff804000014500000000 [867.147734]fc20ee9ae0000000004000012ffb0000000000000000000000800000000000000000 [867.147743]fc400a4ffc50ffffffc0080830f8ffffff800a4ffcd0ffffffc00818d2d0ffffff80 [867.147765]fc6000ef2000ffffff80095cd000ffffff80cde6e8c8ffffffc0cdce1140ffffffc0 [867.147774]fc8000000000000000000818d2a4ffffff8000ef2000ffffff80095cd000ffffff80 [867.147782]fca0cde6e8c8ffffffc0095cd000ffffff80000000000000000000ef2050ffffff80 [867.147785] [867.147785]X5:0xffffffc0f7f24ab8: [867.147794]4ab80000003f000000000000003f0000000000000000000000000000000000000000 [867.147803]4ad80000000000000000000000000000000000000000000000000000000000000000 [867.147811]4af80000000000000000000000000000000000000000000000000000000000000000 [867.147819]4b18afbe53560000000100000000000000000810d62cffffff800000000100000000 [867.147828]4b38000000070000000000000000000000000810dd18ffffff800000000000000000 [867.147836]4b580000000001400000000000000000e29300000000000000000000000000000000 [867.147845]4b780000000000000000d591d591dead4eadffffffff00000000ffffffffffffffff [867.147853]4b9800000000000000000008a70b000000010008a701000000010000000d00000000 [867.147855] [867.147855]X7:0xffffff8009628030: [867.147863]8030f26a3900ffffffc0000000000000000000000000000000000011000000000000 [867.147872]8050000f000000000000000000000000000000040000000000000008000000000000 [867.147880]80700000000000000000000000000000000000000001000000000000000000000000 [867.147889]80900000000000000001000000000000000100000002000000010000000100000000 [867.147897]80b000000000000000000927e623ffffff8004e804e8dead4eadffffffff00000000 [867.147905]80d0fffffffffffffffff2000000ffffffc000040000000000000000000100000000 [867.147914]80f000000000dead4eadffffffff00000000ffffffffffffffff09628108ffffff80 [867.147922]811009628108ffffff80000000000000000000000000000000000000000000000000 [867.147924] [867.147924]X8:0xffffff8008463bbc: [867.147933]3bbc9400054aaa1303e09400055452800000a94153f3f94013f5a8c37bfdd65f03c0 [867.147942]3bdcf940041317fffff6f940081317fffff4f9400c1317fffff2128002a017fffff5 [867.147950]3bfc71001c1f54000161f9405ce0f9400c00b4000140a9bf7bfdaa0603e2aa0403e1 [867.147959]3c1c910003fd940004cea8c17bfdd65f03c0128002a0d65f03c012800160d65f03c0 [867.147967]3c3ca9bb7bfd7100081f910003fda9025bf5aa0403f6a90153f3aa0603f5a90363f7 [867.147975]3c5cf9405cf354000181f9400660b4000a202a1503e2aa1603e19400047d52800000 [867.147984]3c7ca94153f3a9425bf5a94363f7a8c57bfdd65f03c071000c1f54000061f9400a60 [867.147992]3c9c17fffff371001c1f54000061f9400e6017ffffef35000820510004207100041f [867.147994] [867.147994]X10:0xffffff80097bfa1f: [867.148003]fa1c0000000000000000000000000000000000000000000000000000000000000000 [867.148011]fa3c0000000000000000000000000000000000000000000000000000000000000000 [867.148020]fa5c0000000000000000000000000000000000000000000000000000000000000000 [867.148028]fa7c000000000000000000000000000000000000000000000001000000003820205b [867.148037]fa9c312e37363934373478205d31203a353230303030303030303030303031303030 [867.148045]fabc5d3e342020726c203c5b203a6666666630386666666530303831303070205d3e [867.148054]fadc7461747334203a65303030300a353431303030300a303030742f0a67296d0a78 [867.148062]fafc3028202c0a2973203331200a3a34353a762033346973726537206e6f2e35332e [867.148071]fb1c2e34383135722e3132412820617453206e6f69745032502f5746202930204449 [867.148074] [867.148074]X16:0xffffff800813b184: [867.148083]b184fa4130029a9f87e2b4000202aa1303e2aa1403e1aa1503e0940e73e9b5000220 [867.148093]b1a4943672e08b1302b58b130294eb1302f754fffde152800002aa1603e1910163a0 [867.148101]b1c497fff7ff17ffffc6aa1303e252800001aa1503e0940e775aaa1303e017fffff0 [867.148110]b1e4f9402fa094021fc6128001a017ffffbc128000e017ffffba1280016017ffffb8 [867.148118]b204a9b67bfd910003fda90153f3f90013f5aa0003f5aa1e03e0aa0103f4aa0203f3 [867.148127]b224d503201fa903ffbfa904ffbfa905ffbfa906ffbfa907ffbfa908ffbff9004fbf [867.148135]b24497ffefb2340000c093407c00a94153f3f94013f5a8ca7bfdd65f03c0f000b220 [867.148143]b264913d0000910aa00079404401361000e1d00088a12a1303e4aa1403e32a1503e2 [867.148146] [867.148146]X18:0xffffff80897bfa17: [867.148157]fa14**************************************************************** [867.148167]fa34**************************************************************** [867.148178]fa54**************************************************************** [867.148189]fa74**************************************************************** [867.148199]fa94**************************************************************** [867.148210]fab4**************************************************************** [867.148221]fad4**************************************************************** [867.148232]faf4**************************************************************** [867.148243]fb14**************************************************************** [867.148244] [867.148244]X19:0xffffff8000eeff80: [867.148256]ff80**************************************************************** [867.148271]ffa0**************************************************************** [867.148282]ffc0**************************************************************** [867.148293]ffe0**************************************************************** [867.148303]0000a9bf7bfd910003fdaa1e03e0d503201f5800010095ca7426d2800000528102e1 [867.148311]002072a32ec1b9000001a8c17bfdd65f03c000ef1024ffffff80a9bf7bfd910003fd [867.148320]0040aa1e03e0d503201f5800008095ca7418a8c17bfdd65f03c000ef1038ffffff80 [867.148328]00600000000000000000000000000000000000000000000000000000000000000000 [867.148330] [867.148330]X20:0xffffff80095b77e0: [867.148338]77e00000000000000000000000000000000000000000000000000000000000000000 [867.148346]78000000000000000000000000000000000000000000000000000000000000000000 [867.148355]78200000000000000000000000000000000000000000000000000000000000000000 [867.148363]78400000000000000000000000000000000000000000000000000000000000000000 [867.148372]7860095b7860ffffff80095b7860ffffff80000000010000000000005dc000000000 [867.148380]788000000009756e694c000000780000000000000000000000000000000000000000 [867.148388]78a00000000000000000000000000000000000000000000000000000000000000000 [867.148397]78c00000000072696600796c66650000000000000000000000000000000000000000 [867.148398] [867.148398]X21:0xffffffc0cdce1040: [867.148407]1040746f6e2e6e672e6575622e752d646c6900006469dead000000000200dead0000 [867.148415]1060000000010000000000000000000000000000000000000000055aab5600000000 [867.148424]1080cdce1bc0ffffffc0cde6d909ffffffc0cde6d888ffffffc0cdce1bc8ffffffc0 [867.148433]10a00000000000000000000003dd6c62010e6c6b63612e747369666e6f6300000000 [867.148441]10c0cdce1080ffffffc06d6564736f5b206f5f73706f75646f6d005d656c00000000 [867.148449]10e000000000000000000000000f2e2e020200000000000000000000000000000000 [867.148458]11000000000000000000000000000000000000000000000000000000000000000000 [867.148466]11200000000000000000000000000000000000000000000000000000000000000000 [867.148468] [867.148468]X22:0xffffff80095b77e0: [867.148476]77e00000000000000000000000000000000000000000000000000000000000000000 [867.148484]78000000000000000000000000000000000000000000000000000000000000000000 [867.148493]78200000000000000000000000000000000000000000000000000000000000000000 [867.148501]78400000000000000000000000000000000000000000000000000000000000000000 [867.148510]7860095b7860ffffff80095b7860ffffff80000000010000000000005dc000000000 [867.148518]788000000009756e694c000000780000000000000000000000000000000000000000 [867.148526]78a00000000000000000000000000000000000000000000000000000000000000000 [867.148535]78c00000000072696600796c66650000000000000000000000000000000000000000 [867.148536] [867.148536]X24:0xffffff8000ef1fd0: [867.148545]1fd00000000000000000000000000000000000000000000000000000000000000000 [867.148553]1ff0000000000000000000000000000000000000000100000000095cd3a0ffffff80 [867.148562]2010095cd3a0ffffff8073706f6f646f6d5f00656c75000000000000000000000000 [867.148570]20300000000000000000000000000000000000000000000000000000000000000000 [867.148578]2050f089a080ffffffc0f26add00ffffffc0f2117e88ffffffc0f26add28ffffffc0 [867.148588]2070f26add00ffffffc0095c4c08ffffff80dbb66f78ffffffc00000000300000007 [867.148596]209000ef2000ffffff80000000000000000000000000000000000000000000000000 [867.148605]20b0f2f99c00ffffffc000000000000000000000000000000000f089ab40ffffffc0 [867.148606] [867.148606]X26:0xffffffc0cde6e800: [867.148615]e8000000000100000000d11d71a8ffffffc000000000000000000000000000000000 [867.148623]e820cf2e6030ffffffc000000000000000000000046d00000000095c42c8ffffff80 [867.148632]e8400000000000000000f7ec5e68ffffffc000000000000000000000000000000000 [867.148640]e8600000000000000000000000000000000000000000000000000000000000000000 [867.148649]e880f106a880ffffffc00000000100000000f089aa40ffffffc00000012400000000 [867.148657]e8a0000000240000000000ef1000ffffff80081375b0ffffff800000000000000000 [867.148665]e8c00000000000000000000000000000000000000000000000000000000000000000 [867.148674]e8e00000000000000000000000000000000000000000000000000000000000000000 [867.148675] [867.148675]X28:0xffffff8008137650: [867.148684]7650a90153f3aa0103f4aa0203f3aa1e03e0d503201ff0008f21913a1c21f9402280 [867.148693]7670b941d802aa1303e0940eb71d93407c00a94153f3a8c27bfdd65f03c0a9be7bfd [867.148701]7690910003fda90153f3aa0103f4aa0203f3aa1e03e0d503201ff0008f21913a1c21 [867.148710]76b0f9402280b9418802aa1303e0940eb70c93407c00a94153f3a8c27bfdd65f03c0 [867.148718]76d0a9be7bfd910003fda90153f3aa0003f4aa0203f3aa1e03e0d503201faa1303e0 [867.148727]76f0b0008b61f940228291068021940eb6fc93407c00a94153f3a8c27bfdd65f03c0 [867.148735]7710a9be7bfd910003fda90153f3aa0003f3aa0103f4aa1e03e0d503201f52801801 [867.148743]7730aa1403e072a048019401c11af9006260a94153f3a8c27bfdd65f03c0a9be7bfd [867.148745] [867.148745]X29:0xffffffc00a4ffbc0: [867.148754]fbc0095b7860ffffff80000000000000000000ef2050ffffff800000000100000000 [867.148763]fbe0cde6e880ffffffc00000000100000000081376d0ffffff800a4ffc40ffffffc0 [867.148771]fc0000ef0018ffffff800a4ffc40ffffffc000ef0024ffffff804000014500000000 [867.148780]fc20ee9ae0000000004000012ffb0000000000000000000000800000000000000000 [867.148790]fc400a4ffc50ffffffc0080830f8ffffff800a4ffcd0ffffffc00818d2d0ffffff80 [867.148798]fc6000ef2000ffffff80095cd000ffffff80cde6e8c8ffffffc0cdce1140ffffffc0 [867.148807]fc8000000000000000000818d2a4ffffff8000ef2000ffffff80095cd000ffffff80 [867.148815]fca0cde6e8c8ffffffc0095cd000ffffff80000000000000000000ef2050ffffff80 [867.148816] [867.148820]Processinsmod(pid:1163,stacklimit=0xffffffc00a4fc000) [867.148822]Stack:(0xffffffc00a4ffc40to0xffffffc00a500000) [867.148826]fc40:ffffffc00a4ffc50ffffff80080830f8ffffffc00a4ffcd0ffffff800818d2d0 [867.148829]fc60:ffffff8000ef2000ffffff80095cd000ffffffc0cde6e8c8ffffffc0cdce1140 [867.148832]fc80:0000000000000000ffffff800818d2a4ffffff8000ef2000ffffff80095cd000 [867.148834]fca0:ffffffc0cde6e8c8ffffff80095cd0000000000000000000ffffff8000ef2050 [867.148837]fcc0:0000000000000001ffffffc0cde6e880ffffffc00a4ffd00ffffff800813ab5c [867.148840]fce0:ffffff8000ef2000ffffffc00a4ffe58ffffffc0cde6e8c8ffffff80095cd000 [867.148843]fd00:ffffffc00a4ffe20ffffff800813b2b4000000000000000000000055736b60f0 [867.148846]fd20:00000000000000030000007fb096c8c400000000400000000000000000000015 [867.148849]fd40:000000000000011d0000000000000111ffffff8008ef2000ffffffc0cdc44380 [867.148851]fd60:0000000000000000000000000002c098ffffffc00a4ffe20ffffff8008f00000 [867.148854]fd80:000000000000000000000055736b60f0ffffffc000000064ffffff8000000072 [867.148857]fda0:ffffff800000006effffff800000003fffffff800000012400000000024000c0 [867.148860]fdc0:ffff81b400000030000003e80000000100000000000003e8000000000002c098 [867.148862]fde0:00000000633eccfc000000000000000000000000000000000000000000000000 [867.148865]fe00:0000000000000000000000000000000000000000000000000000000000000000 [867.148868]fe20:0000000000000000ffffff8008082f70000000000000000000000040ee9ae000 [867.148871]fe40:ffffffffffffffff00000000000000010000000000000002ffffff800bea0000 [867.148874]fe60:000000000002c098ffffff800becb9d8ffffff800becb8d0ffffff800beb7748 [867.148876]fe80:000000000000300000000000000030d800000000000000000000000000000000 [867.148879]fea0:00000000000004780000001a0000001900000000000000090000000000000004 [867.148882]fec0:000000000000000300000055736b60f000000000000000000000000000000003 [867.148884]fee0:0000000000000000000000000000021800000000000000010000000000000001 [867.148887]ff00:0000000000000111000000000000000300000002000000020000000000000000 [867.148890]ff20:00000000000010f0000000000000000000000000000000000000000000000040 [867.148892]ff40:00000055736cddb00000007fb096c8a000000000000000000000005585e6b600 [867.148895]ff60:00000055736b60f0000000000000000000000000000000000000005585e6b5d0 [867.148898]ff80:00000055736b2ef8000000000000000000000000000000000000000000000000 [867.148901]ffa0:00000000000000000000007fdbea3bd000000055736abdc00000007fdbea3bd0 [867.148903]ffc0:0000007fb096c8c4000000004000000000000000000000030000000000000111 [867.148906]ffe0:0000000000000000000000000000000000000000000000000000000000000000 [867.148907]Calltrace: [867.148911]Exceptionstack(0xffffffc00a4ffa70to0xffffffc00a4ffba0) [867.148913]fa60:ffffff8000ef00000000008000000000 [867.148916]fa80:ffffffc00a4ffc40ffffff8000ef0024ffffff80097c02f80000000000000002 [867.148918]faa0:ffffffc00a4ffac0000000020001b57c00000000000000000000000100000000 [867.148921]fac0:ffffffc00a4ffb60ffffff800810d674ffffffc00a4ffbc0ffffff8000ef1024 [867.148924]fae0:ffffffc0cdce10c0ffffff80095b78600000000000000000ffffff8000ef2050 [867.148927]fb00:0000000000000001ffffffc0cde6e88000000000000000000000000019760817 [867.148929]fb20:000000000000000700000000000000070000000000000001ffffffc0f7f24b38 [867.148932]fb40:0000000000000022ffffff80096280b0ffffff8008463c3c0000000005f5e0ff [867.148935]fb60:ffffff80097bfa9f00000000fffffffe0000000000000030000000000000000a [867.148937]fb80:00000000000224d60000000000000000ffffff800813b2040000007fb096c8a0 [867.148944][ ]init_oopsdemo+0x24/0x38[oops_module] [867.148953][ ]do_one_initcall+0x78/0x194 [867.148958][ ]do_init_module+0x64/0x1c0 [867.148962][ ]load_module+0x199c/0x1ed0 [867.148964][ ]SyS_finit_module+0xb0/0xbc [867.148968][ ]el0_svc_naked+0x24/0x28 [867.148972]Code:95ca7426d2800000528102e172a32ec1(b9000001) [867.148975]---[endtrace1983a52768236533]---
[867.140514]UnabletohandlekernelNULLpointerdereferenceatvirtualaddress00000000
这里能够简要的告诉是什么问题触发了oops,显然是由于访问非法地址00000000异常。如果是由代码直接调用BUG()/BUG_ON()一类的,还能给出源代码中触发的行号。
[867.141279]pgd=ffffffc0f0a65000 [867.141582][00000000]*pgd=0000000000000000,*pud=0000000000000000
pgd,pud试图访问的地址的页表信息,本例中为0。
[867.142164]Internalerror:Oops:96000045[#1]SMP
96000045表示错误码。后面[]内的数值是与页面有关的oops信息被显示的次数。之后显示内核的重要特性SMP和PREEMPT被显示的配置情况。这条信息所在的内核启用了SMP支持,所以只显示SMP。
96000045这种错误码我也是第一次见,内核中也没找到。一般见的最多的就是001,002这种形式的?有大佬知道原因的可以评论下。
Oops的错误代码根据错误的原因会有不同的定义,如果发现自己遇到的Oops和下面无法对应的话,最好去内核代码里查找:
* error_code:* bit 0 == 0 means no page found, 1 means protection fault* bit 1 == 0 means read, 1 means write* bit 2 == 0 means kernel, 1 means user-mode* bit 3 == 0 means data, 1 means instruction
[867.142592]Moduleslinkedin:oops_module(O+)[lastunloaded:hello_module]
Modules linked in为加载了的模块列表,hello_module为上次加载的模块。
[867.143006]CPU:4PID:1163Comm:insmodTainted:GO4.4.194+#7 [867.143649]Hardwarename:Firefly-RK3399Board(LinuxOpensource)(DT) [867.144236]task:ffffffc0cdc44380task.stack:ffffffc00a4fc000
CPU后的数字是错误所在逻辑CPU的编号,PID表示正在运行的进程ID1511,内核污染原因(G),内核版本( 4.4.194)。
内核污染原因包括私有驱动加载(P),模块强制加载(F),模块强制卸载(R),机器检查异常发生(M),检测到错误页(B)等。
如果涉及到了某项原因,就会显示为Tainted: G PF R这样。如果不存在问题,就会显示为Not Tainted。
其中Tainted的表示可以从内核中 kernel/panic.c 中找到:
Tainted | 描述 |
---|---|
‘G’ | if all modules loaded have a GPL or compatible license |
‘P’ | if any proprietary module has been loaded. Modules without a MODULE_LICENSE or with a MODULE_LICENSE that is not recognised by insmod as GPL compatible are assumed to be proprietary. |
‘F’ | if any module was force loaded by “insmod -f”. |
‘S’ | if the Oops occurred on an SMP kernel running on hardware that hasn’t been certified as safe to run multiprocessor. Currently this occurs only on various Athlons that are not SMP capable. |
‘R’ | if a module was force unloaded by “rmmod -f”. |
‘M’ | if any processor has reported a Machine Check Exception. |
‘B’ | if a page-release function has found a bad page reference or some unexpected page flags. |
‘U’ | if a user or user application specifically requested that the Tainted flag be set. |
‘D’ | if the kernel has died recently, i.e. there was an OOPS or BUG. |
‘W’ | if a warning has previously been issued by the kernel. |
‘C’ | if a staging module / driver has been loaded. |
‘I’ | if the kernel is working around a sever bug in the platform’s firmware (BIOS or similar). |
Hardware name表示硬件平台的名称。
task表示当前进程的地址, task.stack表示当前进程栈的地址。
[867.144761]PCisatinit_oopsdemo+0x24/0x38[oops_module] [867.145247]LRisatinit_oopsdemo+0x18/0x38[oops_module] [867.145732]pc:[]lr:[ ]pstate:40000145 [867.146386]sp:ffffffc00a4ffc40
init_oopsdemo+0x24/0x38[oops_module]表示错误发生的地址是oops_module中的init_oopsdemo函数的第44个字节,0x38表示init_oopsdemo函数的大小。
第3行,第4行分别是PC,LR,SP寄存器的具体地址。
[867.146688]x29:ffffffc00a4ffc40x28:ffffff80081376d0 [867.147178]x27:0000000000000001x26:ffffffc0cde6e880 [867.147491]x25:0000000000000001x24:ffffff8000ef2050 [867.147495]x23:0000000000000000x22:ffffff80095b7860 [867.147498]x21:ffffffc0cdce10c0x20:ffffff80095b7860 [867.147501]x19:ffffff8000ef0000x18:ffffff80897bfa97 [867.147504]x17:0000007fb096c8a0x16:ffffff800813b204Segmentationfau lt [867.147508]x15:0000000000000000root@firefly:~/mx14:00000000000224d6nt/module# [867.147511]x13:000000000000000ax12:0000000000000030 [867.147515]x11:00000000fffffffex10:ffffff80097bfa9f [867.147518]x9:0000000005f5e0ffx8:ffffff8008463c3c [867.147522]x7:ffffff80096280b0x6:0000000000000022 [867.147525]x5:ffffffc0f7f24b38x4:0000000000000001 [867.147528]x3:0000000000000007x2:0000000000000007 [867.147534]x1:0000000019760817x0:0000000000000000 [867.147536] [867.147536]PC:0xffffff8000eeffa4: [867.147550]ffa4**************************************************************** [867.147561]ffc4**************************************************************** [867.147572]ffe4********************************************************a9bf7bfd [867.147581]0004910003fdaa1e03e0d503201f5800010095ca7426d2800000528102e172a32ec1 [867.147590]0024b9000001a8c17bfdd65f03c000ef1024ffffff80a9bf7bfd910003fdaa1e03e0 [867.147599]0044d503201f5800008095ca7418a8c17bfdd65f03c000ef1038ffffff8000000000 [867.147607]00640000000000000000000000000000000000000000000000000000000000000000 [867.147616]00840000000000000000000000000000000000000000000000000000000000000000 [867.147618] [867.147618]LR:0xffffff8000eeff98: [867.147629]ff98**************************************************************** [867.147639]ffb8**************************************************************** [867.147650]ffd8**************************************************************** [867.147659]fff8****************a9bf7bfd910003fdaa1e03e0d503201f5800010095ca7426 [867.147668]0018d2800000528102e172a32ec1b9000001a8c17bfdd65f03c000ef1024ffffff80 [867.147677]0038a9bf7bfd910003fdaa1e03e0d503201f5800008095ca7418a8c17bfdd65f03c0 [867.147685]005800ef1038ffffff80000000000000000000000000000000000000000000000000 [867.147693]00780000000000000000000000000000000000000000000000000000000000000000 [867.147695] [867.147695]SP:0xffffffc00a4ffbc0: [867.147705]fbc0095b7860ffffff80000000000000000000ef2050ffffff800000000100000000 [867.147713]fbe0cde6e880ffffffc00000000100000000081376d0ffffff800a4ffc40ffffffc0 [867.147726]fc0000ef0018ffffff800a4ffc40ffffffc000ef0024ffffff804000014500000000 [867.147734]fc20ee9ae0000000004000012ffb0000000000000000000000800000000000000000 [867.147743]fc400a4ffc50ffffffc0080830f8ffffff800a4ffcd0ffffffc00818d2d0ffffff80 [867.147765]fc6000ef2000ffffff80095cd000ffffff80cde6e8c8ffffffc0cdce1140ffffffc0 [867.147774]fc8000000000000000000818d2a4ffffff8000ef2000ffffff80095cd000ffffff80 [867.147782]fca0cde6e8c8ffffffc0095cd000ffffff80000000000000000000ef2050ffffff80 [867.147785] [867.147785]X5:0xffffffc0f7f24ab8: [867.147794]4ab80000003f000000000000003f0000000000000000000000000000000000000000 [867.147803]4ad80000000000000000000000000000000000000000000000000000000000000000 [867.147811]4af80000000000000000000000000000000000000000000000000000000000000000 [867.147819]4b18afbe53560000000100000000000000000810d62cffffff800000000100000000 [867.147828]4b38000000070000000000000000000000000810dd18ffffff800000000000000000 [867.147836]4b580000000001400000000000000000e29300000000000000000000000000000000 [867.147845]4b780000000000000000d591d591dead4eadffffffff00000000ffffffffffffffff [867.147853]4b9800000000000000000008a70b000000010008a701000000010000000d00000000 [867.147855] [867.147855]X7:0xffffff8009628030: [867.147863]8030f26a3900ffffffc0000000000000000000000000000000000011000000000000 [867.147872]8050000f000000000000000000000000000000040000000000000008000000000000 [867.147880]80700000000000000000000000000000000000000001000000000000000000000000 [867.147889]80900000000000000001000000000000000100000002000000010000000100000000 [867.147897]80b000000000000000000927e623ffffff8004e804e8dead4eadffffffff00000000 [867.147905]80d0fffffffffffffffff2000000ffffffc000040000000000000000000100000000 [867.147914]80f000000000dead4eadffffffff00000000ffffffffffffffff09628108ffffff80 [867.147922]811009628108ffffff80000000000000000000000000000000000000000000000000 [867.147924] [867.147924]X8:0xffffff8008463bbc: [867.147933]3bbc9400054aaa1303e09400055452800000a94153f3f94013f5a8c37bfdd65f03c0 [867.147942]3bdcf940041317fffff6f940081317fffff4f9400c1317fffff2128002a017fffff5 [867.147950]3bfc71001c1f54000161f9405ce0f9400c00b4000140a9bf7bfdaa0603e2aa0403e1 [867.147959]3c1c910003fd940004cea8c17bfdd65f03c0128002a0d65f03c012800160d65f03c0 [867.147967]3c3ca9bb7bfd7100081f910003fda9025bf5aa0403f6a90153f3aa0603f5a90363f7 [867.147975]3c5cf9405cf354000181f9400660b4000a202a1503e2aa1603e19400047d52800000 [867.147984]3c7ca94153f3a9425bf5a94363f7a8c57bfdd65f03c071000c1f54000061f9400a60 [867.147992]3c9c17fffff371001c1f54000061f9400e6017ffffef35000820510004207100041f [867.147994] [867.147994]X10:0xffffff80097bfa1f: [867.148003]fa1c0000000000000000000000000000000000000000000000000000000000000000 [867.148011]fa3c0000000000000000000000000000000000000000000000000000000000000000 [867.148020]fa5c0000000000000000000000000000000000000000000000000000000000000000 [867.148028]fa7c000000000000000000000000000000000000000000000001000000003820205b [867.148037]fa9c312e37363934373478205d31203a353230303030303030303030303031303030 [867.148045]fabc5d3e342020726c203c5b203a6666666630386666666530303831303070205d3e [867.148054]fadc7461747334203a65303030300a353431303030300a303030742f0a67296d0a78 [867.148062]fafc3028202c0a2973203331200a3a34353a762033346973726537206e6f2e35332e [867.148071]fb1c2e34383135722e3132412820617453206e6f69745032502f5746202930204449 [867.148074] [867.148074]X16:0xffffff800813b184: [867.148083]b184fa4130029a9f87e2b4000202aa1303e2aa1403e1aa1503e0940e73e9b5000220 [867.148093]b1a4943672e08b1302b58b130294eb1302f754fffde152800002aa1603e1910163a0 [867.148101]b1c497fff7ff17ffffc6aa1303e252800001aa1503e0940e775aaa1303e017fffff0 [867.148110]b1e4f9402fa094021fc6128001a017ffffbc128000e017ffffba1280016017ffffb8 [867.148118]b204a9b67bfd910003fda90153f3f90013f5aa0003f5aa1e03e0aa0103f4aa0203f3 [867.148127]b224d503201fa903ffbfa904ffbfa905ffbfa906ffbfa907ffbfa908ffbff9004fbf [867.148135]b24497ffefb2340000c093407c00a94153f3f94013f5a8ca7bfdd65f03c0f000b220 [867.148143]b264913d0000910aa00079404401361000e1d00088a12a1303e4aa1403e32a1503e2 [867.148146] [867.148146]X18:0xffffff80897bfa17: [867.148157]fa14**************************************************************** [867.148167]fa34**************************************************************** [867.148178]fa54**************************************************************** [867.148189]fa74**************************************************************** [867.148199]fa94**************************************************************** [867.148210]fab4**************************************************************** [867.148221]fad4**************************************************************** [867.148232]faf4**************************************************************** [867.148243]fb14**************************************************************** [867.148244] [867.148244]X19:0xffffff8000eeff80: [867.148256]ff80**************************************************************** [867.148271]ffa0**************************************************************** [867.148282]ffc0**************************************************************** [867.148293]ffe0**************************************************************** [867.148303]0000a9bf7bfd910003fdaa1e03e0d503201f5800010095ca7426d2800000528102e1 [867.148311]002072a32ec1b9000001a8c17bfdd65f03c000ef1024ffffff80a9bf7bfd910003fd [867.148320]0040aa1e03e0d503201f5800008095ca7418a8c17bfdd65f03c000ef1038ffffff80 [867.148328]00600000000000000000000000000000000000000000000000000000000000000000 [867.148330] [867.148330]X20:0xffffff80095b77e0: [867.148338]77e00000000000000000000000000000000000000000000000000000000000000000 [867.148346]78000000000000000000000000000000000000000000000000000000000000000000 [867.148355]78200000000000000000000000000000000000000000000000000000000000000000 [867.148363]78400000000000000000000000000000000000000000000000000000000000000000 [867.148372]7860095b7860ffffff80095b7860ffffff80000000010000000000005dc000000000 [867.148380]788000000009756e694c000000780000000000000000000000000000000000000000 [867.148388]78a00000000000000000000000000000000000000000000000000000000000000000 [867.148397]78c00000000072696600796c66650000000000000000000000000000000000000000 [867.148398] [867.148398]X21:0xffffffc0cdce1040: [867.148407]1040746f6e2e6e672e6575622e752d646c6900006469dead000000000200dead0000 [867.148415]1060000000010000000000000000000000000000000000000000055aab5600000000 [867.148424]1080cdce1bc0ffffffc0cde6d909ffffffc0cde6d888ffffffc0cdce1bc8ffffffc0 [867.148433]10a00000000000000000000003dd6c62010e6c6b63612e747369666e6f6300000000 [867.148441]10c0cdce1080ffffffc06d6564736f5b206f5f73706f75646f6d005d656c00000000 [867.148449]10e000000000000000000000000f2e2e020200000000000000000000000000000000 [867.148458]11000000000000000000000000000000000000000000000000000000000000000000 [867.148466]11200000000000000000000000000000000000000000000000000000000000000000 [867.148468] [867.148468]X22:0xffffff80095b77e0: [867.148476]77e00000000000000000000000000000000000000000000000000000000000000000 [867.148484]78000000000000000000000000000000000000000000000000000000000000000000 [867.148493]78200000000000000000000000000000000000000000000000000000000000000000 [867.148501]78400000000000000000000000000000000000000000000000000000000000000000 [867.148510]7860095b7860ffffff80095b7860ffffff80000000010000000000005dc000000000 [867.148518]788000000009756e694c000000780000000000000000000000000000000000000000 [867.148526]78a00000000000000000000000000000000000000000000000000000000000000000 [867.148535]78c00000000072696600796c66650000000000000000000000000000000000000000 [867.148536] [867.148536]X24:0xffffff8000ef1fd0: [867.148545]1fd00000000000000000000000000000000000000000000000000000000000000000 [867.148553]1ff0000000000000000000000000000000000000000100000000095cd3a0ffffff80 [867.148562]2010095cd3a0ffffff8073706f6f646f6d5f00656c75000000000000000000000000 [867.148570]20300000000000000000000000000000000000000000000000000000000000000000 [867.148578]2050f089a080ffffffc0f26add00ffffffc0f2117e88ffffffc0f26add28ffffffc0 [867.148588]2070f26add00ffffffc0095c4c08ffffff80dbb66f78ffffffc00000000300000007 [867.148596]209000ef2000ffffff80000000000000000000000000000000000000000000000000 [867.148605]20b0f2f99c00ffffffc000000000000000000000000000000000f089ab40ffffffc0 [867.148606] [867.148606]X26:0xffffffc0cde6e800: [867.148615]e8000000000100000000d11d71a8ffffffc000000000000000000000000000000000 [867.148623]e820cf2e6030ffffffc000000000000000000000046d00000000095c42c8ffffff80 [867.148632]e8400000000000000000f7ec5e68ffffffc000000000000000000000000000000000 [867.148640]e8600000000000000000000000000000000000000000000000000000000000000000 [867.148649]e880f106a880ffffffc00000000100000000f089aa40ffffffc00000012400000000 [867.148657]e8a0000000240000000000ef1000ffffff80081375b0ffffff800000000000000000 [867.148665]e8c00000000000000000000000000000000000000000000000000000000000000000 [867.148674]e8e00000000000000000000000000000000000000000000000000000000000000000 [867.148675] [867.148675]X28:0xffffff8008137650: [867.148684]7650a90153f3aa0103f4aa0203f3aa1e03e0d503201ff0008f21913a1c21f9402280 [867.148693]7670b941d802aa1303e0940eb71d93407c00a94153f3a8c27bfdd65f03c0a9be7bfd [867.148701]7690910003fda90153f3aa0103f4aa0203f3aa1e03e0d503201ff0008f21913a1c21 [867.148710]76b0f9402280b9418802aa1303e0940eb70c93407c00a94153f3a8c27bfdd65f03c0 [867.148718]76d0a9be7bfd910003fda90153f3aa0003f4aa0203f3aa1e03e0d503201faa1303e0 [867.148727]76f0b0008b61f940228291068021940eb6fc93407c00a94153f3a8c27bfdd65f03c0 [867.148735]7710a9be7bfd910003fda90153f3aa0003f3aa0103f4aa1e03e0d503201f52801801 [867.148743]7730aa1403e072a048019401c11af9006260a94153f3a8c27bfdd65f03c0a9be7bfd [867.148745] [867.148745]X29:0xffffffc00a4ffbc0: [867.148754]fbc0095b7860ffffff80000000000000000000ef2050ffffff800000000100000000 [867.148763]fbe0cde6e880ffffffc00000000100000000081376d0ffffff800a4ffc40ffffffc0 [867.148771]fc0000ef0018ffffff800a4ffc40ffffffc000ef0024ffffff804000014500000000 [867.148780]fc20ee9ae0000000004000012ffb0000000000000000000000800000000000000000 [867.148790]fc400a4ffc50ffffffc0080830f8ffffff800a4ffcd0ffffffc00818d2d0ffffff80 [867.148798]fc6000ef2000ffffff80095cd000ffffff80cde6e8c8ffffffc0cdce1140ffffffc0 [867.148807]fc8000000000000000000818d2a4ffffff8000ef2000ffffff80095cd000ffffff80 [867.148815]fca0cde6e8c8ffffffc0095cd000ffffff80000000000000000000ef2050ffffff80 [867.148816]
上面打印出的这些都是异常发生时寄存器的值。
PC:PC也叫计数寄存器,用于存放下一条要执行的指令的地址,因此在子程序返回后,要将LR中的地址存入PC,即mov PC LR。
LR:子程序的返回地址:从子程序返回后,主程序继续执行的指令的地址称为子程序的返回地址.LR也叫链接寄存器,用于存放子程序的返回地址。在要进入子程序之前,先将子程序的返回地址存入LR
SP:SP也叫堆栈寄存器,用于存放要执行的数据。
X0~X7:传递子程序的参数和返回值,使用时不需要保存,多余的参数用堆栈传递,64位的返回结果保存在x0中。
X8:用于保存子程序的返回地址,使用时不需要保存。
X9~X15:临时寄存器,也叫可变寄存器,子程序使用时不需要保存。
X16~X17:子程序内部调用寄存器(IPx),使用时不需要保存,尽量不要使用。
X18:平台寄存器,它的使用与平台相关,尽量不要使用。
X19~X28:临时寄存器,子程序使用时必须保存。
X29:帧指针寄存器(FP),用于连接栈帧,使用时必须保存。
X30:链接寄存器(LR),用于保存子程序的返回地址。
X31:堆栈指针寄存器(SP),用于指向每个函数的栈顶。
[867.148820]Processinsmod(pid:1163,stacklimit=0xffffffc00a4fc000) [867.148822]Stack:(0xffffffc00a4ffc40to0xffffffc00a500000) [867.148826]fc40:ffffffc00a4ffc50ffffff80080830f8ffffffc00a4ffcd0ffffff800818d2d0 [867.148829]fc60:ffffff8000ef2000ffffff80095cd000ffffffc0cde6e8c8ffffffc0cdce1140 [867.148832]fc80:0000000000000000ffffff800818d2a4ffffff8000ef2000ffffff80095cd000 [867.148834]fca0:ffffffc0cde6e8c8ffffff80095cd0000000000000000000ffffff8000ef2050 [867.148837]fcc0:0000000000000001ffffffc0cde6e880ffffffc00a4ffd00ffffff800813ab5c [867.148840]fce0:ffffff8000ef2000ffffffc00a4ffe58ffffffc0cde6e8c8ffffff80095cd000 [867.148843]fd00:ffffffc00a4ffe20ffffff800813b2b4000000000000000000000055736b60f0 [867.148846]fd20:00000000000000030000007fb096c8c400000000400000000000000000000015 [867.148849]fd40:000000000000011d0000000000000111ffffff8008ef2000ffffffc0cdc44380 [867.148851]fd60:0000000000000000000000000002c098ffffffc00a4ffe20ffffff8008f00000 [867.148854]fd80:000000000000000000000055736b60f0ffffffc000000064ffffff8000000072 [867.148857]fda0:ffffff800000006effffff800000003fffffff800000012400000000024000c0 [867.148860]fdc0:ffff81b400000030000003e80000000100000000000003e8000000000002c098 [867.148862]fde0:00000000633eccfc000000000000000000000000000000000000000000000000 [867.148865]fe00:0000000000000000000000000000000000000000000000000000000000000000 [867.148868]fe20:0000000000000000ffffff8008082f70000000000000000000000040ee9ae000 [867.148871]fe40:ffffffffffffffff00000000000000010000000000000002ffffff800bea0000 [867.148874]fe60:000000000002c098ffffff800becb9d8ffffff800becb8d0ffffff800beb7748 [867.148876]fe80:000000000000300000000000000030d800000000000000000000000000000000 [867.148879]fea0:00000000000004780000001a0000001900000000000000090000000000000004 [867.148882]fec0:000000000000000300000055736b60f000000000000000000000000000000003 [867.148884]fee0:0000000000000000000000000000021800000000000000010000000000000001 [867.148887]ff00:0000000000000111000000000000000300000002000000020000000000000000 [867.148890]ff20:00000000000010f0000000000000000000000000000000000000000000000040 [867.148892]ff40:00000055736cddb00000007fb096c8a000000000000000000000005585e6b600 [867.148895]ff60:00000055736b60f0000000000000000000000000000000000000005585e6b5d0 [867.148898]ff80:00000055736b2ef8000000000000000000000000000000000000000000000000 [867.148901]ffa0:00000000000000000000007fdbea3bd000000055736abdc00000007fdbea3bd0 [867.148903]ffc0:0000007fb096c8c4000000004000000000000000000000030000000000000111 [867.148906]ffe0:0000000000000000000000000000000000000000000000000000000000000000
stack limit显示的大小为kstack内核选项指定的大小。Stack 是栈开头部分的值。
[867.148907]Calltrace: [867.148911]Exceptionstack(0xffffffc00a4ffa70to0xffffffc00a4ffba0) [867.148913]fa60:ffffff8000ef00000000008000000000 [867.148916]fa80:ffffffc00a4ffc40ffffff8000ef0024ffffff80097c02f80000000000000002 [867.148918]faa0:ffffffc00a4ffac0000000020001b57c00000000000000000000000100000000 [867.148921]fac0:ffffffc00a4ffb60ffffff800810d674ffffffc00a4ffbc0ffffff8000ef1024 [867.148924]fae0:ffffffc0cdce10c0ffffff80095b78600000000000000000ffffff8000ef2050 [867.148927]fb00:0000000000000001ffffffc0cde6e88000000000000000000000000019760817 [867.148929]fb20:000000000000000700000000000000070000000000000001ffffffc0f7f24b38 [867.148932]fb40:0000000000000022ffffff80096280b0ffffff8008463c3c0000000005f5e0ff [867.148935]fb60:ffffff80097bfa9f00000000fffffffe0000000000000030000000000000000a [867.148937]fb80:00000000000224d60000000000000000ffffff800813b2040000007fb096c8a0 [867.148944][]init_oopsdemo+0x24/0x38[oops_module] [867.148953][ ]do_one_initcall+0x78/0x194 [867.148958][ ]do_init_module+0x64/0x1c0 [867.148962][ ]load_module+0x199c/0x1ed0 [867.148964][ ]SyS_finit_module+0xb0/0xbc [867.148968][ ]el0_svc_naked+0x24/0x28
栈回溯信息,可以从中看出函数调用关系
[867.148972]Code:95ca7426d2800000528102e172a32ec1(b9000001) [867.148975]---[endtrace1983a52768236533]--- Segmentationfault
code是错误发生时PC指向的地址处的开头20字节的代码,括号里的是出错的具体指令。
如何根据OOPS找出bug
确定出错位置在内核函数还是驱动
System.map文件记录了所有符号的运行地址,这里的符号可以理解成函数名和变量。
System.map一般在内核编译完成后,根目录下生成。
0000000000000000A__rela_size 0000000000000000A_kernel_flags_le_hi32 0000000000000000A_kernel_offset_le_hi32 0000000000000000A_kernel_size_le_hi32 000000000000000aA_kernel_flags_le_lo32 0000000000000200APECOFF_FILE_ALIGNMENT 0000000000080000A_kernel_offset_le_lo32 000000000159e638A__rela_offset 0000000001800000A_kernel_size_le_lo32 ffffff8008080000t_head ffffff8008080000T_text ffffff8008080800T__exception_text_start ffffff8008080800T_stext ffffff8008080800Tdo_undefinstr ffffff8008080a18Tdo_sysinstr ffffff8008080ab4Tdo_mem_abort ffffff8008080b60Tdo_sp_pc_abort ffffff8008080c34Tdo_debug_exceptio ............. ffffff8009879a48b__key.30413 ffffff8009879a48b__key.30416 ffffff8009879a48b__key.48814 ffffff8009879a48b__key.48818 ffffff8009879a48b__key.48819 ffffff8009879a48b__key.48820 ffffff8009879a48b__key.48821 ffffff800987a000Bidmap_pg_dir ffffff800987d000Bswapper_pg_dir ffffff800987f000Btramp_pg_dir ffffff8009880000B_end
System.map中内核函数的范围是:ffffff8008080000 ~ ffffff8009880000。而PC出错的位置是ffffff8000ef0024。
所以,可以判定不是内核函数出错引起的,而是某个驱动模块。
如果把oops_module.ko直接编译进ko中,就是内核引起的错误了。PC出错时的地址也会刚好在System.map中。
反汇编驱动文件
而OOPS信息也告诉我们,错误是出在了init_oopsdemo。
[17981.657899]PCisatinit_oopsdemo+0x24/0x38[oops_module] [17981.658385]LRisatinit_oopsdemo+0x18/0x38[oops_module]
那如果OOPS没有打印出出错驱动的名字呢?
我们可以使用 cat /proc/kallsyms > kallsyms.txt命令,在kallsyms.txt中找出与PC值接近的符号。kallsyms.txt内容如下。
ffffff8008080800Tdo_undefinstr ffffff8008080800T_stext ffffff8008080800T__exception_text_start ffffff8008080a18Tdo_sysinstr ffffff8008080ab4Tdo_mem_abort ffffff8008080b60Tdo_sp_pc_abort ffffff8008080c34Tdo_debug_exception ......... ffffff80094cfc0cTsparse_mem_map_populate ffffff80094cfc64T_einittext 0000000000000000aoops_module.c[oops_module] ffffff8000ef0000t$x[oops_module] ffffff8000ef0000tinit_oopsdemo[oops_module] ffffff8000ef0030t$d[oops_module] ffffff8000ef0038t$x[oops_module] ffffff8000ef0038tcleanup_oopsdemo[oops_module] ffffff8000ef0058t$d[oops_module] ffffff800bee40c8?__UNIQUE_ID_license2[oops_module] ffffff800bee40d4?__UNIQUE_ID_author1[oops_module] ffffff800bee40e3?__UNIQUE_ID_license0[oops_module] ffffff800befb368n$d[oops_module] 0000000000000000aoops_module.mod.c[oops_module] ffffff8000ef2000d$d[oops_module] ffffff800bee40f8?$d[oops_module] ffffff800bee40f8?__module_depends[oops_module] ffffff800bee4101?__UNIQUE_ID_vermagic0[oops_module] ffffff8000ef2000d__this_module[oops_module] ffffff8000ef0038tcleanup_module[oops_module] ffffff8000ef0000tinit_module[oops_module] ffffff800818d0acuprintk[oops_module] ffffff800808e770u_mcount[oops_module]
从上面可以看出,PC的值和ffffff8000ef0058很接近。所以,基本可以确定出错的模块是oops_module。而这个模块正是我自己写的例程。
接下来,我们就要准备反汇编oops_module.ko了,根据反汇编可以进一步确认出错的行数。
aarch64-linux-gnu-objdump-Doops_module.ko>oops_module.dis
oops_module.dis 内容如下
oops_module.ko:fileformatelf64-littleaarch64 Disassemblyofsection.note.gnu.build-id: 0000000000000000<.note.gnu.build-id>: 0:00000004.inst0x00000004;undefined 4:00000014.inst0x00000014;undefined 8:00000003.inst0x00000003;undefined c:00554e47.inst0x00554e47;undefined 10:70d55614adrx20,fffffffffffaaad3<__UNIQUE_ID_vermagic0+0xfffffffffffaaa9a> 14:56a7eb64.inst0x56a7eb64;undefined 18:a66fbdf8.inst0xa66fbdf8;undefined 1c:2b31c03fcmnw1,w17,sxtw 20:bd9e1ffe.inst0xbd9e1ffe;undefined Disassemblyofsection.text: 0000000000000000: 0:a9bf7bfdstpx29,x30,[sp,#-16]! 4:910003fdmovx29,sp 8:aa1e03e0movx0,x30 c:94000000bl0<_mcount> 10:58000100ldrx0,30 14:94000000bl0 18:d2800000movx0,#0x0//#0 1c:528102e1movw1,#0x817//#2071 20:72a32ec1movkw1,#0x1976,lsl#16 24:b9000001strw1,[x0] 28:a8c17bfdldpx29,x30,[sp],#16 2c:d65f03c0ret ... 0000000000000038 : 38:a9bf7bfdstpx29,x30,[sp,#-16]! 3c:910003fdmovx29,sp 40:aa1e03e0movx0,x30 44:94000000bl0<_mcount> 48:58000080ldrx0,58 4c:94000000bl0 50:a8c17bfdldpx29,x30,[sp],#16 54:d65f03c0ret ... Disassemblyofsection.modinfo: 0000000000000000<__UNIQUE_ID_license2>: 0:6563696cfnmlsz12.h,p2/m,z11.h,z3.h 4:3d65736eldrb14,[x27,#2396] 8:004c5047.inst0x004c5047;undefined
根据反汇编和之前 PC is at init_oopsdemo+0x24/0x38 [oops_module],可以确定发生错误的是0x24的位置。
24:b9000001strw1,[x0]#将w1寄存器的值,传送到地址值为x0的(存储器)内存中
而根据18: d2800000 mov x0, #0x0 // #0 可以确定x0 为0。
到这里也基本可以确定,是w1的值赋值给0地址时出错了。
其他方法
gdb
➜oops_moduleaarch64-linux-gnu-gdb-q./oops_module.ko Readingsymbolsfrom./oops_module.ko...done. (gdb)list*init_oopsdemo+0x24 0x4cisininit_oopsdemo(/home/zhongyi/code/module/oops_module/oops_module.c:10). 5MODULE_AUTHOR("ZHONGYI"); 6 7staticintinit_oopsdemo(void) 8{ 9printk("oopsmoduleinit! "); 10*((int*)0x00)=0x19760817; 11return0; 12} 13 14module_init(init_oopsdemo); (gdb)
addr2line
Linux下addr2line命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息(-g)的执行程序出现crash时(core dumped),可使用addr2line命令快速定位出错的位置。
如果无法确定文件名或函数名,addr2line将在它们的位置打印两个问号;如果无法确定行号,addr2line将打印0或一个问号。
参数说明:
-a:在函数名、文件名和行号信息之前,以十六进制形式显示地址。
-b:指定目标文件的格式为bfdname。
-C:将低级别的符号名解码为用户级别的名字。
-e:指定需要转换地址的可执行文件名,默认文件是a.out。
-f:在显示文件名、行号信息的同时显示函数名。
-s:仅显示每个文件名(the base of each file name)去除目录名。
-i:如果需要转换的地址是一个内联函数,则还将打印返回第一个非内联函数的信息。
-j:读取指定section的偏移而不是绝对地址。
-p:使打印更加人性化:每个地址(location)的信息都打印在一行上。
-r:启用或禁用递归量限制。
--help:打印帮助信息。
--version:打印版本号。
➜oops_moduleaarch64-linux-gnu-addr2line-e./oops_module.ko-p-f0x24 init_oopsdemoat/home/zhongyi/code/module/oops_module/oops_module.c:10 ➜oops_modulecat/home/zhongyi/code/module/oops_module/oops_module.c|tail-n+5|head-n10 MODULE_AUTHOR("ZHONGYI"); staticintinit_oopsdemo(void) { printk("oopsmoduleinit! "); *((int*)0x00)=0x19760817; return0; } module_init(init_oopsdemo);
decodecode
在linux内核里面有很多脚本工具,位于linux/scripts/,里面有一个decodecode工具可以用来转换机器码,decodecode脚本可以在没有源代码或符号表的情况下,将oops异常的log作为输入就可以解析出错误位置的汇编代码。
oops_log.txt内容如下
calltrace: [867.148911]Exceptionstack(0xffffffc00a4ffa70to0xffffffc00a4ffba0) [867.148913]fa60:ffffff8000ef00000000008000000000 [867.148916]fa80:ffffffc00a4ffc40ffffff8000ef0024ffffff80097c02f80000000000000002 [867.148918]faa0:ffffffc00a4ffac0000000020001b57c00000000000000000000000100000000 [867.148921]fac0:ffffffc00a4ffb60ffffff800810d674ffffffc00a4ffbc0ffffff8000ef1024 [867.148924]fae0:ffffffc0cdce10c0ffffff80095b78600000000000000000ffffff8000ef2050 [867.148927]fb00:0000000000000001ffffffc0cde6e88000000000000000000000000019760817 [867.148929]fb20:000000000000000700000000000000070000000000000001ffffffc0f7f24b38 [867.148932]fb40:0000000000000022ffffff80096280b0ffffff8008463c3c0000000005f5e0ff [867.148935]fb60:ffffff80097bfa9f00000000fffffffe0000000000000030000000000000000a [867.148937]fb80:00000000000224d60000000000000000ffffff800813b2040000007fb096c8a0 [867.148944][]init_oopsdemo+0x24/0x38[oops_module] [867.148953][ ]do_one_initcall+0x78/0x194 [867.148958][ ]do_init_module+0x64/0x1c0 [867.148962][ ]load_module+0x199c/0x1ed0 [867.148964][ ]SyS_finit_module+0xb0/0xbc [867.148968][ ]el0_svc_naked+0x24/0x2
$ARCH=arm64CROSS_COMPILE=/home/zhongyi/code/rk3399_linux_release_v2.5.1_20210301/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-./scripts/decodecode< /home/zhongyi/code/module/oops_module/oops_log.txt Code: 95ca7426 d2800000 528102e1 72a32ec1 (b9000001) All code ======== 0: 95ca7426 .word 0x95ca7426 4: d2800000 .word 0xd2800000 8: 528102e1 .word 0x528102e1 c: 72a32ec1 .word 0x72a32ec1 10:* b9000001 .word 0xb9000001 <-- trapping instruction Code starting with the faulting instruction =========================================== 0: b9000001 .word 0xb9000001
执行脚本后,就可以得到出错的汇编代码。trapping instruction指出了出错的地址。根据oop_module.ko的反汇编可以知道出错的位置24: b9000001 str w1, [x0]。
注意:脚本认为该机器码是跟host结构相同的原生机器码,想要跨架构翻译要指定架构和交叉工具链。
faddr2line
内核开发者为了方便问题的排查,也经常需要根据内核栈,快速定位导致问题发生的代码位置。所以,Linux 内核维护了一个 faddr2line 脚本,根据函数名+偏移量输出源码文件名和行号。
在使用这个脚本之前,还需要注意两个前提条件:
第一,带有调试信息的内核文件,一般名字为 vmlinux(注意,/boot 目录下面的 vmlinz 是压缩后的内核,不可以直接拿来使用)。
第二,系统中需要安装 awk、readelf、addr2line、size、nm 等命令。
对于第二个条件,这些命令都包含在 binutils 软件包中,只需要执行 apt 或者 dnf 命令安装即可。
而对第一个条件中的内核调试信息,各个主要的发行版也都提供了相应的软件仓库,你可以根据文档进行安装。比如,对于 Ubuntu 来说,你可以执行下面的命令安装调试信息:
codename=$(lsb_release-cs) sudotee/etc/apt/sources.list.d/ddebs.list<< EOF deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse EOF sudo apt-get install -y ubuntu-dbgsym-keyring sudo apt-get update sudo apt-get install -y linux-image-$(uname -r)-dbgsym
由于我们这里的oops 是发生在ko中,而不是内核。因此,使用faddr2line指定oops_module.ko 即可。
➜kernelgit:(firefly)✗scripts/faddr2line/home/zhongyi/code/module/oops_module/oops_module.koinit_oopsdemo+0x24 init_oopsdemo+0x24/0x30: init_oopsdemoat/home/zhongyi/code/module/oops_module/oops_module.c:18
如果oops发生在内核中,将oops_module.ko 换成对应的vmlinux即可。
最后,贴下oops_module.c的源代码,感兴趣的大家可以自己写一个分析下。
#include#include MODULE_LICENSE("BSD/GPL"); MODULE_AUTHOR("ZHONGYI"); staticintinit_oopsdemo(void) { printk("oopsmoduleinit! "); *((int*)0x00)=0x19760817; return0; } module_init(init_oopsdemo); staticvoidcleanup_oopsdemo(void) { printk("oopsmoduleexit! "); } module_exit(cleanup_oopsdemo); MODULE_LICENSE("GPL");
审核编辑:汤梓红
-
内核
+关注
关注
3文章
1372浏览量
40275 -
cpu
+关注
关注
68文章
10854浏览量
211569 -
Oops
+关注
关注
0文章
4浏览量
3308
原文标题:如何解读内核的oops
文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论