今日、私は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-distroに行き着きます)。
私がしたこと:それぞれ約1GBの2つのFAT32パーティションを持つSDカードを作成しました。最初にブートローダーとカーネルがあり、2番目にBuildroot2013.11の助けを借りて生成されたrootfs.tarを抽出しました。
Linuxコマンドラインは次のようになります。
console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw
(これがここに属するかどうかはわかりませんが、最初は、mmcblkを初期化できなかったため、rootfsをまったく起動できませんでした。rootwait
を使用すると、問題なく動作します) 。
私の質問は:このエラーがどこから来たのか誰か知っていますか?私はこれについてどこにも有用なスレッドを見つけることができませんでした。このエラーを削除したいのは、起動中に少し時間が無駄になっていると思うので、それが私の実際の目的です。起動時間を可能な限り最短の時間に保つことです。
これはカーネルのどこかにあるバグです。 rootfs/initramfsの変更とは直接関係ありません。他の変更(同じソース、同じ構成、同じコンパイラを使用しましたか?)が原因であるか、潜在的なバグを明らかにしたタイミングの問題に関連している可能性があります。
この警告は handle_irq_event_percpu
そして割り込みハンドラーは Atmel MMCコントローラー 用です。おそらくそのコードにはバグがあります。
トレース以外の結果が観察されない場合でも、この種の警告は重大な問題を示す傾向があり、データの破損または少なくともロックアップにつながる可能性があります。デバッグは簡単ではありません。これはかなり古いカーネルであるため、このドライバーのより新しいバージョンに関連する可能性のある修正が含まれているかどうかを確認し、可能であればより新しいカーネルの使用を検討してください。