歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核開機保留大塊內存的方法總結

在網上搜了很久,才慢慢了解在開機保留內存的方法,現在總結一下這階段的學習過程!(我是在ARM板子上進行的實驗,內核版本是2.6.38)

在開機保留內存的方式一共有三種方法:

1. reserve_bootmem(addr,size,flag)

這種方法,我做實驗一直沒有成功...

如果有成功的,希望大神留言,求指導!

2. alloc_bootmem(size)

其實還是比較簡單的,在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返回的地址,
在內核態,找到要使用這段內存的task_struct;
進而強行建立頁表;

如果有大神理解這句話,或者更好的映射方法,請留言,謝謝!

3. 開機時設置Linux 內核參數

mem=180M /* 開機時只給系統180M的內存空間,其余都保留 */

這種方法最為簡單,但是設置和使用的時候,需要和硬件內存物理大小相適應。

在內核驅動中,可以以ioremap()的方式映射到內核空間中,或者再mmap()到用戶空間中讀寫。 

Copyright © Linux教程網 All Rights Reserved