ブートローダーなしのLinuxブート

はじめに


ここで、可能であれば、できるだけ簡単かつ詳細に質問に答えようとします。
「GRUB 2、iELILOなどのブートローダーを使用せずにLinuxをブートするには(例としてubuntuを使用)」
Ubuntuを[UEFIのみ]モードで実行/インストールする方法を理解しません。 これを行うには、 help.ubuntu.ru / wiki / install_installation_on_computer_s_efiに連絡してください。
そしてこちらhelp.ubuntu.ru/wiki/lubuntu-osinstallation
すべてのアクションは、すでに実行中のシステムで実行されます。

この機会を利用するには、いくつかの要件を遵守する必要があります。

必要条件


1. BIOSではなくUEFI(モードを[UEFIのみ]に設定);
2. OS 64ビット。
3. Linux(カーネル> = 3.3);

入力データ


セットモードでインストールされたディストリビューションlubuntu-13.04-desktop-amd64 [UEFIのみ]。 高速ブートを無効にします(完了後、有効にすることができます)。

結果のパーティションテーブル
user@pc:~$ sudo parted /dev/sda print Model: ATA mSata Smartbuy 3 (scsi) Disk /dev/sda: 32,0GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 99,6MB 98,6MB fat32 boot 2 99,6MB 27,8GB 27,7GB ext4 3 27,8GB 32,0GB 4182MB linux-swap(v1) 

1つのパーティションに注意を払う必要があります。別のブートローダー(たとえば、GRUB 2)を使用せずにカーネルを直接ブートします。そのための要件は次のとおりです。

  1. ブートフラグセット。
  2. 推奨サイズは最大512 MBです(サイズの決定方法についてはさまざまな推奨事項を満たしましたが、主に200〜300 MBです。実際、5.3 MBが占有されることに気づきます)。
  3. ファイルシステムfat32 / fat16 / fat12(UEFIがサポートしています);

このセクションを最初に行う必要はありません。最も重要なことは、上記の要件を順守することです(自分で最初に置くことをお勧めします)。

準備手順が完了しました。UEFIのみのモードが設定された64ビットのオペレーティングシステムが動作し、カーネルのパーティションがあります(GRUBがそこにある時点で、その隣にカーネルを配置します)。

カーネルを取得して構成する


OSをロードし、コンソールを開きます。
ブートローダーを使用せずにカーネルを起動するには、ルートとしてマウントされるドライブを指定する必要があります。これを行うには、カーネルをアセンブルし、オプションを指定する必要があります
 CONFIG_CMDLINE="root=/dev/sda2 ro" 

OSをsda2ドライブにインストールしています。
通常、この行は他の多くのパラメーターとともにGRUBローダーによって渡されます。

異なるバージョンのディストリビューションがある場合
カーネルオプションがインストールされていることを確認します。
CONFIG_EFI = y
CONFIG_RELOCATABLE = y
CONFIG_EFI_STUB = y
CONFIG_EFI_PARTITION = y
CONFIG_EFI_VARS = m#またはyも機能します。
CONFIG_FB_EFI = y
CONFIG_FRAMEBUFFER_CONSOLE = y

発言
元のカーネルを使用していないのに自分で組み立てた場合、サポートを提供したり、バグレポートを送信したりするのは難しいとUbuntu開発者サイトに書かれています。 https://help.ubuntu.com/community/Kernel/Compile

必要なツールを入手してください(時間がかかる場合があります)
 sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge sudo apt-get install libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev 

ここで、すべてのアクションを実行するディレクトリを作成し、システムの最後のカーネルの変更を象徴するフォルダーv2を指定します。
 user@pc:~$ mkdir v2 user@pc:~$ cd v2 

最新のカーネルバージョンのソースコードを取得し、環境を準備する
 user@pc:~/v2$ apt-get source linux-image-$(uname -r) user@pc:~/v2$ sudo apt-get build-dep linux-image-$(uname -r) 

linux-3.8.0フォルダーに行きましょう
 cd linux-3.8.0 

