我使用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机?
先谢谢你
你的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'也应该可以用。我发现,从一个能用的配置开始,然后把它删掉,比从无到有地建立一个配置要快得多,因为要找到所有需要存在的晦涩的选项。