Saya mengkompilasi kernel dengan melakukan make menuconfig
dan make
. Saya mencoba menjalankan bzImage di qemu, dengan melakukan qemu -kernel bzImage
tetapi tidak berhasil dengan pesan kesalahan:
Unable to mount root fs on unknown-block(0.0)
Bagaimana saya bisa memperbaikinya? Bagaimana saya bisa menjalankan bzImage di qemu?
linux
linux-kernel
qemu
Coder404
sumber
sumber
Jawaban:
Itu berhasil. Kernel boot baik-baik saja. Kesalahannya adalah:
Kernel mencari sistem file root. Anda perlu menyediakan satu. Anda tidak dapat berinteraksi dengan kernel tanpa menjalankan proses di dalamnya, dan proses awal harus dimuat dari suatu tempat: ketika kernel mulai, ia memasang sistem file (sistem file root) pada direktori
/
, kemudian menjalankan program/sbin/init
. Program init biasanya bertugas menjalankan skrip boot dan memulai layanan termasuk program yang memungkinkan pengguna masuk.Anda harus memastikan bahwa kernel dapat me-mount sistem file root. Itu harus memiliki driver untuk tipe sistem file dan untuk semua lapisan yang terlibat dalam perangkat blok (pengontrol disk (SCSI / SATA / IDE / USB / ... adaptor), tipe partisi, dll.).
Linux menawarkan kemungkinan tambahan, yaitu memuat sistem file awal dalam RAM yang digunakan selama proses boot untuk menemukan dan me-mount sistem file root. Sistem file awal ini dapat berisi modul yang menangani perangkat dan tipe sistem file dari sistem file root. Ada dua mekanisme yang sedikit berbeda: initrd dan initramfs.
sumber
Meskipun file sistem akan dikompilasi sendiri oleh kernel, file sistem awal harus dibuat yang akan hadir dalam RAM untuk menjalankan kernel. Untuk membuat sistem file ram inital ini, mkinitrd digunakan. Di ubuntu mkinitramfs digunakan sebagai pengganti itu
setelah itu jalankan kernel pada qemu
-initrd merepresentasikan sistem file ram awal
Anda dapat menemukan sistem file ram di /boot/initramfs-linux.img
sumber