今天,我从带有 initramfs 的映像更改为带有单独内核和 rootfs 的映像。这些映像用于在 Linux 2.6.39 上运行的嵌入式系统 (ARM9 SAM9G25)。在启动过程中,我收到以下警告,但 initramfs 中没有显示该警告:
WARNING: at kernel/irq/handle.c:130 handle_irq_event_percpu+0x70/0x198()
irq 12 handler atmci_interrupt+0x0/0x6b0 enabled interrupts
Modules linked in:
Backtrace:
[<c0024918>] (dump_backtrace+0x0/0x10c) from [<c01f5664>] (dump_stack+0x18/0x1c)
r6:c005d558 r5:00000009 r4:c028fea8 r3:c02956bc
[<c01f564c>] (dump_stack+0x0/0x1c) from [<c0030f74>] (warn_slowpath_common+0x54/0x6c)
[<c0030f20>] (warn_slowpath_common+0x0/0x6c) from [<c0031030>] (warn_slowpath_fmt+0x38/0x40)
r8:00000000 r7:00000000 r6:0000000c r5:00000001 r4:c7969f60
r3:00000009
[<c0030ff8>] (warn_slowpath_fmt+0x0/0x40) from [<c005d558>] (handle_irq_event_percpu+0x70/0x198)
r3:0000000c r2:c025b447
[<c005d4e8>] (handle_irq_event_percpu+0x0/0x198) from [<c005d6b0>] (handle_irq_event+0x30/0x40)
[<c005d680>] (handle_irq_event+0x0/0x40) from [<c005f274>] (handle_level_irq+0xbc/0xe4)
r4:c02976a8 r3:00020000
[<c005f1b8>] (handle_level_irq+0x0/0xe4) from [<c0021078>] (asm_do_IRQ+0x78/0xa8)
r4:0000000c r3:c005f1b8
[<c0021000>] (asm_do_IRQ+0x0/0xa8) from [<c0021a74>] (__irq_svc+0x34/0x60)
Exception stack(0xc028ff48 to 0xc028ff90)
ff40: 00000000 0005317f 0005217f 60000013 c028e000 c02ab1a4
ff60: c03b9480 c0291f0c 20000000 41069265 2001c2a8 c028ff9c 600000d3 c028ff90
ff80: c0022748 c0022754 60000013 ffffffff
r5:fefff000 r4:ffffffff
[<c0022714>] (default_idle+0x0/0x44) from [<c0022908>] (cpu_idle+0x70/0xc8)
[<c0022898>] (cpu_idle+0x0/0xc8) from [<c01f37f4>] (rest_init+0x60/0x78) r5:c001d5c4 r4:c0290094
[<c01f3794>] (rest_init+0x0/0x78) from [<c00088c0> (start_kernel+0x23c/0x284)
[<c0008684>] (start_kernel+0x0/0x284) from [<20008038>] (0x20008038)
---[ end trace 45f8d0076fc9ced3 ]---
我不得不说,系统不会在这里崩溃,并会按照通常的方式启动,并且最终可以使用(我最终使用的是 Busybox - 发行版)。
我做了什么:我创建了一张 SD 卡,其中有 2 个 FAT32 分区,每个分区大约 1 GB。第一个是引导加载程序和内核,第二个是我提取了 rootfs.tar,它是在 Buildroot 2013.11 的帮助下生成的。
Linux 命令行如下所示:
console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw
(我不确定这是否属于这里,但首先我什至根本无法启动 rootfs,因为他无法初始化 mmcblk。现在它rootwait
工作得很好)。
我的问题是: 有谁知道这个错误是从哪里来的吗?我在任何地方都找不到与此相关的任何有用的线程。我想删除这个错误,因为我猜它在启动过程中浪费了一些时间,而这就是我的实际目标:将启动时间保持在最短的时间。
答案1
这是内核中某处的错误。它与 rootfs/initramfs 更改没有直接关系。这可能是由于您所做的一些其他更改(您是否使用相同的源、相同的配置、相同的编译器?),或者可能与揭示潜在错误的某些计时问题有关。
此警告来自handle_irq_event_percpu
中断处理程序用于爱特梅尔MMC控制器。该代码中可能存在错误。
即使您没有观察到除了跟踪之外的任何后果,这种警告也往往表明存在严重问题,这可能会导致数据损坏或至少导致锁定。调试并非易事。鉴于这是一个相当旧的内核,请检查该驱动程序的更新版本是否有可能相关的修复,并在可能的情况下考虑使用更新的内核。