0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解读内核的oops

嵌入式与Linux那些事 来源:嵌入式与Linux那些事 作者: 仲一 2022-10-21 12:39 1919次阅读

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

    文章

    1405

    浏览量

    40983
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11015

    浏览量

    215337
  • Oops
    +关注

    关注

    0

    文章

    4

    浏览量

    3337

原文标题:如何解读内核的oops

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
    相关推荐
    热点推荐

    Linux编程时遇到Oops提示该如何排查?

    各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了“Oops”提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种高效的Linux编程的故障排除方法。
    的头像 发表于 11-28 16:52 9203次阅读
    Linux编程时遇到<b class='flag-5'>Oops</b>提示该如何排查?

    何解读运放数据规格书

    在理解了上面的主要的运放非理想参数后,再读运放的数据规格书应该就不难了,下面我们以比较常见的LM321集成运放为例,来过一遍如何解读运放数据规格书。
    发表于 02-02 14:00 4174次阅读
    如<b class='flag-5'>何解读</b>运放数据规格书

    multisim的灵敏度分析结果如何解读

    本帖最后由 test753 于 2015-4-7 20:28 编辑 结果如何解读?教下吧
    发表于 04-07 20:10

    何解决cortex内核hardfault错误问题?

    何解决cortex内核hardfault错误问题?
    发表于 01-26 06:42

    CH341par Linux端DEMO运行错误是什么原因?如何解决?

    测试usb转i2c功能。Ubuntu16.04,内核版本4.13.我尝试write data时,内核出现oops.定位到如下代码:在驱动中:get_user时出现oops:检查了一下发
    发表于 07-01 06:20

    内核oops的根本原因是什么?我们如何调试内核oops

    Broadcom 交换机设备连接到我们主板上带有 PCIe 的 T1042。开关工作在 EP 模式。linux内核版本是4.14。在检测到 pcie 错误的现场卡中引发内核 oops。但是这个
    发表于 04-20 06:19

    Linux内核解读入门

    Linux内核解读入门关键词:Linux, 内核,源代码一.核心源程序的文件组织: 1. Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核
    发表于 01-16 14:40 103次下载

    系统设计人员如何解读产品说明书规范

    作为应用工程师,我遇到过系统设计人员针对如何解读产品说明书规范提出的大量问题。就在我认为我已经掌握如何确定规范以及它们如何造成设计误差时,我总会从客户的 TI E2E 论坛帖子、电话或电子邮件中获得与我的理解不同的内容。
    发表于 04-08 03:38 2199次阅读
    系统设计人员如<b class='flag-5'>何解读</b>产品说明书规范

    浅谈Linux内核解读入门

    针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制; 一.核心源程序的文件组织: 1.Linux核
    发表于 11-08 10:06 2次下载

    你了解Linux内核中的常见符号?

    一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。
    发表于 05-15 15:47 657次阅读
    你了解Linux<b class='flag-5'>内核</b>中的常见符号?

    linux内核中的Oops

    真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们
    发表于 04-02 14:31 638次阅读

    内核oops错误原因及处理方法

    最近在调试设备时,遇到了一个偶发的开机死机问题。通过查看输出日志,发现内核报告了oops错误,如下所示(中间省略了部分日志,以......代替)。
    的头像 发表于 05-12 16:20 8610次阅读

    怎么解读内核oops

    Oops的错误代码根据错误的原因会有不同的定义,如果发现自己遇到的Oops和下面无法对应的话,最好去内核代码里查找
    的头像 发表于 02-17 16:08 1491次阅读

    深入分析内核panic的内核错误处理方案

    die函数主要执行oops相关流程,且若异常为中断流程中触发或设置了panic_on_oops选项,则进一步通过panic将系统挂起。
    发表于 04-14 15:18 4230次阅读

    Linux内核第一版开源代码解读

    《Exploring the internals of Linux v0.01》是一篇解读 Linux 内核第一版开源代码的文章。此文今天在 Reddit 和 Hacker News 都冲上了热门。
    发表于 08-15 09:47 809次阅读

    ElfBoard技术贴|如何调整eMMC存储分区

    ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频高达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

    ElfBoard
    18小时前
    413

    米尔基于MYD-YG2LX系统启动时间优化应用笔记

    1.概述MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600/DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、

    米尔电子
    1天前
    250

    运放技术——基本电路分析

    虚短和虚断的概念由于运放的电压放大倍数很大,一般通用型运算放大器的开环电压放大倍数都在80dB以上。而运放的输出电压是有限的,一般在10V~14V。因此运放的差模输入电压不足1mV,两输入端近似等电位,相当于“短路”。开环电压放大倍数越大,两输入端的电位越接近相等。“虚短”是指在分析运算放大器处于线性状态时,可把两输入端视为等电位,这一特性称为虚假短路,简称

    张飞实战电子官方
    1天前
    313

    飞凌嵌入式携手中移物联,谱写全国产化方案新生态

    4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”在深圳成功举办。中移物联网有限公司(以下简称“中移物联”)携OneOS操作系统与飞凌嵌入式共同推出的工业级核心板亮相会议展区,操作系统产品部高级专家严镭受邀作《OneOS工业操作系统——助力国产化智能制造》主题演讲。

    飞凌嵌入式
    1天前
    724

    ATA-2022B高压放大器在螺栓松动检测中的应用

    实验名称:ATA-2022B高压放大器在螺栓松动检测中的应用实验方向:超声检测实验设备:ATA-2022B高压放大器、函数信号发生器,压电陶瓷片,数据采集卡,示波器,PC等实验内容:本研究基于振动声调制的螺栓松动检测方法,其中低频泵浦波采用单频信号,而高频探测波采用扫频信号,利用泵浦波和探测波在接触面的振动声调制响应对螺栓的松动程度进行检测。通过螺栓松动检测

    Aigtek安泰电子
    2天前
    1k

    MOS管驱动电路——电机干扰与防护处理

    此电路分主电路(完成功能)和保护功能电路。MOS管驱动相关知识:1、跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压(Vbe类似)高于一定的值,就可以了。MOS管和晶体管向比较c,b,e—–>d(漏),g(栅),s(源)。2、NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以

    张飞实战电子官方
    2天前
    352

    压敏(MOV)在电机上的应用剖析

    一前言有刷直流电机是一种较为常见的直流电机。它的主要特点包括:1.结构相对简单,由定子、转子、电刷和换向器等组成;2.通过电刷与换向器的接触来实现电流的换向,从而使电枢绕组中的电流方向周期性改变,保证电机持续运转;3.具有调速性能较好等优点,可以通过改变电压等方式较为方便地调节转速。有刷直流电机在许多领域都有应用,比如一些电动工具、玩具、小型机械等。但它也存

    深圳市韬略科技有限公司
    2天前
    240

    硬件原理图学习笔记

    这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚一个确定的状态三极管:反向三极管(gpio输出高电平,NP两端导通,被控制端导通,电压为0)->NPN正向三极管(gpio输出低电平,PN两端导通,被控制端导通,

    张飞实战电子官方
    04-30 18:40
    419

    TurMass™ vs LoRa:无线通讯模块的革命性突破

    TurMass™凭借其高传输速率、强大并发能力、双向传输、超强抗干扰能力、超远传输距离、全国产技术、灵活组网方案以及便捷开发等八大优势,在无线通讯领域展现出强大的竞争力。

    道生物联
    2天前
    786

    RZT2H CR52双核BOOT流程和例程代码分析

    RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

    RA生态工作室
    04-03 17:14
    2.1k

    干簧继电器在RF信号衰减中的应用与优势

    在电子测试领域,RF(射频)评估是不可或缺的一部分。无论是研发阶段的性能测试,还是生产环节的质量检测,RF测试设备都扮演着关键角色。然而,要实现精准的RF评估,测试设备需要一种特殊的电路——衰减电路。这些电路的作用是调整RF信号的强度,以便测试设备能够准确地评估RF组件和RF电路的各个方面。衰减器的挑战衰减器的核心功能是校准RF信号的强度。为了实现这一点,衰

    斯丹麦德电子
    04-30 11:33
    728

    ElfBoard嵌入式教育科普|ADC接口全面解析

    当代信息技术体系中,嵌入式系统接口作为数据交互的核心基础设施,构成了设备互联的神经中枢。基于标准化通信协议与接口规范的技术架构,实现了异构设备间的高效数据交换与智能化协同作业。本文选取模数转换接口ADC作为技术解析切入点,通过系统阐释其工作机理、性能特征及重要参数,为嵌入式学习者爱好者构建全维度接口技术认知框架。

    ElfBoard
    04-30 09:34
    394

    深入理解C语言:C语言循环控制

    在C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循环控制语句,如break、continue和goto,用于改变程序的执行流程,使代码更加灵活和可控。本文将详细介绍这些语句的作用及其应用场景,并通过示例代码进行说明。Part.1break语句C语言中break语句有两种

    合众恒跃
    04-29 18:49
    523

    第 21 届(顺德)家电电源与智能控制技术研讨会圆满落幕--其利天下斩获颇丰

    2025年4月25日,其利天下应大比特之邀出席第21届(顺德)家电电源与智能控制技术研讨会,已圆满落幕。一、演讲回顾我司研发总监冯建武先生在研讨会上发表了主题为《重新定义风扇驱动:一套算法兼容百种电机的有效磁链观测器方案》的演讲,介绍了我司研发自适应技术算法(简称),该方案搭载有效磁链观测器,适配百种电机类型,结合FOC算法可实现免调参稳定启动、低速静音控制

    其利天下技术
    04-28 19:29
    1.4k

    来自资深工程师对ELF 2开发板的产品测评

    来自资深工程师对ELF 2开发板的使用测评

    ElfBoard
    04-28 15:03
    550