0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何解讀內(nèi)核的oops

嵌入式與Linux那些事 ? 來(lái)源:嵌入式與Linux那些事 ? 作者: 仲一 ? 2022-10-21 12:39 ? 次閱讀

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

這里能夠簡(jiǎn)要的告訴是什么問(wèn)題觸發(fā)了oops,顯然是由于訪問(wèn)非法地址00000000異常。如果是由代碼直接調(diào)用BUG()/BUG_ON()一類的,還能給出源代碼中觸發(fā)的行號(hào)。

[867.141279]pgd=ffffffc0f0a65000
[867.141582][00000000]*pgd=0000000000000000,*pud=0000000000000000

pgd,pud試圖訪問(wèn)的地址的頁(yè)表信息,本例中為0。

[867.142164]Internalerror:Oops:96000045[#1]SMP

96000045表示錯(cuò)誤碼。后面[]內(nèi)的數(shù)值是與頁(yè)面有關(guān)的oops信息被顯示的次數(shù)。之后顯示內(nèi)核的重要特性SMP和PREEMPT被顯示的配置情況。這條信息所在的內(nèi)核啟用了SMP支持,所以只顯示SMP。

96000045這種錯(cuò)誤碼我也是第一次見(jiàn),內(nèi)核中也沒(méi)找到。一般見(jiàn)的最多的就是001,002這種形式的?有大佬知道原因的可以評(píng)論下。

Oops的錯(cuò)誤代碼根據(jù)錯(cuò)誤的原因會(huì)有不同的定義,如果發(fā)現(xiàn)自己遇到的Oops和下面無(wú)法對(duì)應(yīng)的話,最好去內(nèi)核代碼里查找:

* 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后的數(shù)字是錯(cuò)誤所在邏輯CPU的編號(hào),PID表示正在運(yùn)行的進(jìn)程ID1511,內(nèi)核污染原因(G),內(nèi)核版本( 4.4.194)。

內(nèi)核污染原因包括私有驅(qū)動(dòng)加載(P),模塊強(qiáng)制加載(F),模塊強(qiáng)制卸載(R),機(jī)器檢查異常發(fā)生(M),檢測(cè)到錯(cuò)誤頁(yè)(B)等。

如果涉及到了某項(xiàng)原因,就會(huì)顯示為Tainted: G PF R這樣。如果不存在問(wèn)題,就會(huì)顯示為Not Tainted。

其中Tainted的表示可以從內(nèi)核中 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表示硬件平臺(tái)的名稱。

task表示當(dāng)前進(jìn)程的地址, task.stack表示當(dāng)前進(jìn)程棧的地址。

[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]表示錯(cuò)誤發(fā)生的地址是oops_module中的init_oopsdemo函數(shù)的第44個(gè)字節(jié),0x38表示init_oopsdemo函數(shù)的大小。

第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]

上面打印出的這些都是異常發(fā)生時(shí)寄存器的值。

PC:PC也叫計(jì)數(shù)寄存器,用于存放下一條要執(zhí)行的指令的地址,因此在子程序返回后,要將LR中的地址存入PC,即mov PC LR。

LR:子程序的返回地址:從子程序返回后,主程序繼續(xù)執(zhí)行的指令的地址稱為子程序的返回地址.LR也叫鏈接寄存器,用于存放子程序的返回地址。在要進(jìn)入子程序之前,先將子程序的返回地址存入LR

SP:SP也叫堆棧寄存器,用于存放要執(zhí)行的數(shù)據(jù)。

X0~X7:傳遞子程序的參數(shù)和返回值,使用時(shí)不需要保存,多余的參數(shù)用堆棧傳遞,64位的返回結(jié)果保存在x0中。

X8:用于保存子程序的返回地址,使用時(shí)不需要保存。

X9~X15:臨時(shí)寄存器,也叫可變寄存器,子程序使用時(shí)不需要保存。

