Menjalankan bzImage di QEMU: Tidak dapat me-mount root fs pada blok yang tidak diketahui (0.0)


8

Saya mengkompilasi kernel dengan melakukan make menuconfigdan make. Saya mencoba menjalankan bzImage di qemu, dengan melakukan qemu -kernel bzImagetetapi tidak berhasil dengan pesan kesalahan:

Unable to mount root fs on unknown-block(0.0)

Kesalahan kernel Linux

Bagaimana saya bisa memperbaikinya? Bagaimana saya bisa menjalankan bzImage di qemu?


5
Kernel boot dengan baik, tetapi tidak dapat menemukan sistem file root. Disk apa yang sudah Anda pasang di VM? Jenis sistem file apa yang merupakan sistem file root, jenis disk apa? Apakah semua driver yang diperlukan dikompilasi di kernel (lupa bahwa salah satu driver adalah kesalahan umum)?
Gilles 'SO- stop being evil'

@ Gilles Saya tidak memasang sistem file. Setelah mengkompilasi, saya langsung masuk ke file di mana bzImage berada (../arch/x86/boot) dan melakukan perintah "qemu -kernel bzImage". saat itulah saya mendapatkan kesalahan.
Coder404

Jawaban:


11

Itu berhasil. Kernel boot baik-baik saja. Kesalahannya adalah:

Tidak dapat memasang root fs pada blok tidak dikenal (0.0)

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.


Terima kasih atas jawabannya! Bisakah saya membuat sistem file virtual untuk boot? Jika demikian, bagaimana saya akan melakukan itu?
Coder404

@ Coder404 Maksud Anda sistem file virtual untuk digunakan sebagai sistem file root? Jadikan ram drive.
Gilles 'SANGAT berhenti menjadi jahat'

Saya ingin menggunakan sistem file virtual sebagai sistem file root untuk kernel yang saya bangun di QEMU. Bagaimana saya membuat sistem file virtual?
Coder404

1

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

cd ~ / linux / linux-2.6.32.59 / arch / i386 / boot

mkinitramfs -o initrd.img-2.6.32.59

setelah itu jalankan kernel pada qemu

qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd merepresentasikan sistem file ram awal

Anda dapat menemukan sistem file ram di /boot/initramfs-linux.img

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.