3
With CONFIG_FSL_BOOKE
(P1020 RDB)2.6.31我需要在一些固定的位置(無所謂)在哪裏保留1MB的RAM,這意味着它不會被U-Boot或bootmem分配器,以便RAM內容在溫暖的重新啓動後存活。與警告我不能更改U-boot使用CONFIG_PRAM
/mem=
。Linux PowerPC Book E通過熱重啓來保留原始RAM
編譯可重定位內核不是arc/powerpc 2.6.31中的一個選項。在arch/powerpc/kernel/setup_32.c中不支持memmap
。
理想情況下,這個區域應該保留,而不是L1 d-cached,以便它可以用來存儲從中斷上下文的ramoops。
有沒有辦法在bootmem之前將_end
移出0x600000來創建一個任何人都不會觸及的洞?也就是說,讓內核認爲_end
更遠?
在vmlinux.lds.S我想是這樣的:
. = ALIGN(PAGE_SIZE);
_end = . ;
PROVIDE32 (end = .);
改爲
. = ALIGN(PAGE_SIZE);
_start_unused_ram = .;
. = ALIGN(0x400000);
_end = . ;
PROVIDE32 (end = .);
然而,__bss_stop
和爲0x400000之間的地區已被覆蓋。
顯然你的意思是使用kernel arch/powerpc/boot/dts/ .dts中的「memory」標記在RAM中定義一個洞。這是「正確」的答案,因爲它不涉及內核源代碼。然而,大多數飛思卡爾SoC板(包括我的)都忽略了這一點,並在u-boot ddr.c中配置了RAM。我需要的是一個政治上不正確的內核破解,可能會導致_end,RAM磁盤啓動或板信息結構的大小。看起來僞造板子信息結構的大小是最好的。 –
我不太瞭解u-boot,所以你可能是對的,雖然我不知道如果內存儲備被忽略,它是如何工作的。 另一種選擇是在早期啓動代碼中的某處顯式調用memblock_reserve()(可能是2.6.31中的lmb_reserve())。 – mpe
「正確的」答案是per @ mpe:在2.6.31中:在調用phyp_dump_reserve_mem之後,arch/powerpc/kernel/prom.c將另一個調用添加到lmb_reserve。確保您的引導加載程序未配置爲執行memtest,以便在啓動引導序列之前刪除您保留的區域。 –