X16~X17:子程序內(nèi)部調(diào)用寄存器(IPx),使用時(shí)不需要保存,盡量不要使用。

X18:平臺(tái)寄存器,它的使用與平臺(tái)相關(guān),盡量不要使用。

X19~X28:臨時(shí)寄存器,子程序使用時(shí)必須保存。

X29:幀指針寄存器(FP),用于連接棧幀,使用時(shí)必須保存。

X30:鏈接寄存器(LR),用于保存子程序的返回地址。

X31:堆棧指針寄存器(SP),用于指向每個(gè)函數(shù)的棧頂。

[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內(nèi)核選項(xiàng)指定的大小。Stack 是棧開(kāi)頭部分的值。

[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

棧回溯信息,可以從中看出函數(shù)調(diào)用關(guān)系

[867.148972]Code:95ca7426d2800000528102e172a32ec1(b9000001)
[867.148975]---[endtrace1983a52768236533]---
Segmentationfault

code是錯(cuò)誤發(fā)生時(shí)PC指向的地址處的開(kāi)頭20字節(jié)的代碼,括號(hào)里的是出錯(cuò)的具體指令。

如何根據(jù)OOPS找出bug

確定出錯(cuò)位置在內(nèi)核函數(shù)還是驅(qū)動(dòng)

System.map文件記錄了所有符號(hào)的運(yùn)行地址,這里的符號(hào)可以理解成函數(shù)名和變量。

System.map一般在內(nèi)核編譯完成后,根目錄下生成。

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中內(nèi)核函數(shù)的范圍是:ffffff8008080000 ~ ffffff8009880000。而PC出錯(cuò)的位置是ffffff8000ef0024。

所以,可以判定不是內(nèi)核函數(shù)出錯(cuò)引起的,而是某個(gè)驅(qū)動(dòng)模塊。

如果把oops_module.ko直接編譯進(jìn)ko中,就是內(nèi)核引起的錯(cuò)誤了。PC出錯(cuò)時(shí)的地址也會(huì)剛好在System.map中。

匯編驅(qū)動(dòng)文件

而OOPS信息也告訴我們,錯(cuò)誤是出在了init_oopsdemo。

[17981.657899]PCisatinit_oopsdemo+0x24/0x38[oops_module]
[17981.658385]LRisatinit_oopsdemo+0x18/0x38[oops_module]

那如果OOPS沒(méi)有打印出出錯(cuò)驅(qū)動(dòng)的名字呢?

我們可以使用 cat /proc/kallsyms > kallsyms.txt命令,在kallsyms.txt中找出與PC值接近的符號(hào)。kallsyms.txt內(nèi)容如下。

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很接近。所以,基本可以確定出錯(cuò)的模塊是oops_module。而這個(gè)模塊正是我自己寫的例程。

接下來(lái),我們就要準(zhǔn)備反匯編oops_module.ko了,根據(jù)反匯編可以進(jìn)一步確認(rèn)出錯(cuò)的行數(shù)。

aarch64-linux-gnu-objdump-Doops_module.ko>oops_module.dis

oops_module.dis 內(nèi)容如下

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

根據(jù)反匯編和之前 PC is at init_oopsdemo+0x24/0x38 [oops_module],可以確定發(fā)生錯(cuò)誤的是0x24的位置。

24:b9000001strw1,[x0]#將w1寄存器的值,傳送到地址值為x0的(存儲(chǔ)器)內(nèi)存中

而根據(jù)18: d2800000 mov x0, #0x0 // #0 可以確定x0 為0。

到這里也基本可以確定,是w1的值賦值給0地址時(shí)出錯(cuò)了。

其他方法

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命令用于將程序指令地址轉(zhuǎn)換為所對(duì)應(yīng)的函數(shù)名、以及函數(shù)所在的源文件名和行號(hào)。當(dāng)含有調(diào)試信息(-g)的執(zhí)行程序出現(xiàn)crash時(shí)(core dumped),可使用addr2line命令快速定位出錯(cuò)的位置。

如果無(wú)法確定文件名或函數(shù)名,addr2line將在它們的位置打印兩個(gè)問(wèn)號(hào);如果無(wú)法確定行號(hào),addr2line將打印0或一個(gè)問(wèn)號(hào)。

參數(shù)說(shuō)明:

-a:在函數(shù)名、文件名和行號(hào)信息之前,以十六進(jìn)制形式顯示地址。

-b:指定目標(biāo)文件的格式為bfdname。

-C:將低級(jí)別的符號(hào)名解碼為用戶級(jí)別的名字。

-e:指定需要轉(zhuǎn)換地址的可執(zhí)行文件名,默認(rèn)文件是a.out。

-f:在顯示文件名、行號(hào)信息的同時(shí)顯示函數(shù)名。

-s:僅顯示每個(gè)文件名(the base of each file name)去除目錄名。

-i:如果需要轉(zhuǎn)換的地址是一個(gè)內(nèi)聯(lián)函數(shù),則還將打印返回第一個(gè)非內(nèi)聯(lián)函數(shù)的信息。

-j:讀取指定section的偏移而不是絕對(duì)地址。

-p:使打印更加人性化:每個(gè)地址(location)的信息都打印在一行上。

-r:啟用或禁用遞歸量限制。

--help:打印幫助信息。

--version:打印版本號(hào)。

?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內(nèi)核里面有很多腳本工具,位于linux/scripts/,里面有一個(gè)decodecode工具可以用來(lái)轉(zhuǎn)換機(jī)器碼,decodecode腳本可以在沒(méi)有源代碼或符號(hào)表的情況下,將oops異常的log作為輸入就可以解析出錯(cuò)誤位置的匯編代碼。

oops_log.txt內(nèi)容如下

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

執(zhí)行腳本后,就可以得到出錯(cuò)的匯編代碼。trapping instruction指出了出錯(cuò)的地址。根據(jù)oop_module.ko的反匯編可以知道出錯(cuò)的位置24: b9000001 str w1, [x0]。

注意:腳本認(rèn)為該機(jī)器碼是跟host結(jié)構(gòu)相同的原生機(jī)器碼,想要跨架構(gòu)翻譯要指定架構(gòu)和交叉工具鏈。

faddr2line

內(nèi)核開(kāi)發(fā)者為了方便問(wèn)題的排查,也經(jīng)常需要根據(jù)內(nèi)核棧,快速定位導(dǎo)致問(wèn)題發(fā)生的代碼位置。所以,Linux 內(nèi)核維護(hù)了一個(gè) faddr2line 腳本,根據(jù)函數(shù)名+偏移量輸出源碼文件名和行號(hào)。

在使用這個(gè)腳本之前,還需要注意兩個(gè)前提條件:

第一,帶有調(diào)試信息的內(nèi)核文件,一般名字為 vmlinux(注意,/boot 目錄下面的 vmlinz 是壓縮后的內(nèi)核,不可以直接拿來(lái)使用)。

第二,系統(tǒng)中需要安裝 awk、readelf、addr2line、size、nm 等命令。

對(duì)于第二個(gè)條件,這些命令都包含在 binutils 軟件包中,只需要執(zhí)行 apt 或者 dnf 命令安裝即可。

而對(duì)第一個(gè)條件中的內(nèi)核調(diào)試信息,各個(gè)主要的發(fā)行版也都提供了相應(yīng)的軟件倉(cāng)庫(kù),你可以根據(jù)文檔進(jìn)行安裝。比如,對(duì)于 Ubuntu 來(lái)說(shuō),你可以執(zhí)行下面的命令安裝調(diào)試信息:

codename=$(lsb_release-cs)
sudotee/etc/apt/sources.list.d/ddebs.list<

由于我們這里的oops 是發(fā)生在ko中,而不是內(nèi)核。因此,使用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發(fā)生在內(nèi)核中,將oops_module.ko 換成對(duì)應(yīng)的vmlinux即可。

最后,貼下oops_module.c的源代碼,感興趣的大家可以自己寫一個(gè)分析下。

#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");

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40083
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10698

    瀏覽量

    209343
  • Oops
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    3302

原文標(biāo)題:如何解讀內(nèi)核的oops

文章出處:【微信號(hào):嵌入式與Linux那些事,微信公眾號(hào):嵌入式與Linux那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux編程時(shí)遇到Oops提示該如何排查?

    各位工程師在Linux下開(kāi)發(fā)程序時(shí),有沒(méi)有遇到由于系統(tǒng)中存在某些小故障而跳出了“Oops”提示的情況,此時(shí)你是如何排查故障?一行行的查看代碼嗎?其實(shí)不用那么復(fù)雜,本文將為你介紹一種高效的Linux編程的故障排除方法。
    的頭像 發(fā)表于 11-28 16:52 ?8936次閱讀
    Linux編程時(shí)遇到<b class='flag-5'>Oops</b>提示該如何排查?

    何解讀運(yùn)放數(shù)據(jù)規(guī)格書(shū)

    在理解了上面的主要的運(yùn)放非理想?yún)?shù)后,再讀運(yùn)放的數(shù)據(jù)規(guī)格書(shū)應(yīng)該就不難了,下面我們以比較常見(jiàn)的LM321集成運(yùn)放為例,來(lái)過(guò)一遍如何解讀運(yùn)放數(shù)據(jù)規(guī)格書(shū)。
    發(fā)表于 02-02 14:00 ?2912次閱讀
    如<b class='flag-5'>何解讀</b>運(yùn)放數(shù)據(jù)規(guī)格書(shū)

    multisim的靈敏度分析結(jié)果如何解讀

    本帖最后由 test753 于 2015-4-7 20:28 編輯 結(jié)果如何解讀?教下吧
    發(fā)表于 04-07 20:10

    何解決cortex內(nèi)核hardfault錯(cuò)誤問(wèn)題?

    何解決cortex內(nèi)核hardfault錯(cuò)誤問(wèn)題?
    發(fā)表于 01-26 06:42

    CH341par Linux端DEMO運(yùn)行錯(cuò)誤是什么原因?如何解決?

    測(cè)試usb轉(zhuǎn)i2c功能。Ubuntu16.04,內(nèi)核版本4.13.我嘗試write data時(shí),內(nèi)核出現(xiàn)oops.定位到如下代碼:在驅(qū)動(dòng)中:get_user時(shí)出現(xiàn)oops:檢查了一下發(fā)
    發(fā)表于 07-01 06:20

    內(nèi)核oops的根本原因是什么?我們?nèi)绾握{(diào)試內(nèi)核oops

    Broadcom 交換機(jī)設(shè)備連接到我們主板上帶有 PCIe 的 T1042。開(kāi)關(guān)工作在 EP 模式。linux內(nèi)核版本是4.14。在檢測(cè)到 pcie 錯(cuò)誤的現(xiàn)場(chǎng)卡中引發(fā)內(nèi)核 oops。但是這個(gè)
    發(fā)表于 04-20 06:19

    Linux內(nèi)核解讀入門

    Linux內(nèi)核解讀入門關(guān)鍵詞:Linux, 內(nèi)核,源代碼一.核心源程序的文件組織: 1. Linux核心源程序通常都安裝在/usr/src/linux下,而且它有一個(gè)非常簡(jiǎn)單的編號(hào)約定:任何偶數(shù)的核
    發(fā)表于 01-16 14:40 ?103次下載

    系統(tǒng)設(shè)計(jì)人員如何解讀產(chǎn)品說(shuō)明書(shū)規(guī)范

    作為應(yīng)用工程師,我遇到過(guò)系統(tǒng)設(shè)計(jì)人員針對(duì)如何解讀產(chǎn)品說(shuō)明書(shū)規(guī)范提出的大量問(wèn)題。就在我認(rèn)為我已經(jīng)掌握如何確定規(guī)范以及它們?nèi)绾卧斐稍O(shè)計(jì)誤差時(shí),我總會(huì)從客戶的 TI E2E 論壇帖子、電話或電子郵件中獲得與我的理解不同的內(nèi)容。
    發(fā)表于 04-08 03:38 ?2070次閱讀
    系統(tǒng)設(shè)計(jì)人員如<b class='flag-5'>何解讀</b>產(chǎn)品說(shuō)明書(shū)規(guī)范

    淺談Linux內(nèi)核解讀入門

    針對(duì)好多Linux 愛(ài)好者對(duì)內(nèi)核很有興趣卻無(wú)從下口,本文旨在介紹一種解讀linux內(nèi)核源碼的入門方法,而不是解說(shuō)linux復(fù)雜的內(nèi)核機(jī)制; 一.核心源程序的文件組織: 1.Linux核
    發(fā)表于 11-08 10:06 ?2次下載

    你了解Linux內(nèi)核中的常見(jiàn)符號(hào)?

    一些內(nèi)核調(diào)用可以用來(lái)方便標(biāo)記bug,提供斷言并輸出信息。最常用的兩個(gè)是BUG()和BUG_ON()。當(dāng)被調(diào)用的時(shí)候,它們會(huì)引發(fā)oops,導(dǎo)致棧的回溯和錯(cuò)誤信息的打印。
    發(fā)表于 05-15 15:47 ?535次閱讀
    你了解Linux<b class='flag-5'>內(nèi)核</b>中的常見(jiàn)符號(hào)?

    linux內(nèi)核中的Oops

    真不是故意打碎您的杯子的”???,Oops就是這個(gè)意思。在Linux內(nèi)核開(kāi)發(fā)中的Oops是什么呢?其實(shí),它和上面的解釋也沒(méi)什么本質(zhì)的差別,只不過(guò)說(shuō)話的主角變成了Linux。當(dāng)某些比較致命的問(wèn)題出現(xiàn)時(shí),我們
    發(fā)表于 04-02 14:31 ?566次閱讀

    內(nèi)核oops錯(cuò)誤原因及處理方法

    最近在調(diào)試設(shè)備時(shí),遇到了一個(gè)偶發(fā)的開(kāi)機(jī)死機(jī)問(wèn)題。通過(guò)查看輸出日志,發(fā)現(xiàn)內(nèi)核報(bào)告了oops錯(cuò)誤,如下所示(中間省略了部分日志,以......代替)。
    的頭像 發(fā)表于 05-12 16:20 ?7947次閱讀

    怎么解讀內(nèi)核oops

    Oops的錯(cuò)誤代碼根據(jù)錯(cuò)誤的原因會(huì)有不同的定義,如果發(fā)現(xiàn)自己遇到的Oops和下面無(wú)法對(duì)應(yīng)的話,最好去內(nèi)核代碼里查找
    的頭像 發(fā)表于 02-17 16:08 ?860次閱讀

    深入分析內(nèi)核panic的內(nèi)核錯(cuò)誤處理方案

    die函數(shù)主要執(zhí)行oops相關(guān)流程,且若異常為中斷流程中觸發(fā)或設(shè)置了panic_on_oops選項(xiàng),則進(jìn)一步通過(guò)panic將系統(tǒng)掛起。
    發(fā)表于 04-14 15:18 ?3193次閱讀

    Linux內(nèi)核第一版開(kāi)源代碼解讀

    《Exploring the internals of Linux v0.01》是一篇解讀 Linux 內(nèi)核第一版開(kāi)源代碼的文章。此文今天在 Reddit 和 Hacker News 都沖上了熱門。
    發(fā)表于 08-15 09:47 ?640次閱讀