尝试 运行 QEMU 下的 Raspberry-Pi 映像,但 VM 内存限制为 256MB

Trying to run Raspberry-Pi image under QEMU, but VM memory is limited to 256MB

我想在 QEMU 下的 Raspberry-Pi buster 映像上构建一个耗时的包 (mediapipe)。到目前为止,我已经加载了图像并 运行 (包括网络连接);但是,我只有 256MB 的存储空间,这不足以做很多事情——尤其是构建媒体管道。有人能解释一下为什么 QEMU 下的 Raspbian 图片 运行ning 似乎被限制为 256MB 吗?
我看过一些关于人 运行 512MB 甚至 1GB 的帖子,但他们似乎不是很成功。任何人都可以解释限制的原因和可能的修复方法吗?

这里的问题是很多人声称是运行“QEMU 中的raspberry pi 仿真”,而实际上他们只是运行 Raspbian 用户space 在内核之上用于不同的机器仿真。因此,如果您查看几个真正描述完全不同的仿真设置的不同教程,很容易感到困惑。寻找他们通过 QEMU 的机器类型。

“versatilepb”机器类型在很多教程中使用,尤其是较早的教程,因为它已经在 QEMU 中使用了很长时间,并且可以让它与 1176 CPU 一起工作使用的经典 Raspberry Pi 板。这台特定机器的最大内存大小为 256MB,因为它模拟的真实硬件有这个限制(这是由物理内存地址 space 的设计方式强加的)。此机器类型永远无法支持更多 RAM,因此如果您需要更多 RAM,则应忽略使用它的任何教程或设置。

更多最新版本的 QEMU 确实可以模拟实际的 raspberry pi 硬件;这些是 raspi0、raspi1ap、raspi2b、raspi3ap、raspi3b 机器类型。它们将具有与它们正在模拟的真实 raspi 硬件相同数量的 RAM(512MB 或 1GB)。这些主板模型的缺点是某些设备仿真缺少功能——因此较旧的 QEMU 通常无法正确引导较新的内核,有时您想要使用的设备不存在。此外,由于 raspi 板将其以太网设备挂在 USB 控制器上,因此在这些 QEMU 模型上获得以太网的唯一方法也是使用 USB 以太网设备,例如:

-device usb-net,netdev=eth0 -netdev user,id=eth0

这可能需要最新的 QEMU 版本才能获得可用的 USB 控制器。

我不知道 QEMU“virt”板上是否有 tutorials/recipes for 运行 Raspbian。如果有,这可能是最好的体验,因为 virt 板允许大量内存、PCI 设备、virtio 设备,并且维护得很好。