Exécution de bzImage dans QEMU: impossible de monter les root fs sur unknown-block (0.0)


8

J'ai compilé le noyau en faisant make menuconfiget make. J'essayais d'exécuter le bzImage dans qemu, en le faisant, qemu -kernel bzImagemais cela n'a pas fonctionné avec le message d'erreur:

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

Erreur du noyau Linux

Comment puis-je le réparer? Comment puis-je exécuter le bzImage dans qemu?


5
Le noyau a bien démarré, mais il ne trouve pas le système de fichiers racine. Quels disques avez-vous montés dans la machine virtuelle? Quel type de système de fichiers est le système de fichiers racine, quel type de disque? Tous les pilotes nécessaires sont-ils compilés dans le noyau (oublier l'un des pilotes est une erreur courante)?
Gilles 'SO- arrête d'être méchant'

@Gilles Je n'ai pas monté de système de fichiers. Après la compilation, je suis allé directement dans le fichier où se trouve le bzImage (../arch/x86/boot) et j'ai fait la commande "qemu -kernel bzImage". c'est quand j'ai eu l'erreur.
Coder404

Réponses:


11

Cela a fonctionné. Le noyau a bien démarré. L'erreur est:

Impossible de monter les root fs sur un bloc inconnu (0.0)

Le noyau recherche un système de fichiers racine. Vous devez en fournir un. Vous ne pouvez pas interagir avec un noyau sans exécuter de processus dessus, et le processus initial doit être chargé de quelque part: lorsque le noyau démarre, il monte un système de fichiers (le système de fichiers racine) sur le répertoire /, puis exécute le programme /sbin/init. Le programme init est normalement chargé d'exécuter des scripts de démarrage et de démarrer des services, y compris des programmes permettant aux utilisateurs de se connecter.

Vous devez vous assurer que le noyau est capable de monter le système de fichiers racine. Il doit avoir des pilotes pour le type de système de fichiers et pour toutes les couches impliquées dans le périphérique de bloc (contrôleur de disque (adaptateur SCSI / SATA / IDE / USB /…), type de partition, etc.).

Linux offre une possibilité supplémentaire, qui est de charger un système de fichiers initial dans la RAM qui est utilisée pendant le processus de démarrage afin de localiser et de monter le système de fichiers racine. Ce système de fichiers initial peut contenir des modules qui gèrent le type de périphérique et de système de fichiers du système de fichiers racine. Il existe deux mécanismes légèrement différents: initrd et initramfs.


Merci d'avoir répondu! Puis-je créer un système de fichiers virtuel à partir duquel démarrer? Si oui, comment pourrais-je procéder?
Coder404

@ Coder404 Vous voulez dire un système de fichiers virtuel à utiliser comme système de fichiers racine? Faites-en un entraînement par vérin.
Gilles 'SO- arrête d'être méchant'

Je veux utiliser un système de fichiers virtuel comme système de fichiers racine pour le noyau que je construis dans QEMU. Comment créer le système de fichiers virtuel?
Coder404

1

Même si les systèmes de fichiers seront compilés seuls le noyau, un système de fichiers initial doit être créé qui sera présent dans la RAM pour exécuter le noyau. Pour créer ce système de fichiers ram initial, mkinitrd est utilisé. Dans ubuntu, mkinitramfs est utilisé à la place de cela

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

mkinitramfs -o initrd.img-2.6.32.59

après cela, exécutez le noyau sur qemu

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

-initrd représente le système de fichiers ram initial

vous pouvez trouver le système de fichiers ram sous /boot/initramfs-linux.img

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.