それでは、カーネル構成の変更を始めましょう。
 chmod a+x debian/scripts/* chmod a+x debian/scripts/misc/* fakeroot debian/rules clean fakeroot debian/rules editconfigs 

最後のコマンドが実行されると、最初に通知が表示されます。
 Do you want to edit config: amd64/config.flavour.generic? [Y/n] 

ここでは、64ビットカーネルの構成を編集していることを示しています。Yを入力し、Enterキーを押してウィンドウを取得します


検索( '/'キー)を開き、cmdlineと入力してEnterキーを押し、スクリーンショットの内容を確認します


次に、数字の2を押してパラメーター「Built-in kernel command line」の編集に進み、「y」をクリックしてこのフィールドにアスタリスクを設定します。このモードがオンになっていることを象徴します。今度は下のフィールドに進み、Enter
 root=/dev/sda2 ro 

これは、すべてが開始されたまさにそのオプションです(sda2をディスクに置き換えます)。
この設定を取得しました:


小さな余談(スキップできます)
この段階で、私は停止し、カーネルを組み立てましたが、すべてが非常に単純であり、新しく組み立てられたカーネルをロードするときに、カーネルがルートパーティションを見つけることができないというエラーが発生しました(実際、これはカーネルの構築プロセス全体が開始されました) 私は長い間何が起こっていたのだろうと思い、UUID形式でディスクを指定しようとしましたが、私は安定してエラーを受け取りました:
 VFS: Cannot open root device "sda2" or unknown-block(0,0) error -6 Please append a correct "root=" boot option; here are the available partitions: Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) 

グーグルの過程で、ディスクシステムドライバーをカーネルに組み込む必要があり、モジュールによって接続されていることがわかりました。 その結果、カーネルは起動時にハードディスクを見つけることができず、ドライブをマウントできないというエラーを報告しました。

ここで、さらにいくつかのカーネルオプションをインストールする必要があります。
コンソールに移動します(別のコンソールを実行します)
 lspci -n 

結果の出力をサイトの入力ウィンドウに挿入します
Debian GNU / Linuxデバイスドライバーのチェックページ
チェックをクリックしてください:


このリストから、ディスクコントローラードライバーを有効にする必要があります。私の場合はahci(String 'Sata Controller'、Column 'Driver')です。
もう一度「/」を押して検索し、「ahci」と入力します。 忠実のために、SATA_AHCI_PLATFORM、SATA_ACARD_AHCI、およびSATA_AHCIを埋め込むための3つのオプションがすべて記載されています。

ここですべての場所で「終了」を選択し、最後に同意して、「はい」を選択して設定を保存します。 次に、コンソールでは、他のプラットフォームの構成を編集することを拒否します。それらは必要ないからです。

カーネルアセンブリ


 user@pc:~/v2/linux-3.8.0$ fakeroot debian/rules clean user@pc:~/v2/linux-3.8.0$ fakeroot debian/rules binary-headers binary-generic 

今では、カーネルが組み立てられるまで待つだけです。 お使いのコンピューターの能力に応じて、カーネルのビルド時間は私のマシンに依存し、ビルドプロセスは1時間弱かかりました。

アセンブリ後、結果のカーネルを「EFI / boot」フォルダー内のブートパーティションにコピーします。これは、パーティションが/ boot / efiフォルダーにマウントされているためです。その結果、パス/ boot / efi / EFI / boot /
 sudo mkdir -p /boot/efi/EFI/boot/ 

ここで、カーネルをこのフォルダーにコピーして、bootx64.efiという名前を付ける必要があります。
 user@pc:~/v2/linux-3.8.0$ sudo cp ./debian/build/build-generic/arch/x86_64/boot/bzImage /boot/efi/EFI/boot/bootx64.efi 

GRUBブートローダーを使用したダウンロードは引き続き利用可能であり、UEFIに切り替えるだけでよいことに注意してください(起動時にdelまたはF12を押します)。 これは、何らかの理由でカーネルが起動しなかった場合に便利です。

ここで、カーネルをブート可能にすることをUEFIに伝える必要があります。そのためには、UEFI設定を編集できるプログラムをインストールする必要があります。
 sudo apt-get install efibootmgr 

UEFI変数にアクセスできることを確認してください
 sudo modprobe efivars 

エラーなく動作した場合は、最後の仕上げを行います。 ブート優先順位1でカーネルをUEFIに追加します。--labelの後の引用符で囲まれた名前は、独自のものを入力できます。 大文字と小文字が区別されないため、ブートローダーへのパスに登録することは重要ではありません。
 sudo efibootmgr --create --part 1 --label "Linux" --loader '\efi\boot\bootx64.efi' 

現在、「Linux」という名前の新しい行がUEFIブートメニューに追加され、カーネルが直接ロードされます。 それだけです コンピューターを再起動し、カーネルがブートローダーをバイパスして起動することを確認できます。
 sudo reboot 

ロードしたカーネルがコンパイルされていることを確認するには、次のように入力します
 cat /proc/cmdline 

ブート時にカーネルに渡されるパラメーターのリストが表示されます(以前に指定しました)。
 root=/dev/sda2 ro 


目標が達成されました! ご清聴ありがとうございました!

同様のテーマの記事:
サードパーティのブートローダーなしでGNU / Linuxを起動する

知識の知恵の源:
  1. help.ubuntu.com/community/UEFI
  2. www.ondatechnology.org/wiki/index.php?title=Booting_the_Linux_Kernel_without_a_bootloader
  3. swift.siphos.be/linux_sea/kernelbuilding.html#idm3437981411120
  4. askubuntu.com/questions/71332/kernel-panics-with-cannot-open-device-error-where-do-i-append-the-root
  5. help.ubuntu.com/community/Kernel/Compile
  6. wiki.ubuntu.com/Kernel/BuildYourOwnKernel
  7. www.rodsbooks.com/efi-bootloaders


UPD:
貴重なコメントをいただいたValdikSSに感謝します。 目標を達成するのははるかに簡単です。 この場合、カーネルを再構築する必要はありません。 / itディレクトリからinitrdとともにFATパーティションにコピーし、正しいパラメーターをブートローダーに伝えることができます。
 sudo efibootmgr --create --disk /dev/sda --part 1 --label "Lubuntu" -u --loader '\efi\boot\vmlinuz.efi' root=/dev/sda2 initrd=/efi/boot/initrd.img rw quiet 


Source: https://habr.com/ru/post/J196926/


All Articles