「Unified カーネルイメージ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎Booting: 翻訳)
(→‎dracut: 翻訳を修正)
(同じ利用者による、間の5版が非表示)
3行目: 3行目:
 
[https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images Unified カーネルイメージ] は単一の実行ファイルで、UEFI ファームウェアから直接起動したり、ブートローダによってほとんどあるいは全く設定なしで自動的に起動することができます。
 
[https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images Unified カーネルイメージ] は単一の実行ファイルで、UEFI ファームウェアから直接起動したり、ブートローダによってほとんどあるいは全く設定なしで自動的に起動することができます。
   
Arch がサポートするカーネル自体は [[EFISTUB|can be loaded by UEFI firmware]] ですが、ユニファイドイメージはそれを組み込むことを可能にします。
+
Arch がサポートするカーネル自体は [[EFISTUB|UEFI ファームウェアでロードできます]] が、ユニファイドイメージはそれを組み込むことを可能にします。
   
 
* {{man|7|systemd-stub}} のような UEFI スタブローダー。
 
* {{man|7|systemd-stub}} のような UEFI スタブローダー。
72行目: 72行目:
 
}}
 
}}
   
{{Tip|複数のカーネルを使用している場合は、[[ESP]] に十分なスペースがあることを確認してください。[[mkinitcpio]] は現在 {{ic|initramfs-*img}}と{{ic|*.efi}}実行可能ファイル。これにより、使用されるスペース2倍になります。 [https://github.com/archlinux/mkinitcpio/issues/77] を参照してください。}}
+
{{Tip|複数のカーネルを使用している場合は、[[ESP]] に十分なスペースがあることを確認してください。[[mkinitcpio]] は現在 {{ic|initramfs-*.img}} と{{ic|*.efi}} 実行可能ファイルの両方をビルドし、使用されるスペース2倍にます。[https://github.com/archlinux/mkinitcpio/issues/77] を参照してください。}}
   
 
==== カーネルコマンドライン ====
 
==== カーネルコマンドライン ====
80行目: 80行目:
 
# cp /proc/cmdline /etc/kernel/cmdline
 
# cp /proc/cmdline /etc/kernel/cmdline
   
{{Warning|{{ic|initrd}} マイクロコードと initramfs を指すエントリを削除する必要があります。}}
+
{{Warning|マイクロコードと initramfs を指す {{ic|initrd}} エントリを削除する必要があります。}}
   
 
例:
 
例:
94行目: 94行目:
 
=== dracut ===
 
=== dracut ===
   
[[dracut#カーネルコマンドラインオプション|コマンドラインパラメータを配置]] を、例えば {{ic|/etc/dracut.conf.d/cmdline.conf}} に配置します。
+
[[dracut#カーネルコマンドラインオプション|コマンドラインパラメータ]] を、例えば {{ic|/etc/dracut.conf.d/cmdline.conf}} に配置します。
   
 
画像を生成する。
 
画像を生成する。
132行目: 132行目:
 
=== systemd-boot ===
 
=== systemd-boot ===
   
[[systemd-boot#Unified kernel images|systemd-boot]] は {{ic|''esp''/EFI/Linux/}} 内で Unified カーネルイメージを検索し、それ以上の設定は必要ありません。{{man|7|sd-boot|FILES}} を見て下さい。
+
[[systemd-boot#Unified kernel images|systemd-boot]] は {{ic|''esp''/EFI/Linux/}} 内で Unified カーネルイメージを検索しますので、それ以上の設定は必要ありません。{{man|7|sd-boot|FILES}} を見て下さい。
   
 
=== UEFI から直接起動 ===
 
=== UEFI から直接起動 ===
142行目: 142行目:
 
オプションの説明は {{man|8|efibootmgr}} をご覧ください。
 
オプションの説明は {{man|8|efibootmgr}} をご覧ください。
   
== See also ==
+
== 参照 ==
   
 
* [https://linderud.dev/blog/mkinitcpio-v31-and-uefi-stubs/ mkinitcpio v31 and UEFI stubs]
 
* [https://linderud.dev/blog/mkinitcpio-v31-and-uefi-stubs/ mkinitcpio v31 and UEFI stubs]

2022年3月3日 (木) 23:13時点における版

Unified カーネルイメージ は単一の実行ファイルで、UEFI ファームウェアから直接起動したり、ブートローダによってほとんどあるいは全く設定なしで自動的に起動することができます。

Arch がサポートするカーネル自体は UEFI ファームウェアでロードできます が、ユニファイドイメージはそれを組み込むことを可能にします。

出来上がった実行ファイル、つまりこれら全ての要素は、signed で簡単にセキュアブート で使用できるようにすることができます。

ノート: 記事全体で espEFI システムパーティション のマウントポイントを表します。

unified カーネルイメージの準備

mkinitpcio

例として実行することで機能をテストできます

# mkinitcpio -p linux -- --uefi esp/EFI/Linux/test-systemd.efi

これにより、linux プリセットのカーネルイメージが生成されます。

.preset ファイル

まず、EFI システムパーティション の適切なマウントポイントを指定して、 /etc/mkinitcpio.d/linux.preset あるいは使用しているプリセットを以下のように変更します。

  • マイクロコード が必要な場合は、ALL_microcode=(/boot/*-ucode.img) を追加して、mkinitcpio にその場所を追加します。
  • PRESET_efi_image= PRESETS= の各項目に対して、PRESET_efi_image= パラメータを追加します。default_efi_image="esp/EFI/Linux/archlinux-linux.efi"fallback_efi_image="esp/EFI/Linux/archlinux-linux-fallback.efi" の各項目です。これにより、実行ファイル名が設定されます。
  • オプションとして、各 --splash /usr/share/systemd/bootctl/splash-arch.bmp 行に PRESET_options= を追加して、スプラッシュ画像を追加することも可能です、つまり default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"fallback_options="-S autodetect --splash /usr/share/systemd/bootctl/splash-arch.bmp" のように指定します。

以下は、linux カーネルと Arch のスプラッシュスクリーンのための linux.preset の動作例です。

/etc/mkinitcpio.d/linux.preset
# mkinitcpio preset file for the 'linux' package

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"
ALL_microcode=(/boot/*-ucode.img)

PRESETS=('default' 'fallback')

default_image="/boot/initramfs-linux.img"
default_efi_image="esp/EFI/Linux/archlinux-linux.efi"
default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"

fallback_image="/boot/initramfs-linux-fallback.img"
fallback_efi_image="esp/EFI/Linux/archlinux-linux-fallback.efi"
fallback_options="-S autodetect --splash /usr/share/systemd/bootctl/splash-arch.bmp"

この2番目の例では、linux のデフォルトイメージと linux-lts のフォールバックイメージを作成します。

/etc/mkinitcpio.d/linux.preset
ALL_config="/etc/mkinitcpio.conf"
ALL_microcode=(/boot/*-ucode.img)

PRESETS=('default' 'fallback')

default_kver="/boot/vmlinuz-linux"
default_image="/boot/initramfs-linux.img"
default_efi_image="/boot/EFI/Linux/archlinux-linux.efi"
default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"

fallback_kver="/boot/vmlinuz-linux-lts"
fallback_image="/boot/initramfs-linux-lts-fallback.img"
fallback_efi_image="/boot/EFI/Linux/archlinux-linux-lts-fallback.efi"
fallback_options="-S autodetect --splash /usr/share/systemd/bootctl/splash-arch.bmp"
ヒント: 複数のカーネルを使用している場合は、ESP に十分なスペースがあることを確認してください。mkinitcpio は現在 initramfs-*.img*.efi 実行可能ファイルの両方をビルドし、使用されるスペースを2倍にします。[1] を参照してください。

カーネルコマンドライン

次に、カーネルパラメータ を使用して /etc/kernel/cmdline を作成します。

# cp /proc/cmdline /etc/kernel/cmdline
警告: マイクロコードと initramfs を指す initrd エントリを削除する必要があります。

例:

/etc/kernel/cmdline
rw quiet bgrt_disable
ヒント: bgrt_disable パラメータは ACPI テーブルをロードした後に OEM ロゴを表示しないように Linux に指示します。

最後に、initramfs を再生成します。

dracut

コマンドラインパラメータ を、例えば /etc/dracut.conf.d/cmdline.conf に配置します。

画像を生成する。

# dracut -f -q --uefi --uefi-splash-image /usr/share/systemd/bootctl/splash-arch.bmp

こちらも参照 dracut#カーネルのアップグレード時に新しい initramfs を生成

手動で

使いたいカーネルコマンドラインをファイルに入れて、objcopy(1) でバンドルファイルを作成します。

マイクロコード の場合、まず以下のようにマイクロコードファイルと initrd を連結します。

$ cat /boot/cpu_manufacturer-ucode.img /boot/initramfs-linux.img > /tmp/combined_initrd.img

Unified カーネルイメージを構築するときに、/tmp/combined_initrd.img を initrdとして渡します。このファイルは後で作成できます。

$ objcopy \
    --add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \
    --add-section .cmdline="/etc/kernel/cmdline" --change-section-vma .cmdline=0x30000 \
    --add-section .splash="/usr/share/systemd/bootctl/splash-arch.bmp" --change-section-vma .splash=0x40000 \
    --add-section .linux="vmlinuz-file" --change-section-vma .linux=0x2000000 \
    --add-section .initrd="initrd-file" --change-section-vma .initrd=0x3000000 \
    "/usr/lib/systemd/boot/efi/linuxx64.efi.stub" "linux.efi"

この正確な数値が選ばれた理由については、[2] を参照してください。

イメージを作成したら、EFI システムパーティションにコピーします。

# cp linux.efi esp/EFI/Linux/

起動方法

systemd-boot

systemd-bootesp/EFI/Linux/ 内で Unified カーネルイメージを検索しますので、それ以上の設定は必要ありません。sd-boot(7) § FILES を見て下さい。

UEFI から直接起動

efibootmgr を使って .efi ファイルに UEFI ブートエントリを作成することができます。

# efibootmgr --create --disk /dev/sdX --part partition_number --label "label". --loader 'EFILinuxfile'.efi' --verbose

オプションの説明は efibootmgr(8) をご覧ください。

参照