支持网络和病毒的树莓3的QEMU内核。

问题描述 投票:0回答:1

我使用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: 我参考了一些论坛,用 "virt "机器代替raspi3来模拟virtio-network。

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又能用virt机?

先谢谢你

linux-kernel kernel raspberry-pi3 virtualization qemu
1个回答
0
投票

你的raspi3命令行没有联网,因为在raspi3上联网是通过USB,而QEMU还没有该板的USB控制器模型。添加virtio相关的选项也不行,因为raspi3没有PCI,所以没有办法插入一个pci virtio设备。

你的命令行选项与virt看起来基本是正确的(至少足以让你开机;你可能想要 "if=none "而不是 "if=sd",我不确定网络选项是否完全正确,但如果这些部分是错误的,它们会导致以后客人内核出错而不是完全没有输出)。所以你的问题很可能是内核配置缺少了一些重要的项目。

你可以在virt板上启动一个普通的Debian内核(说明在这里。https:/translatedcode.wordpress.com20170724installing-debian-on-qemus-64-bit-arm-virt-board。)所以你可以用一个方法来查找你的内核配置中的错误,那就是将你的配置和Debian内核的配置进行比较。上游的内核源码'defconfig'也应该可以用。我发现,从一个能用的配置开始,然后把它删掉,比从无到有地建立一个配置要快得多,因为要找到所有需要存在的晦涩的选项。

© www.soinside.com 2019 - 2024. All rights reserved.