Не перенастроенное виртуальное устройство Qemu вызывает панику ядра

#kernel #qemu #drive

#ядро #qemu #привод

Вопрос:

Я пытаюсь загрузить Linux с помощью qemu-system-aarch64 со следующими параметрами.

 /home/levi/work/lisa-qemu/external/qemu/build/aarch64-softmmu/qemu-system-aarch64 -machine virt,gic-version=3 -m 2G -cpu max -drive file=/home/levi/work/lisa-qemu/build/VM-ubuntu.aarch64/ubuntu.aarch64.img.kernel-5.10.0 -2,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 -drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash -smp cpus=2,cores=1 -kernel /home/levi/work/lisa-qemu/build/VM-ubuntu.aarch64/vmlinuz-5.10.0 -2 --initrd /home/levi/work/lisa-qemu/build/VM-ubuntu.aarch64/initrd.img-5.10.0 -2 -append "root=/dev/vda1 nokaslr console=ttyAMA0" -nographic 
 

Но при загрузке он не смог найти /dev/vda1. Но существуют только устройства цикла, поэтому это вызывает панику ядра при mount_root.

 [    1.468856] VFS: Cannot open root device "vda1" or unknown-block(0,0): error -6
 

Я не знаю, как я могу заставить ядро распознать мой drive0, чтобы ядро загрузилось…

flash.img0 — это /usr/share/qemu-efi-aarch64QEMU_EFI.fd, а flash.img1 — все нулевые изображения.

Ответ №1:

Это означает, что в вашем гостевом ядре не настроены необходимые драйверы для поддержки virtio. Документация QEMU для платы virt предполагает, что некоторые параметры конфигурации, которые вы должны включить в своем ядре, включают:

 CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y
 

и для графики virtio-gpu-pci:

 CONFIG_DRM=y
CONFIG_DRM_VIRTIO_GPU=y
 

Кроме того, убедитесь, что у вас есть все опции для конкретных бэкэндов virtio, которые вы хотите (в данном случае, блочного устройства virtio).

Комментарии:

1. Спасибо за ваш ответ. Но упомянутые выше параметры уже настроены и ядро построено правильно.

2. Было бы полезно указать больше, чем просто одну строку журнала. Обычно в начале этой строки содержится информация, которая проливает больше света на то, почему ядро не смогло открыть корневую файловую систему.

3. Я увидел, что /dev/vda1 не найден при обнаружении устройства. у него просто есть устройства цикла, а не /dev / vda. Я задаюсь вопросом, почему /dev/vda1 не отображается в том, что я использовал -параметры устройства и диска.

4. Когда я говорю «процитировать больше, чем просто одну строку журнала», я имею в виду «процитировать больше журнала», а не «скажите мне, какова ваша интерпретация информации журнала»… Если /dev/vda отсутствует в списке, то это, скорее всего, означает, что в вашем ядре все еще отсутствуют некоторые параметры конфигурации.