2014-04-04 54 views
0

我得到BUG內核崩潰()在這裏 - http://lxr.free-electrons.com/source/mm/bootmem.c?v=3.10#L385以下消息3.10內核崩潰的BUG()()

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) 

感謝

+0

您是否以任何方式修改了內核代碼,或者這是升級或其他什麼結果?如果你沒有更改內核代碼,這不是一個合適的問題,因爲我們不打算試圖在你的機器上調試特定的內核版本。 –

+1

添加類似於'memory {reg = <0x80000000 0x8000000>; };',你有一個物理地址和大小。 * u-boot *等與此混淆,將其設置爲*探測*大小(和/或通過傳統的u-boot變量)。 –

回答

2

mm/bootmem.c文件負責Boot Memory Allocator。功能mark_bootmemstartend之間的內存頁面標記爲(start向下舍入,end向上舍入到頁面邊界),因爲此分配程序保留(或未保留)。

它通過bdata_list迭代試圖從請求的地址範圍中找到包含第一頁的區域。它不會找到它,您提到的BUG()將被觸發。如果成功找到相同的BUG(),但該區域不夠大(end位於區域外)。所以這BUG()意味着它無法找到請求的內存區域來標記。

現在如果我正確理解內核代碼,在普通的UMA系統中,bdata_list中只有一個條目,它應該描述系統中可用的低內存頁面的範圍。由於您沒有提供太多有關您的系統的信息,因此很難猜測問題的確切原因,但總的來說,您的內存設置似乎已損壞。這件事很具體,所以很難說出究竟發生了什麼。