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
- DMAゾーン:
24
予約済みページ - メモリ:7840568K / 8283384Kが利用可能
- 442816K予約済み
GRUBブートと add_efi_memmap
EFIメモリマップサイズは異なるようです:
23
BIOS-e820ライン57
EFIメモリライン- DMAゾーン:
22
予約済みページ - メモリ:7885076K / 8283384Kが利用可能
- 398308K予約済み
なしの EFIスタブブートadd_efi_memmap
:
22
BIOS-e820ライン60
EFIメモリライン- DMAゾーン:
21
予約済みページ - メモリ:7885012K / 8283384Kが利用可能
EFIスタブブートと add_efi_memmap
:
22
BIOS-e820ライン66
EFIメモリライン- DMAゾーン:
21
予約済みページ - メモリ:7882124K / 8283384Kが利用可能
詳細を読んだ後-以下にインラインで-追加するかどうかを判断できませadd_efi_memmap
ん。起動するために絶対に必要ではないように見える特別なことを行います。一方、使用可能なメモリのより良い(より完全な)ビューを提供することができます。
どのadd_efi_memmapブート引数をEFIスタブブートに使用する必要がありますか?これにより、EFIスタブのブート速度が増加/減少し、アプリケーションで使用可能な空きメモリが増加または減少しますか?EFIメモリマップにE820マップよりも多くのエントリが含まれているかどうかを(より良い)確認する方法は?
いくつかのadd_efi_memmepのドキュメントは既に参照されています:
add_efi_memmap :使用可能な物理RAMのEFIメモリマップを含めます。
EFIメモリマップにE820マップにない追加のエントリがある場合、次のカーネルコマンドラインパラメーターを使用して、利用可能な物理RAMのカーネルメモリマップにそれらのエントリを含めることができます。- https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
E820 BIOSメモリマップエントリおよび/またはカーネルコマンドラインmemmapエントリを最初に見つけた後、常にEFIメモリマップエントリ(存在する場合)をメモリマップに追加する代わりに、代わりに、カーネルブートオプションの場合、そのような追加のEFIメモリマップエントリのみを追加します:
add_efi_memmap
が指定されています。- http://www.gossamer-threads.com/lists/linux/kernel/937817
起動がフリーズする-GRUBがカーネルと初期ramdiskをロードした後にエラーメッセージなしで起動が停止する場合は、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