Linux kernel 如何在内核4.12.28上调试内核死机?

Linux kernel 如何在内核4.12.28上调试内核死机?,linux-kernel,kernel,embedded-linux,powerpc,Linux Kernel,Kernel,Embedded Linux,Powerpc,我试图调试嵌入式Linux内核4.12.28,这会崩溃并显示内核恐慌。我在blocks/genhd.c中放了一些打印文件来打印磁盘名。我看到它在“bdget_disk”中崩溃,同时为磁盘名“ram0”获取bdgt_disk。我使用的是power pc架构。 对于如何处理这个问题,或者如何调试,我有点困惑?我无法理解根本原因。我的理解是,ram0就像系统初始启动所需的RAM磁盘。initrd内容将被复制到ram0以进行引导。我不明白它为什么会崩溃。我可以看出这与地址不正确有关。但真正的原因是什么?

我试图调试嵌入式Linux内核4.12.28,这会崩溃并显示内核恐慌。我在blocks/genhd.c中放了一些打印文件来打印磁盘名。我看到它在“bdget_disk”中崩溃,同时为磁盘名“ram0”获取bdgt_disk。我使用的是power pc架构。 对于如何处理这个问题,或者如何调试,我有点困惑?我无法理解根本原因。我的理解是,ram0就像系统初始启动所需的RAM磁盘。initrd内容将被复制到ram0以进行引导。我不明白它为什么会崩溃。我可以看出这与地址不正确有关。但真正的原因是什么?如何解决 调试这个

我的defconfig-

CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=32768
内核紧急日志是-

Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xe0004500 (irq = 16, base_baud = 19531250) is a 16550A
serial8250.0: ttyS1 at MMIO 0xe0004600 (irq = 17, base_baud = 19531250) is a 16550A
console [ttyS1] enabled
console [ttyS1] enabled
bootconsole [udbg0] disabled
bootconsole [udbg0] disabled
Custom Debug..DEBUG: Passed bdget_disk 765
Custom Debug.. the disc name is ram0
Unable to handle kernel paging request for data at address 0x00005484
Faulting instruction address: 0xc0100154
Oops: Kernel access of bad area, sig: 11 [#1]
Modules linked in:
CPU: 0 PID: 1 Comm: swapper Not tainted 4.12.28-standard #1
task: df416a60 task.stack: df42a000
NIP: c0100154 LR: c011d158 CTR: c02bd990
REGS: df42bcb0 TRAP: 0300   Not tainted  (4.12.28-standard)
MSR: 00009032 <EE,ME,IR,DR,RI>
  CR: 242c0484  XER: 00000000
DAR: 00005484 DSISR: 20000000
GPR00: c02406bc df42bd60 df416a60 df407800 00000001 c011cb4c c011cb64 df42bd68
GPR08: 00000005 00000001 c0660000 00000000 222c0824 00000000 c00040f0 00000000
GPR16: 00000000 00000000 00000000 00000000 00000000 00000000 c0660000 c05fa2dc
GPR24: 00000007 00000093 df50d00c df50d060 00000000 df50d058 00000000 df50d040
NIP [c0100154] iget5_locked+0xc/0x250
LR [c011d158] bdget+0x40/0xf4
Call Trace:
[df42bd60] [c0652708] log_wait+0x0/0x8 (unreliable)
[df42bd80] [c02406bc] bdget_disk+0xac/0xf8
[df42bda0] [c0241780] device_add_disk+0x3f4/0x43c
[df42bdf0] [c060ed5c] brd_init+0xa8/0x184
[df42be20] [c0003a5c] do_one_initcall+0x48/0x18c
[df42be90] [c05faafc] kernel_init_freeable+0x130/0x228
[df42bf20] [c0004108] kernel_init+0x18/0x110
[df42bf40] [c00103f0] ret_from_kernel_thread+0x5c/0x64
Instruction dump:
741d7e44 3f090d7e ea9463ef 3a7ebecd fc607969 24b8044d a251c1c7 2c91258b
242aaa92 9887d4e0 2f4a22b5 8b2ef93c <8b9c5484> 7ecf225d 6a9c4a5b 1a5791d4
---[ end trace 47ca8dc77d8de71b ]---

Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b

Rebooting in 180 seconds..
串行:8250/16550驱动程序,4端口,禁用IRQ共享
串行8250.0:MMIO 0xe0004500处的ttyS0(irq=16,基波特=19531250)是16550A
串行8250.0:MMIO 0xe0004600处的ttyS1(irq=17,基本波特率=19531250)为16550A
控制台[ttyS1]已启用
控制台[ttyS1]已启用
已禁用引导控制台[udbg0]
已禁用引导控制台[udbg0]
自定义调试..调试:通过bdget_磁盘765
自定义调试。。光盘名为ram0
无法处理地址0x00005484处数据的内核分页请求
故障指令地址:0xc0100154
Oops:坏区的内核访问,sig:11[#1]
链接到的模块:
CPU:0 PID:1通信:交换程序未受污染4.12.28-标准#1
任务:df416a60任务。堆栈:df42a000
NIP:c0100154 LR:c011d158中心:c02bd990
REGS:df42bcb0疏水阀:0300未污染(4.12.28-标准)
MSR:00009032
CR:242c0484 XER:00000000
DAR:00005484 DSISR:20000000
GPR00:c02406bc df42bd60 df416a60 df407800 00000001 c011cb4c c011cb64 df42bd68
GPR08:00000005 00000001 c0660000 00000000 222C024 00000000 C00040F000000000
GPR16:00000000 00000000 00000000 00000000 00000000 c0660000 c05fa2dc
GPR24:0000000 7 000000 93 df50d00c df50d060 00000000 df50d058 00000000 df50d040
钳口[c0100154]iget5_锁定+0xc/0x250
LR[c011d158]bdget+0x40/0xf4
呼叫跟踪:
[df42bd60][c0652708]日志等待+0x0/0x8(不可靠)
[df42bd80][c02406bc]bdget_盘+0xac/0xf8
[df42bda0][c0241780]设备添加磁盘+0x3f4/0x43c
[df42bdf0][c060ed5c]brd_init+0xa8/0x184
[df42be20][c0003a5c]do_one_initcall+0x48/0x18c
[df42be90][c05faafc]内核初始化可释放+0x130/0x228
[df42bf20][c0004108]内核初始化+0x18/0x110
[df42bf40][c00103f0]从内核线程返回+0x5c/0x64
指令转储:
741d7e44 3f090d7e ea9463ef 3a7ebecd fc607969 24b8044d a251c1c7 2c91258b
242AA92 9887d4e0 2f4a22b5 8b2ef93c 7ecf225d 6a9c4a5b 1a5791d4
---[结束记录道47ca8dc77d8de71b]---
内核死机-不同步:试图杀死init!exitcode=0x0000000b
180秒后重新启动。。

简单地说,内核正在搜索它找不到的/dev/ram0


可能的根本原因:您没有提供正确的命令行参数来初始化initrd。请发布内核命令行。我们可以进行分类。

简单地说,内核正在搜索它找不到的/dev/ram0

可能的根本原因:您没有提供正确的命令行参数来初始化initrd。请发布内核命令行。我们可以解决它