BuildEFISTUB

BuildEFISTUB

数日間、私と同じ問題を抱えている人がいるのか、あちこち探していました。これは私のLenovo Z50-70のLinuxカーネルです(おそらくこれは重要です)。

 $ uname -a
Linux Z50-Debian 4.7.0-1-amd64 #1 SMP Debian 4.7.8-1 (2016-10-19) x86_64 GNU/Linux

 $ lvdisplay  |grep -i path
  LV Path                /dev/Debian/Home
  LV Path                /dev/Debian/Root
  LV Path                /dev/Debian/Swap

# gdisk /dev/sda -l |grep 0
GPT fdisk (gdisk) version 1.0.1
Disk identifier (GUID): 4A75B640-D8A2-03A2-906D-9D9228B6E800
Partitions will be aligned on 2048-sector boundaries
Total free space is 3707 sectors (1.8 MiB)
   1            2048         3653631   1.7 GiB     2700  Basic data partition
   2         3653632         4601855   463.0 MiB   EF00  EFI system partition
   3         4601856         6752255   1.0 GiB     EF00  Basic data partition
   4         6752256         7014399   128.0 MiB   0C01  Microsoft reserved ...
   5         7014400       907063665   429.2 GiB   0700  Basic data partition
   6       907065344       908787711   841.0 MiB   2700  
   7       908787712       910155775   668.0 MiB   EF00  
   8       910155776       953745407   20.8 GiB    8E00  Linux
   9       953745408       976773119   11.0 GiB    2700  Basic data partition

efi-stub(カーネルUEFIブートローダ)を使用するために、2つのガイドに従いました。

efistubの公式Debian Wiki そして Debianおよびefistub用のビットバイナリガイド

しかし、それらのどれも動作しません。

質問1: 私のファームウェアが見つかりませんでしたEFI/Debian/vmlinuz.efi(しかし、rEFInd efiアプリを見つけ、最初のDebianインストールでgrubを見つけました)。

質問2: 起動がvmlinuz.efi完了すると、rEFInd起動プロセスが停止し、ルートディレクトリをマウント/見つからないというエラーが表示されます。

返品

cat /proc/cmdline 

myをエコーし​​ないが/proc/cmdline指定されたルートインストールオプションを持たない一般的なエコーは発生します。

質問3: ガイドを使用していますが、efibootmgr再起動するたびに新しいエントリが削除されます。

私は(U)EFIの世界に初めて触れましたが、この作業を完了できることを心から願っています。今はアイデアがほとんどないので、役に立つ内容を知っていれば教えてください!

ありがとうございます。

答え1

この質問は古いですが、答えがなく、最近上記の設定を使用して私のarchlinuxシステムを起動したので、どうしたのかを見てみましょう。私の仕様:

OS : arch Linux (mainline kernel, Linux-zen kernel, linux-clear kernel).
System : HP laptop with UEFI 2.

これに加えて、私のキーを使ってセキュアブートを設定してみました(これにより設定がさらに複雑になりました)。しかし、ここではその部分を扱いません。

あなたがすべき最初のことはinitramfsあなたのものを正しく整理することですhooks。それがあなたが経験している問題全体の中心です(おそらく私もそうでした)。私はアーチLinuxがどのようにramdisk / initramfsを構築するのか理解しています。プロセスをDebian(または使用している他のディストリビューション)に変換する必要があるかもしれません。

私はビルドプロセス中に利用可能なmakinitcpio initramfsの3つのフックから始めました。

base hook ( this is the main and necessary hook )
udev hook ( it does the detection of the devices  of the system including the hard disk and root filesystem ).
LVM hook ( since you have LVM, this hooks would include the device mapper and set up the LVM volumes ).

BuildEFISTUB

binutils パッケージの objcopy ツールを使用します。

objcopy \
    --add-section .osrel="/etc/os-release"                          --change-section-vma .osrel=0x20000    \
    --add-section .cmdline=<(echo -n "${cmdline}")                  --change-section-vma .cmdline=0x30000  \
    --add-section .splash="${SPLASH}"                               --change-section-vma .splash=0x40000   \
    --add-section .linux="${linux}"                                 --change-section-vma .linux=0x2000000  \
    --add-section .initrd=<(cat "${INITRD_PREPEND[@]}" "${initrd}") --change-section-vma .initrd=0x3000000 \
    "${EFISTUB}" "${output}"
  wait $!

上記のコマンドは、デフォルトでカーネル、iniramfs、およびカーネルパラメータを取得し、ファームウェア(UEFI)から直接起動できる単一のEFISTUBに変換します。

ここでは: $cmdlineデフォルトでは、カーネルパラメータには少なくともルートパスを含める必要があり、root=/dev/Debian/root $SPLASH起動時に起動画面として表示したい画像である必要があります。

$EFISTUBlinuxx64.efi.stub付属の一般ですsystemd。上記のArch Linux、通常/use/lib/systemd/efi/ディレクトリにあります。

$output出力ファイルが存在する場所です(もちろん、ファームウェアがそれを検出できるようにESP(EFIシステムパーティション)に配置する必要があります)。

その後、助けを借りて、efibootmgr新しく作成された開始項目の項目を作成できますEFISTUB

# efibootmgr -c -d /dev/sda -p 2 -L "Debian EFISTUB" -l /efi/EFI/debian/linux-efi.efi 

上記の例では:

  • -c作成(新しい開始項目の作成)を示します。
  • -dESPが存在するディスクを指すために使用されます。
  • -pこのディスクのパーティション番号を指します。
  • -L開始項目に適切なラベルを提供するために使用されます。
  • -lローダー(デフォルトではefistub)を指します。 ESPのEFI / debianディレクトリにあり、/efiの下にインストールされているとします。

ヒント:起動時にシェルを使用するのが非常に便利であることefistubがわかりました。UEFIカスタムカーネルパラメータを使用してカーネルを起動するなど、このシェルで試すことができる多くのタスクがありますefistub

上記のガイドは、ブートローダのヘルプなしでEFISTUBを起動するためのものです。起動するオペレーティングシステム(カーネル)が複数ある場合は、ブートローダを追加することでさまざまですefistubs

答え2

私の考えでは、Debianのインストールディスクを見つけてPCに接続するだけです。次に、ディスクから起動し、トラブルシューティングメニューに進み、vmlinuzファイルと他の起動ファイルを復元します。

関連情報