GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin mem-boot kernel Linux tanpa membuat gambar initrd?

initrd/initramfs adalah opsional dan bukan keharusan. bzImage adalah imej kernel murni dan dapat di-boot langsung oleh bootloader. Namun mungkin diperlukan untuk menjalankan beberapa tugas (memuat modul sistem file, driver untuk akses disk, memasang sistem file root dari beberapa media yang dapat ditukar tanpa nama/jalur tetap, dll.) yang biasanya memerlukan akses ke sistem file dan alat ruang pengguna.

Itulah initramfs adalah untuk:Ini adalah arsip CPIO yang dilampirkan ke citra kernel (citra kernel adalah wadah untuk initramf bukan sebaliknya) baik di citra kernel itu sendiri, atau oleh bootloader saat boot.

Arsip CPIO itu berisi rootfs awal dengan modul yang diperlukan untuk mengatur semua perangkat untuk mengakses sistem file root yang tepat dan beberapa program untuk mengidentifikasi perangkat tersebut, memuat modul, melakukan beberapa tugas startup lainnya me-remount sistem file root yang tepat ke / dan memulai /sbin /init

initrd serupa, dengan perbedaan utama bahwa ini adalah image sistem file, yang mungkin dan biasanya dikompresi. Kernel harus memiliki dukungan untuk sistem file yang digunakan bawaan dan akan me-mount image ini sebagai awal /.

Karena CPIO lebih sederhana dengan beberapa urutan besaran, initramfs lebih disukai daripada initrd, karena ini menghemat persyaratan untuk setiap modul sistem file yang sedang dibangun dan juga membuat pembuatan initramfs lebih mudah. Alih-alih harus membuat gambar ext2, loopdevice mount dan mengisinya, ini bermuara pada pembuatan arsip sederhana, tidak berbeda dengan menggunakan tar.

Namun jika Anda mengkompilasi kernel Anda dengan semua driver dan modul yang diperlukan yang dibangun ke dalam gambar kernel, dan perangkat sistem file root Anda memiliki nama tetap di sistem, Anda tidak memerlukan initramfs karena kernel dapat melakukan banyak hal dengan sendirinya.


Contoh QEMU + Buildroot minimal

Berikut adalah contoh konkret minimal yang menunjukkan bahwa initrd tidak wajib:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

Dengan penyiapan itu, kita dapat dengan mudah menjalankan dua jenis perintah QEMU yang berfungsi:

qemu-system-x86_64 -drive file=rootfs.ext2

dan:

qemu-system-x86_64 -initrd rootfs.cpio

Dimana:

  • rootfs.ext2 dan rootfs.cpio pada dasarnya adalah sistem file root yang sama, tetapi dalam format yang berbeda
  • perintah pertama memiliki hard drive dan tidak ada -initrd
  • perintah kedua adalah -initrd tapi tidak ada hard drive

Dalam kedua kasus, booting Linux baik-baik saja, kecuali di -initrd sistem, penulisan file tidak persisten karena semuanya ada di memori.


Linux
  1. Menantikan konfigurasi jaringan Linux di ramdisk awal (initrd)

  2. Linux – Apakah Mungkin Untuk Memasang Gambar Dari Jarak Jauh, Yang Dapat Mem-boot Dan Menginstal Sendiri?

  3. Linux – Berpartisipasi Di Milis Kernel?

  1. Apakah mungkin untuk mengembangkan modul kernel linux di CLion?

  2. Mengubah ukuran partisi boot

  3. Bagaimana cara menampilkan parameter baris perintah kernel Linux yang diberikan untuk boot saat ini?

  1. Kernel Linux:5 inovasi teratas

  2. Siklus hidup pengujian kernel Linux

  3. Linux – Apakah Header Vmlinux Berisi Panjang Gambar Kernel?