LinuxカーネルをEFIスタブ(efistub)でロードする方法のチュートリアルを読んでいます。これらの命令は、カーネルブートパラメーターadd_efi_memmap
をよく使用します。対象となるハードウェアは、8GBのRAMを搭載したIntel x64です。現在のセットアップでは、grub-efi
ブートローダーとカーネルv3.13を実行しています。
[〜#〜] grub [〜#〜]ブートなしadd_efi_memmap
ブート引数:
23
BIOS-e820ライン dmesg | grep BIOS-e820: | wc -l
でカウント243
EFIメモリライン dmesg | grep efi:\ mem | wc -l
でカウント24
ページ予約済み[〜#〜] grub [〜#〜]ブートwithadd_efi_memmap
とEFIメモリマップサイズが異なるようです:
23
BIOS-e820ライン57
EFIメモリライン22
ページ予約済みEFIスタブブートなしadd_efi_memmap
:
22
BIOS-e820ライン60
EFIメモリライン21
ページ予約済みEFIスタブブートwithadd_efi_memmap
:
22
BIOS-e820ライン66
EFIメモリライン21
ページ予約済み下記のように詳細を読んだ後、add_efi_memmap
を追加するかどうかわからない。起動するために絶対に必要ではないように見える余分なことをします。一方、使用可能なメモリのより良い(より完全な)ビューを提供することができます。
EFIスタブブートにこれadd_efi_memmapブート引数を使用する必要があるのはどの場合ですか?アプリケーションで利用可能なEFIスタブのブート速度を上げたり下げたり、空きメモリを増やしたり減らしたりしますか? EFIメモリマップにE820マップよりも多くのエントリが含まれているかどうかを(より適切に)チェックする方法は?
すでに参照されているいくつかのadd_efi_memmepドキュメント:
add_efi_memmap:使用可能な物理RAMのEFIメモリマップを含めます。
EFIメモリマップにE820マップにない追加のエントリがある場合、次のカーネルコマンドラインパラメーターを使用して、利用可能な物理RAMのカーネルメモリマップにそれらのエントリを含めることができます。 。- https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txtE820 BIOSメモリマップエントリおよび/またはカーネルコマンドラインmemmapエントリのいずれかを最初に見つけた後、常にEFIメモリマップエントリ(存在する場合)をメモリマップに追加する代わりに、カーネルブートオプションの場合のみ、そのような追加のEFIメモリマップエントリのみを追加します。 :
add_efi_memmap
が指定されています。 - http://www.gossamer-threads.com/lists/linux/kernel/937817ブートがフリーズします-GRUBカーネルと初期RAMディスクをロードした後、ブートがエラーメッセージなしでスタックする場合は、削除してみてくださいadd_efi_memmapカーネルパラメータ- https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
このパッチは、現在実行中のカーネルのコマンドラインに
add_efi_memmap
オプションが存在する場合のkexecローダーの動作を変更し、/proc/iomem
ではなく/sys/firmware/memmap
からカーネルメモリマップを読み取ります。EFIシステムでは、e820テーブルが欠落しているか、不完全である場合があります。このようなシステムは
add_efi_memmap
オプションを使用して、EFIのメモリテーブルエントリをカーネルのメモリテーブルに追加し、システムのメモリの全体像を構築します。ただし、このオプションを使用しても、/sys/firmware/memmap
への入力に使用されるテーブルにはこれらのエントリは追加されません。Kexecローダーはデフォルトで初期のメモリマップを使用するため、ローダーがシステムの全体像を把握していない場合に問題が発生し、実際に使用できない場所にカーネルまたはRAMディスクが誤って読み込まれます。この変更により、kexecローダーは実行中のカーネルのコマンドラインで
add_efi_memmap
オプションを確認し、見つかった場合は元のマップの代わりに変更されたマップを使用します。 - http://lists.infradead.org/pipermail/kexec/2011-April/005014.htmlいくつかの誤ったスタートの後、2009年にLinuxカーネル開発者が到達した解決策(ハック)は、カーネルコマンドラインオプション
add_efi_memmap
を追加して、カーネルにEFIメモリマップを調べて使用するように指示することでした。 E820メモリマップのさまざまなエントリを修正します。 - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html
LinuxディストリビューションでEFI STUBが正常に起動した場合は、add_efi_memmapを使用する必要はありません。このカーネルコマンドラインオプションが最近必要になることはほとんどありません-UEFIファームウェアとLinuxカーネルのサポートは、2009年以降大幅に改善されました。
ブートローダー、つまりGrubはe820のようにメモリマップを再構築します。これが、GRUBとEFIスタブローダーの間で異なる値が表示される理由です)。
Linuxソースコードには、EFIで「e820のレガシー(ゼロページ)メモリマップに収まる最大128を超えるエントリを許可する」というコメントが含まれています。これはあなたが投稿した数値によるとそうではないようですので、私はadd_efi_memmapを追加することが役立つとは思えません...しかし、このテーブルを解析することは確かに害にはなりません...