歡迎來到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