在網上搜了很久,才慢慢了解在開機保留內存的方法,現在總結一下這階段的學習過程!(我是在ARM板子上進行的實驗,內核版本是2.6.38)
在開機保留內存的方式一共有三種方法:
這種方法,我做實驗一直沒有成功...
如果有成功的,希望大神留言,求指導!
其實還是比較簡單的,在int/main.c中:
//設置全局變量
char* reserve_memory;
EXPORT_SYMBOL_GPL(reserve_memory);
void __init start_kernel()
{
...
trap_init();
//在此添加代碼,在zone保留40M的內存
reserve_memory=alloc_bootmem(0x2800000);
mem_init();
...
}
但是在內核中得到reserve_memory之後,如何映射到內核空間中使用,沒有理出頭緒...
網上搜到有人說,
“
有了allco_bootmem返回的地址,”
如果有大神理解這句話,或者更好的映射方法,請留言,謝謝!
mem=180M /* 開機時只給系統180M的內存空間,其余都保留 */
這種方法最為簡單,但是設置和使用的時候,需要和硬件內存物理大小相適應。
在內核驅動中,可以以ioremap()的方式映射到內核空間中,或者再mmap()到用戶空間中讀寫。