Esecuzione di bzImage in QEMU: impossibile montare root fs su unknown-block (0.0)


8

Ho compilato il kernel facendo make menuconfige make. Stavo cercando di eseguire bzImage in qemu, qemu -kernel bzImagema non ha funzionato con il messaggio di errore:

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

Errore del kernel Linux

Come posso ripararlo? Come posso eseguire bzImage in qemu?


5
Il kernel si è avviato bene, ma non riesce a trovare il filesystem di root. Quali dischi hai montato nella VM? Che tipo di filesystem è il filesystem di root, che tipo di disco? Tutti i driver necessari sono compilati nel kernel (dimenticare uno dei driver è un errore comune)?
Gilles 'SO- smetti di essere malvagio' il

@Gilles Non ho montato un filesystem. Dopo la compilazione sono andato direttamente nel file in cui si trova bzImage (../arch/x86/boot) e ho eseguito il comando "qemu -kernel bzImage". questo è quando ho ricevuto l'errore.
Coder404,

Risposte:


11

Ha funzionato. Il kernel si è avviato bene. L'errore è:

Impossibile montare root fs su unknown-block (0.0)

Il kernel è alla ricerca di un filesystem di root. Devi fornirne uno. Non è possibile interagire con un kernel senza eseguire i processi su di esso e il processo iniziale deve essere caricato da qualche parte: all'avvio del kernel, monta un filesystem (il filesystem di root) sulla directory /, quindi esegue il programma /sbin/init. Il programma init è normalmente responsabile dell'esecuzione degli script di avvio e dell'avvio dei servizi, inclusi i programmi che consentono agli utenti di accedere.

È necessario assicurarsi che il kernel sia in grado di montare il filesystem di root. Deve disporre di driver per il tipo di filesystem e per tutti i layer coinvolti nel dispositivo a blocchi (controller del disco (adattatore SCSI / SATA / IDE / USB /…), tipo di partizione, ecc.).

Linux offre un'ulteriore possibilità, che consiste nel caricare un filesystem iniziale nella RAM utilizzato durante il processo di avvio per individuare e montare il filesystem di root. Questo filesystem iniziale può contenere moduli che gestiscono il tipo di dispositivo e filesystem del filesystem di root. Esistono due meccanismi leggermente diversi: initrd e initramfs.


Grazie per la risposta! Posso creare un filesystem virtuale da cui avviare? Se sì, come potrei fare per farlo?
Coder404,

@ Coder404 Intendi un filesystem virtuale da utilizzare come filesystem di root? Trasformalo in un ram drive.
Gilles 'SO- smetti di essere malvagio' il

Voglio usare un filesystem virtuale come filesystem di root per il kernel che sto costruendo in QEMU. Come farei il filesystem virtuale?
Coder404

1

Anche se i sistemi di file verranno compilati da soli nel kernel, è necessario creare un sistema di file iniziale che sarà presente nella RAM per eseguire il kernel. Per creare questo filesystem di ram iniziale, viene usato mkinitrd. In Ubuntu viene usato mkinitramfs al posto di quello

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

mkinitramfs -o initrd.img-2.6.32.59

dopodiché esegui il kernel su qemu

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

-initrd rappresenta il filesystem ram iniziale

puoi trovare il file system ram in /boot/initramfs-linux.img

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.