<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E5%BF%97%E6%91%A9%E5%85%86%E4%B8%80%E9%83%8E</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E5%BF%97%E6%91%A9%E5%85%86%E4%B8%80%E9%83%8E"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/%E5%BF%97%E6%91%A9%E5%85%86%E4%B8%80%E9%83%8E"/>
	<updated>2026-04-13T22:46:46Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26187</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26187"/>
		<updated>2022-07-02T06:27:15Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: /* efibootmgr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; resume=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を（シングル）クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26186</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26186"/>
		<updated>2022-07-02T06:25:45Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-&#039;&#039;. XXXX-XXXX-XXXX-XXXXXX&#039;&#039; resume=PARTUUID=&#039;&#039;XXXXXX-XXXX-XXXX-XXXX&#039;&#039; rw initrd=Thinkinitramfs-linux. img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を（シングル）クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26185</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26185"/>
		<updated>2022-07-02T06:25:16Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
# efibootmgr --disk /dev/sdX --part Y --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
# efibootmgr --disk /dev/sdX --part Y --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX resume=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を（シングル）クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26184</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26184"/>
		<updated>2022-07-02T06:22:28Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-&#039;&#039;. XXXX-XXXX-XXXX-XXXXXX&#039;&#039; resume=PARTUUID=&#039;&#039;XXXXXX-XXXX-XXXX-XXXX&#039;&#039; rw initrd=Thinkinitramfs-linux. img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を（シングル）クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26183</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26183"/>
		<updated>2022-07-02T06:21:16Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-&#039;&#039;. XXXX-XXXX-XXXX-XXXXXX&#039;&#039; resume=PARTUUID=&#039;&#039;XXXXXX-XXXX-XXXX-XXXX&#039;&#039; rw initrd=Thinkinitramfs-linux. img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数をダブルクオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26182</id>
		<title>EFI ブートスタブ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=EFI_%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%82%BF%E3%83%96&amp;diff=26182"/>
		<updated>2022-07-02T06:18:46Z</updated>

		<summary type="html">&lt;p&gt;志摩兆一郎: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ブートローダー]]&lt;br /&gt;
[[en:EFISTUB]]&lt;br /&gt;
[[es:EFISTUB]]&lt;br /&gt;
[[ru:EFISTUB]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Arch ブートプロセス}}&lt;br /&gt;
{{Related|ブートローダー}}&lt;br /&gt;
{{Related|Unified Extensible Firmware Interface}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の準備 ==&lt;br /&gt;
&lt;br /&gt;
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。&lt;br /&gt;
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== EFISTUB の起動 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、（EFI 標準に従って）バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|&#039;&#039;esp&#039;&#039;/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|&#039;&#039;esp&#039;&#039;/}} の下にあると仮定しています。}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI を直接使う ===&lt;br /&gt;
&lt;br /&gt;
UEFI は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。&lt;br /&gt;
* NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた &#039;&#039;.efi&#039;&#039; ファイルでブートエントリを作成することが可能です。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== efibootmgr ====&lt;br /&gt;
&lt;br /&gt;
カーネルをロードするブートエントリを &#039;&#039;efibootmgr&#039;&#039; で作成する。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&#039;&#039; rw initrd=\initramfs-linux.img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
または、&#039;&#039;efibootmgr&#039;&#039; とスワップパーティションでの休止状態を使用してブートエントリを作成します&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --disk &#039;&#039;/dev/sdX&#039;&#039; --part &#039;&#039;Y&#039;&#039; --create --label &amp;quot;Arch Linux&amp;quot; --loader /vmlinuz-linux --unicode &#039;root=PARTUUID=&#039;&#039;XXXXXXXX-&#039;&#039;. XXXX-XXXX-XXXX-XXXXXX&#039;&#039; resume=PARTUUID=&#039;&#039;XXXXXX-XXXX-XXXX-XXXX&#039;&#039; rw initrd=Thinkinitramfs-linux. img&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/dev/sdX&#039;&#039;}} と {{ic|&#039;&#039;Y&#039;&#039;}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u}} 引数をダブルクオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -v&lt;br /&gt;
&lt;br /&gt;
ブート順を設定する場合。&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder &#039;&#039;XXXX&#039;&#039;,&#039;&#039;XXXX&#039;&#039; --verbose&lt;br /&gt;
&lt;br /&gt;
ここでの、&#039;&#039;XXXX&#039;&#039; は各エントリに対して &#039;&#039;efibootmgr&#039;&#039; コマンドの出力に現れる番号です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。&lt;br /&gt;
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、&#039;&#039;efibootmgr&#039;&#039; が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。&lt;br /&gt;
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== bcfg ====&lt;br /&gt;
&lt;br /&gt;
UEFI の実装によっては &#039;&#039;efibootmgr&#039;&#039; を使って NVRAM をうまく変更することが難しいものがあります。&#039;&#039;efibootmgr&#039;&#039; がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から)&lt;br /&gt;
&lt;br /&gt;
まず、あなたの [[ESP]] が存在するデバイス番号を調べます。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; map&lt;br /&gt;
&lt;br /&gt;
この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。&lt;br /&gt;
&lt;br /&gt;
 sshell&amp;gt; ls FS1:&lt;br /&gt;
&lt;br /&gt;
現在のブートエントリーを表示するには&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
カーネルのエントリを追加するには、以下を使用します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot add &#039;&#039;N&#039;&#039; とします。FS1:\vmlinuz-linux &amp;quot;Arch Linux&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;N&#039;&#039;}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。&lt;br /&gt;
&lt;br /&gt;
ESP 上にファイルを作成し、必要なカーネルオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; FS1:\options.txt を編集します。&lt;br /&gt;
&lt;br /&gt;
ファイル内に、ブートラインを追加します。たとえば、以下のようになります。&lt;br /&gt;
&lt;br /&gt;
 root=/dev/sda2 ro initrd=initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。&lt;br /&gt;
&lt;br /&gt;
前のエントリにこれらのオプションを追加します。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot -opt &#039;&#039;N&#039;&#039; FS1:\options.txt&lt;br /&gt;
&lt;br /&gt;
追加する項目がある場合は、この作業を繰り返してください。&lt;br /&gt;
&lt;br /&gt;
前に追加した項目を削除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 Shell&amp;gt; bcfg boot rm &#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== kesboot ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。&lt;br /&gt;
&lt;br /&gt;
まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kesboot.conf|2=&lt;br /&gt;
CMDLINES=(&#039;linux&#039; &#039;acpi=on&#039;&lt;br /&gt;
          &#039;linux-zen&#039; &#039;iommu=off&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします（すべてのレコードの内容を。}}&lt;br /&gt;
&lt;br /&gt;
次に、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # kesboot -u&lt;br /&gt;
&lt;br /&gt;
また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[EFI システムパーティション#パーティションのマウント|ESPのマウント]] ディレクトリの後、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/setup-efi-boot&lt;br /&gt;
&lt;br /&gt;
=== UEFI Shell を使う ===&lt;br /&gt;
&lt;br /&gt;
通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; archlinux&lt;br /&gt;
&lt;br /&gt;
==== startup.nsh スクリプトの使用 ====&lt;br /&gt;
&lt;br /&gt;
いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。&lt;br /&gt;
&lt;br /&gt;
[https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば&lt;br /&gt;
&lt;br /&gt;
 vmlinuz-linux rw root=/dev/sd&#039;&#039;X&#039;&#039; [rootfs=&#039;&#039;myfs&#039;&#039;] [rootflags=&#039;&#039;myrootflags&#039;&#039;] \&lt;br /&gt;
  [kernel.flag=&#039;&#039;foo&#039;&#039;] [&#039;&#039;mymodule&#039;&#039;.flag=&#039;&#039;bar&#039;&#039;] \&lt;br /&gt;
  [initrd=\intel-ucode.img] initrd=\initramfs-linux.img&lt;br /&gt;
&lt;br /&gt;
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 &#039;&#039;&#039;スクリプトは1つの長い行である必要があります。&#039;&#039;&#039; 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。  FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== ブートエントリーがランダムに削除される ===&lt;br /&gt;
&lt;br /&gt;
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、&#039;&#039;efibootmgr&#039;&#039; によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== EFISTUB はいくつかの Dell システムで動作しません ===&lt;br /&gt;
&lt;br /&gt;
いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください)&lt;br /&gt;
&lt;br /&gt;
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux &amp;lt; 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント]&lt;br /&gt;
* [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット]&lt;br /&gt;
* [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]&lt;/div&gt;</summary>
		<author><name>志摩兆一郎</name></author>
	</entry>
</feed>