0

ここのBUG()でカーネルクラッシュが発生します-http://lxr.free-electrons.com/source/mm/bootmem.c?v= 3.10#L385で次のメッセージが表示されます

2kernel BUG at /kernel/mm/bootmem.c:385!

これにはどのような理由が考えられますか?

以下は関数呼び出しトレースです

[<c0e165f8>] (mark_bootmem+0xd0/0xe0) from [<c0e05d64>] (bootmem_init+0x16c/0x26
[<c0e05d64>] (bootmem_init+0x16c/0x264) from [<c0e07980>] (paging_init+0x734/0x7
[<c0e07980>] (paging_init+0x734/0x7d4) from [<c0e03f20>] (setup_arch+0x3e8/0x69c
[<c0e03f20>] (setup_arch+0x3e8/0x69c) from [<c0e007d8>] (start_kernel+0x78/0x370
[<c0e007d8>] (start_kernel+0x78/0x370) from [<10008074>] (0x10008074)

ありがとう

4

1 に答える 1

2

mm/bootmem.cファイルは、Boot Memory Allocator. 関数は、とアドレス (は切り捨てられ、ページ境界まで切り上げられる)mark_bootmemの間のメモリ ページを、このアロケータ用に予約済み (または解放に使用される場合は予約されていない) としてマークします。startendstartend

bdata_list要求されたアドレス範囲から最初のページを含む領域を見つけようと繰り返します。それが見つからない場合、BUG()あなたが言及したものがトリガーされます。BUG()検出に成功しても、領域が十分に大きくない (end領域外にある)場合は、同じことがトリガーされます。これBUG()は、マークするために要求されたメモリ領域を見つけることができなかったことを意味します。

カーネル コードを正しく理解していれば、通常の UMA システムではエントリは 1 つだけbdata_listで、システムで使用可能なローメモリ ページの範囲を記述しているはずです。システムに関する情報があまり提供されていないため、問題の正確な理由を推測するのは困難ですが、一般的に、メモリのセットアップが壊れているようです。これは非常にアーキテクチャ固有であるため、正確に何が起こっているのかを判断するのは困難です。

于 2014-04-05T20:29:01.017 に答える