Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> LinuxシステムFAQ >> 大容量メモリを保持するためのLinuxカーネルの起動方法の概要

大容量メモリを保持するためのLinuxカーネルの起動方法の概要

  

長い間インターネットで検索されていましたが、起動時にメモリを予約する方法をゆっくり理解してください。 (私はarm boardで実験しています。カーネルのバージョンは2.6.38です。)

起動時にメモリを予約する方法は3つあります。

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();

//ここにコードを追加し、ゾーンに40Mのメモリを確保します。

reserve_memory = alloc_bootmem(0x2800000);

mem_init();


}

しかし、カーネルでreserve_memoryを取得した後、どのようにカーネル空間にマッピングするかについては、手掛かりはありません。

誰かがインターネットで言っています、

allco_bootmemから返されたアドレスで、

カーネルモードで、このメモリを使用するtask_structを見つけてから、ページテーブルを作成するよう強制してください。

この文を理解するか、より良いマッピング方法を、メッセージを残してください、ありがとうございます!

3.起動時にLinuxカーネルパラメータを設定します。

mem = 180M /*起動時には180Mのメモリスペースしか確保されず、残りは予約されています。* /

単純ですが、セットアップして使用するときは、ハードウェアメモリの物理サイズと互換性がある必要があります。

カーネルドライバでは、ioremap()またはmmap()の形式でカーネル空間にマッピングして、ユーザー空間で読み書きできます。

Copyright © Windowsの知識 All Rights Reserved