如何使用QEMU模拟Raspberry Pi 3上的Ubuntu Core?

5

我尝试使用QEMU模拟运行树莓派3上的Ubuntu Core,但是没有成功。

我找到了一些关于使用QEMU来模拟运行Raspbian的教程,并尝试将它们应用到Ubuntu Core上:

我没有找到正确的内核,所以我使用了Raspbian Kernel。但是它并没有起作用。之后我挂载了Ubuntu Core镜像并提取了kernel.img,还是没有成功。

我使用以下命令启动qemu:

qemu-system-arm -kernel ./kernel.img \
-cpu arm1176 \
-m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" \
-drive "file=pi3.img,index=0,media=disk,format=raw" \
-redir tcp:2222::22 

QEMU启动但无法加载Ubuntu Core。

有人使用QEMU模拟过适用于Raspberry Pi 3的Ubuntu Core吗?


你好, 我很确定现在无法在QEMU上模拟Raspberry Pi 3的Ubuntu Core。但是,你可以选择模拟Raspberry Pi 2的Ubuntu Core。我能够使用以下命令在QEMU上模拟Raspi 2的Ubuntu Core:qemu-system-arm -M raspi2 -serial stdio -kernel kernel.img -initrd initrd.img -append "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty0 elevator=deadline snap_core=core_3750.snap snap_kernel=pi2-kernel_22.snap" -dtb bcm2709-rpi-2-b.dtb -sd ubuntu-core.qcow - Rustam Isaev
相关内容:https://dev59.com/QFkT5IYBdhLWcg3wRNet - Ciro Santilli OurBigBook.com
相关主题是关于在QEMU上运行Raspbian操作系统。Ubuntu Core似乎更加复杂。 - Rustam Isaev
毫不否认,这并不是一个重复的问题。我只想建议你先尝试让它正常工作(到目前为止,我还没有在原始内核上成功地让显示器工作)。 - Ciro Santilli OurBigBook.com
2个回答

1
这段文字中,“-M versatilepb”表示“请模拟一个VersatilePB开发板”,那是一个几十年前的ARM评估板。“-cpu arm1176”请求一个"arm1176" CPU,这是树莓派1中的ARMv6 CPU。大多数针对树莓派2或树莓派3的用户空间代码将无法在其上运行(它们使用更新的ARMv7 CPU)。基本上,您正在尝试使用教程中用于在VersatilePB模型上运行VersatilePB内核的命令行,以便运行树莓派1用户空间映像和文件系统。对于树莓派2或树莓派3用户空间代码,它将不起作用。(当前的QEMU已经有了一个raspi3模型;我怀疑它还不足以启动Ubuntu映像。)

您需要使用专门为“virt”板构建的内核。 - Peter Maydell
你的意思是我不能在virt板上使用标准的armhf内核吗?在这份指南中,作者只是使用了他想要模拟的镜像中的内核。 - Rustam Isaev
Ubuntu通用lpae内核是为了与各种板子(包括virt,因此名称中有“通用”一词)兼容而构建的,所以它们是可以使用的。总的原则是,您不能使用任意随机的内核并期望它能够工作,特别是如果该内核是为特定不同的板子构建的。 - Peter Maydell
输出必须来自客户机内核;您应该按照其建议,在客户机内核命令行中添加适当的snap_core条目(即QEMU命令行上的-append“…”字符串)。希望有关如何引导Ubuntu Core映像的文档将告诉您应该使用哪个命令行选项。 - Peter Maydell
你确定树莓派2没有网络支持吗?如果没有网络,Ubuntu Core就毫无用处了,因为只能通过ssh访问它。 - Rustam Isaev
显示剩余9条评论

0

以下是我在Qemu中运行Raspberry Pi的Ubuntu所执行的步骤:

第一步:从镜像文件中复制文件

挂载镜像文件:

sudo losetup -f --show -P "ubuntu-20.04.3-preinstalled-server-arm64+raspi.img"
sudo mount /dev/loopXp1 /mnt/raspberry-pi-boot

将所有树莓派启动文件复制到本地文件夹

卸载镜像:

sudo umount /mnt/raspberry-pi-boot
sudo losetup -d /dev/loopX

第二步,调整SD卡镜像大小

qemu-img resize ubuntu-20.04.3-preinstalled-server-arm64+raspi.img 8G

步骤三,运行qemu

qemu-system-aarch64.exe \
-M raspi3b \
-append "rw earlyprintk root=/dev/mmcblk0p2 rootdelay=1 dwc_otg.lpm_enable=0 rootfstype=ext4 loglevel=8 console=ttyAMA0,115200" \
-dtb ubuntu_arm64/bcm2710-rpi-3-b.dtb \
-kernel ubuntu_arm64/vmlinuz \
-sd "ubuntu-20.04.3-preinstalled-server-arm64+raspi.img" \
-smp 4 \
-m 1G \
-no-reboot \
-serial stdio \
-device usb-net,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

上述命令中的注意事项:

  • 我们选择了一个相当随机的设备树文件,因为有很多文件,希望能选到对的
  • 我们选择vmlinuz作为内核,希望它是我们需要的文件
  • 使用USB网络设备
  • 将主机上的5555端口转发到模拟的Ubuntu的22端口

在调整大小的步骤中,看起来你可能混淆了不同的图像? - Mark
是的,同意了,已经修复为所有使用相同的img文件。我也在Debian上进行了测试。 - Windel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接