EFIスタブを介してLinuxカーネルをロードする方法についていくつかのチュートリアルを読んでいます。これらのガイドラインでは、カーネルブートパラメータを使用することがよくありますadd_efi_memmap
。予想されるハードウェアは、8GBのRAMを搭載したIntel x64です。現在の設定では、grub-efi
ブートローダとカーネルv3.13を実行しています。
幼虫始めるいいえ起動パラメータ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 予約済み
幼虫始めるそして 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_memmapEFIスタブの起動に起動パラメータを使用できますか?これにより、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メモリマップエントリおよび/またはカーネルコマンドラインメモリマップエントリを見つけたら、必ず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
/proc/iomem
このパッチは、現在実行中のカーネルコマンドラインにオプションがあるときに代わりにカーネルメモリマップを読み取るようにkexecローダの動作を変更します/sys/firmware/memmap
。EFIシステムでは、e820テーブルが欠落しているか不完全な場合があります。このようなシステムは、
add_efi_memmap
EFIのメモリテーブルエントリをカーネルのメモリテーブルに追加してシステムメモリの完全な画像を作成するオプションを使用しますが、このオプションを使用すると、テーブルを埋めるために使用されるテーブルにこれらのエントリが追加されません/sys/firmware/memmap
。オリジナル。kexecローダはデフォルトでrawメモリマッピングを使用します。これは、ローダーに完全なシステムマップがなく、実際に使用できない場所にカーネルまたはRAMディスクを誤ってロードすると問題を引き起こす可能性があります。この変更により、kexecローダーは実行中のカーネルのコマンドラインでオプションを確認し、オプションが見つかった場合は
add_efi_memmap
元のマッピングの代わりに変更されたマッピングを使用します。 -http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
Linuxカーネル開発者は、多くの失敗の後、2009年にソリューション(ハッキング)を発見しました。これは
add_efi_memmap
、カーネルにEFIメモリマップを表示し、それを使用してE820メモリマップのさまざまなエントリを変更するように指示するカーネルコマンドラインオプションを追加することでした。 -http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html
答え1
ブートローダ(またはGrub)はe820のようにメモリマップを書き換えるので、GRUBとEFIスタブローダの間に異なる値が表示されるようです。
Linuxソースコードの説明によると、EFIは「e820レガシー(ゼロページ)メモリマップに入ることができる最大128個以上のエントリ」を許可していると述べています。あなたが投稿した数字によるとそうではありません。したがって、add_efi_memmapを追加するのが役に立つかどうか疑問です...しかし、このテーブルを解析するのは間違いありません...
答え2
LinuxディストリビューションがEFI STUBを正常に起動したら、add_efi_memmapを使用する必要はありません。このカーネルコマンドラインオプションは最近ほとんど必要ありません。これに対するUEFIファームウェアおよびLinuxカーネルのサポートは、2009年以降大幅に改善されました。