UEFIから直接カーネルを起動する

UEFIから直接カーネルを起動する

UEFIから直接Arch Linuxを起動したいです。

私の考えは、このツールを使用して開始項目を作成することでしたefibootmgr。私は次のコマンドを使用しました。

efibootmgr --create --label "arch-test" --loader /vmlinuz-linux --unicode 'root=PARTUUID=f2083749-8bbc-570b-ab3b-e79d72fa08ac rw initrd=\initramfs-linux.img' --verbose

フォローするEFISTUBのArch Wikiページエントリを作成しましたが、そのエントリから起動しようとすると、次のメッセージでシステムは非常に初期段階で起動状態で停止します。

VFS: unable to mount root fs on unknown-block(0,0)

PS:私はこれを緊急/救助ツールとして使用したいと思いました。つまり、最新のsystemdアップグレードによりブートマネージャ(systemd-boot)が中断され、外部ライブUSBの助けを借りてシステムを使用できなくなりました。これからはこのような状況は避けたいです!


修正する:
1. /スラッシュまたはバックスラッシュの有無にかかわらず、以前はinitrd重要ではありません。 2.と
をすべて試しましたが、変更はありません。 3. myはonです。UUIDPARTUUID
/boot/dev/sda14./dev/sda3
また/bootESP

    # fdisk -l /dev/sda
    [...]
    Disklabel type: gpt
    [...]

    Device         Start       End   Sectors   Size Type
    /dev/sda1       2048   2099199   2097152     1G EFI System
    /dev/sda2    2099200  18874367  16775168     8G Linux swap
    /dev/sda3   18874368 104857599  85983232    41G Linux filesystem
    [...]
    # minfo -i /dev/sda1 :: | grep 'disk type'
    disk type="FAT32   "
  1. あなたのコメントに基づいて試してみました。UEFI シェル。マイコンピュータには内部UEFIシェル(可能ですか?)。とにかく、私は持っています:

    • 以下からコピーをダウンロードしました。千ヌオコア
    • Shell.efi置く/boot/EFI/Boot/
    • アイテムを追加しました。

      efibootmgr --create --label "TIANO-0" --loader /EFI/Boot/Shell.efi --verbose
      
    • 私が入力したこのシェルで再起動しfs0:ます。vmlinuz-linux root=/dev/sda3

    • 同じエラーが発生します。

      VFS: unable to mount root fs on unknown-block(0,0)
      
  2. 必須のようですinitrd少なくともアーチLinuxの場合);魔法を生成する
    コマンドvmlinuz-linux initrd=initramfs-linux.img root=/dev/sda3

  3. 私のシステムはDell XPS 9343ノートブックで、バグを見つけました。 EFISTUBを起動できません(ArchWikiに報告されています)。ここ
    私はこれが説明すると思います。失敗する(最初の言及)正しい手順!
    ArchWikiのページでも解決策を提案していますが、これが私が今まで試したことです。


ベストアンサー1

   -l | --loader NAME
              Specify a loader (defaults to \\elilo.efi)

EFIスタブ付きカーネルはまだ荷物を載せる人。 BIOSから起動するにはEFI-アプリケーション。すべてのブートローダには.EFIサフィックスがあります。カーネルを直接起動可能なオブジェクトに置き換えることは可能だと思いますが、通常は(選択するかどうかにかかわらず)起動するブートローダの1つです。

しかし、あなたは使用することができますUEFI シェル(最新システムでは)対話型ブートローダとして使用されます。これはテストするのに最適です。 BIOSの起動デバイスcdfs0:ESPなど)のように有効にしてから、次のことができます。

fs0:> bzImage root=/dev/sda3 

数日前に初めてbzImageをコンパイルしました。まず、CONFIG_EFI_STUBを忘れ、UEFIシェルはカーネルをバイナリではないものとして扱います。 2番目のバージョンは起動しますが、initrd =はありません。 EFI_STUB=y を除き、一部のオプションをオフにしてデフォルト値のままにしました。

ただし、ほとんどのディストリビューションにこれを行うカーネルがあるのは事実です。いいえデフォルトのブロックデバイスドライバが必要です。対応するinitrd=IMAGEオプションが必要です。


私はUefi Shellをブートローダーとして使用しています。非常にエレガントではありませんが、非常にシンプルで柔軟です。緊急オプションとしてはUefi Shellが組み込まれており、パーティションのブートローダを削除できるので完璧だと思います。


これはから来たものですドキュメント/efi-stub.txt

> Passing kernel parameters from the EFI shell
> --------------------------------------------
> 
> Arguments to the kernel can be passed after bzImage.efi, e.g.::
> 
>     fs0:> bzImage.efi console=ttyS0 root=/dev/sda4

同じUefi Shellプロンプトがありますが、fs0:>すべての一般的なディストリビューションにはEFI_STUBカーネルがあり、名前はまったく重要ではありません。最も一般的なのは「vmlinuz」(=圧縮されたvmlinuxの周りのローダー)です。

「.efi」および「console=」オプションを保持する場合は、次のままにしてください。

fs0:> bzImage root=/dev/sda4

以下を除いて、同じ最小起動コマンドですsda3。 Uefi Shell bzImageを起動すると、stubカーネルが解凍され開始され、組み込みモジュールがSATAディスクを認識します。root=デバイスが機能しない場合は、パニックになりますVFS: unable to mount


grub64.EFIのように、BIOSからbzImage(またはvmlinuzまたは...)を直接起動できません。


UEFI - アプリケーション(Wikipedia):

オペレーティングシステムのロードに加えて、UEFIはEFIシステムパーティションにファイルとして常駐するUEFIアプリケーションを実行できます。 UEFI コマンドシェルで実行できます。ファームウェアによるブートマネージャ、または他のUEFIアプリケーション。 UEFIアプリケーションは、システムメーカーとは独立して開発およびインストールできます。

UEFIアプリケーションの1つのタイプは、GRUB、rEFInd、Gummiboot、Windowsブートマネージャなどのオペレーティングシステムローダです。これはオペレーティングシステムファイルをメモリにロードして実行します。さらに、オペレーティングシステムローダは、実行する他のUEFIアプリケーションを選択できるようにユーザーインターフェイスを提供できます。 UEFIシェルなどのユーティリティもUEFIアプリケーションです。

これは、UEFIシェルがファームウェアブートローダとカーネルの間にあることを確認します。


Gentooにも同様の例があります。彼らはカーネル名に.EFIサフィックスを付けるのにこだわります。

何らかの理由でinitramfsが必要な場合は、カーネルに組み込むか、別々のファイルとして使用できます。

...

しかし、一部のUEFI実装はパラメータ渡しがサポートされていないようです。NVRAMからEFIスタブカーネルへ。

おすすめ記事