Ядро QEMU для raspberry pi 3 с поддержкой сетей и virtio - PullRequest
0 голосов
/ 02 мая 2020

Я использовал QEMU (qemu-system-aarch64 -M raspi3) для эмуляции Raspberry pi3 с ядром из рабочего образа. Все работало, но сети не было.

qemu-system-aarch64 \
   -kernel ./bootpart/kernel8.img \
   -initrd ./bootpart/initrd.img-4.14.0-3-arm64 \
   -dtb ./debian_bootpart/bcm2837-rpi-3-b.dtb \
   -M raspi3 -m 1024 \
   -nographic \
   -serial mon:stdio \
   -append "rw earlycon=pl011,0x3f201000 console=ttyAMA0 loglevel=8 root=/dev/mmcblk0p3 fsck.repair=yes net.ifnames=0 rootwait memtest=1" \
   -drive file=./genpi64lite.img,format=raw,if=sd,id=hd-root \
   -no-reboot

Я пытался добавить эту опцию

-device virtio-blk-device,drive=hd-root \
-netdev user,id=net0,hostfwd=tcp::5555-:22 \
-device virtio-net-device,netdev=net0 \

Но была бы ошибка

qemu-system-aarch64 : -device virtio-blk-device, drive = hd- root: Шина 'virtio-bus' не найдена для устройства 'virtio-blk-device' Я ссылался на какой-то форум и использовал машину "virt" вместо raspi3 в порядке эмуляции virtio-сети

qemu-system-aarch64 \
  -kernel ./bootpart/kernel8.img \
  -initrd ./bootpart/initrd.img-4.14.0-3-arm64 \
  -m 2048 \
  -M virt \
  -cpu cortex-a53 \
  -smp 8 \
  -nographic \
  -serial mon:stdio \
  -append "rw root=/dev/vda3 console=ttyAMA0 loglevel=8 rootwait fsck.repair=yes memtest=1" \
  -drive file=./genpi64lite.img,format=raw,if=sd,id=hd-root \
  -device virtio-blk-device,drive=hd-root \
  -netdev user,id=net0,net=192.168.1.1/24,dhcpstart=192.168.1.234 \
       -device virtio-net-device,netdev=net0 \
  -no-reboot

Ничего не напечатано, и терминал был приостановлен. Это означает, что ядро ​​не работает с машиной virt.

Я решил собрать свое собственное ядро. Кто-нибудь может дать мне совет по вариантам сборки ядра, которое работает как с QEMU, так и с virtio?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

Ваша командная строка raspi3 не имеет сети, потому что на raspi3 сеть через USB, и у QEMU пока нет модели контроллера USB для этой платы. Добавление опций virtio не сработает, потому что raspi3 не имеет PCI и, следовательно, нет возможности подключить устройство pci virtio.

Ваш параметр командной строки с помощью virt выглядит в основном правильно (по крайней мере, достаточно, чтобы boot; вы, вероятно, хотите «if = none», а не «if = sd», и я не уверен, что сетевые параметры верны, но если эти части неверны, они приведут к ошибкам в гостевом ядре позже, а не в общем отсутствие выхода). Таким образом, ваша проблема, вероятно, в том, что в конфигурации ядра отсутствуют некоторые важные элементы.

Вы можете загрузить стандартное ядро ​​Debian на плате virt (инструкции здесь: https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm-virt-board/), так что один подход к вам Можно найти ошибку в конфигурации ядра, чтобы сравнить вашу конфигурацию с конфигурацией ядра Debian. Исходный код ядра defconfig также должен работать. Я считаю, что начинать с работающей конфигурации и сокращать ее быстрее, чем создавать ее из ничего, пытаясь найти все непонятные параметры, которые должны присутствовать.

...