加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

不再懼怕Linux內(nèi)核panic (一)

05/05 10:08
6379
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

前言

曾經(jīng)我看到Linux kernel panic,我也會很panic,感覺無從下手,但經(jīng)過不斷學習和摸索積累后,目前的我已經(jīng)不再panic了,其實內(nèi)核panic后打印的信息通常都會包含一系列關鍵信息,會幫助我們進一步分析診斷導致系統(tǒng)崩潰的根本原因。

今天就先認識一下panic信息。

以下是一個ARM64架構Linux kernel panic打印信息示例:

Kernel panic - not syncing: Fatal exception in interrupt handler
CPU: 0 PID: 250 Comm: irq/10000000-mmc0 Not tainted 5.?.0-rc1 #1
Hardware name: Generic AArch64 (DT)
pstate: 80000005 (Nzcv daif -PAN -UAO)
pc : 0000000000000000 lr : 0000000000000000
sp : ffff800000093e20 x29: ffff800000093e00
x28: 0000000000000000 x27: 0000000000000000
x26: 0000000000000000 x25: 0000000000000000
x24: 0000000000000000 x23: 0000000000000000
x22: 0000000000000000 x21: 0000000000000000
x20: 0000000000000000 x19: 0000000000000000
x18: 0000000000000000 x17: 0000000000000000
x16: 0000000000000000 x15: 0000000000000000
x14: 0000000000000000 x13: 0000000000000000
x12: 0000000000000000 x11: 0000000000000000
x10: 0000000000000000 x9 : 0000000000000000
x8 : 0000000000000000 x7 : 0000000000000000
x6 : 0000000000000000 x5 : 0000000000000000
x4 : 0000000000000000 x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000000000000
x0 : 0000000000000000 Call trace:
show_stack+0x14/0x20
dump_stack_lvl+0x40/0x58
dump_stack+0x.png
panic+0x17c/0x328
do_exit+0x2b8/0x45c
do_group_exit+0x3a/0xa0
SyS_exit_group+0x14/0x20
el0_svc_naked+0x28/0x2c
Modules linked in: [list of loaded modules]
---[ end trace 123456789abcdef0 ]---

Kernel panic - not syncing: Fatal exception in interrupt handler
Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: Fatal exception in interrupt handler ]---

針對以上示例信息說明如下:

標題與原因

Kernel panic - not syncing: Fatal exception in interrupt handler

指明發(fā)生了內(nèi)核恐慌(kernel panic),原因是遇到了致命異常(Fatal exception),且該異常發(fā)生在中斷處理程序中。

CPU與進程信息

CPU: 0 PID: 250 Comm: irq/10000000-mmc0 Not tainted 5.?.0-rc1 #1

表明出錯的CPU核心是0號,引發(fā)panic的進程ID為250,進程名為irq/10000000-mmc0,表示與MMC設備相關的中斷處理程序。內(nèi)核版本為5.?.0-rc1,編譯構建編號為#1,并且內(nèi)核未被外部代碼污染(Not tainted)。

硬件信息

Hardware name: Generic AArch64 (DT)

說明運行在Generic AArch64硬件平臺上,并使用設備樹(Device Tree, DT)作為硬件描述方式。

處理器狀態(tài)寄存器(PSTATE)值

pstate: 80000005 (Nzcv daif -PAN -UAO)

給出了當前處理器狀態(tài)寄存器的值,反映了處理器的各種模式和標志位狀態(tài)。在這個例子中,N、Z、C、V標志分別代表負數(shù)、零、進位、溢出,daif字段表示調(diào)試、中斷、故障、同步異常禁止位,PAN和UAO標志分別與數(shù)據(jù)對齊異常和用戶地址中止有關。

程序計數(shù)器(PC)、鏈接寄存器(LR)、棧指針(SP)與寄存器備份

接下來是一系列寄存器的值,包括程序計數(shù)器(PC)、鏈接寄存器(LR)、棧指針(SP)以及其他通用寄存器(x0-x30)。這些信息值有助于定位發(fā)生異常時的指令位置和當時的上下文環(huán)境。

Call trace

Call trace:
show_stack+0x14/0x20
dump_stack_lvl+0x40/0x58
dump_stack+0x.png
panic+0x17c/0x328
do_exit+0x2b8/0x45c
do_group_exit+0x3a/0xa0
SyS_exit_group+0x14/0x20
el0_svc_naked+0x28/0x2c
Modules linked in: [list of loaded modules]

展示了從異常發(fā)生點到panic函數(shù)調(diào)用的函數(shù)調(diào)用鏈,包括每個函數(shù)的地址偏移和函數(shù)總長度。這會有助于追蹤導致panic的具體執(zhí)行路徑。此外,還列出了可能與問題相關的已加載模塊(Modules linked in)。

Kernel Offset & Relocation Range

Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)

提供內(nèi)核在物理內(nèi)存中的加載偏移量,以及內(nèi)核可重定位范圍,有助于分析理解內(nèi)核映像在內(nèi)存中的布局。

結束標記

---[ end trace 123456789abcdef0 ]---

Kernel panic - not syncing: Fatal exception in interrupt handler
Kernel Offset: 0x0000000000000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: Fatal exception in interrupt handler ]---

重復了panic的原因和內(nèi)核相關信息,作為結束標記,便于識別panic信息的完整邊界。

總結

綜上所述,以Linux ARM64 panic打印信息為例看,其實包含了較多的診斷信息,可以幫助我們分析崩潰原因、定位錯誤代碼位置,并結合其他調(diào)試手段(如內(nèi)核轉儲、日志記錄等)來定位和解決問題。所以,以后看到類似這種Linux panic信息,首先自己堅決不能panic!要勇敢面對!才會get到后續(xù)的精彩知識!

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
74HC595BQ,115 1 NXP Semiconductors 74HC(T)595 - 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state QFN 16-Pin
$0.41 查看
CMWX1ZZABZ-078 1 Murata Manufacturing Co Ltd LORA MODULE

ECAD模型

下載ECAD模型
$16.04 查看
24LC256-I/ST 1 Microchip Technology Inc 32K X 8 I2C/2-WIRE SERIAL EEPROM, PDSO8, 4.40 MM, PLASTIC, TSSOP-8

ECAD模型

下載ECAD模型
$1.05 查看

相關推薦

電子產(chǎn)業(yè)圖譜

記錄和分享C/C++、Linux、ARM、Android、IoT相關知識。技術相伴于生活和成長,愿你我永為少年,心中有火,眼中有光,始保熱情。