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
danrootfs.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.