使用 QEMU 构建并运行 ARM 系统映像?

使用 QEMU 构建并运行 ARM 系统映像?

armhf我正在尝试为基于 Debian 的 ARM (armel甚至)设置一个aarch64可以与 QEMU 一起运行的完整系统映像。不幸的是,我在网上找到的所有示例都通过传递内核(initrd如果需要某些模块,则可能是)来启动映像。

但是,我真的很想像使用 那样启动系统qemu-system-amd64,只需提供磁盘映像和 CD-ROM 映像(开始安装)即可。

-machine我可以理解和没有默认值-cpu,但我在网上找不到任何关于如何执行以下操作的线索:

#> wget \
   http://cdimage.debian.org/.../armhf/iso-cd/debian-testing-armhf-netinst.iso
...
#> qemu-img create -f qcow2 debian-armhf.qcow 20G
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -cdrom debian-testing-amd64-netinst.iso \
                   -boot d
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -net nic -net user,hostfwd=tcp::2222-:22
...

所以,我真的想知道这样的事情是否可能......如果是的话,如何实现?如果没有,为什么?

答案1

这是一个很好的问题,我不久前选择深入研究自己,只是对我来说它使用的是 MIPS/MIP64。

有一些问题使这变得具有挑战性。

当启动 Linux 主机时,内核需要了解它正在使用的硬件。对于某些架构(如 amd64),固件的发现由 BIOS 通过“高级配置和电源接口”处理(ACPI)。在其他情况下,这是由可扩展固件接口处理的(电喷)或者甚至 ATAGS 作为一个非常古老的解决方案。在大多数现代嵌入式系统中,ATAGS 的使用已被称为“设备树 blob”的机制所取代(数字电视广播)。一系列有用的用户做得更好解释差异比我能。

所有这些的目的是帮助提示内核有关硬件的配置,并且通常与引导加载程序一起工作。在您的情况下,在 ARM 小端 ( armel)、ARM 硬浮点 ( armhf) 和 ARM 64 位 ( aarch64) 之间进行选择是一个关键的首要决定,因为它会对编译包、内核等的选择产生影响,因为一切都需要符合模拟的“指令集架构”(ISA)。

我知道您想要空白磁盘和 CD 映像的简单性,但这就是为什么 Raspberry Pi* 等系统没有这种形式的“安装程序”的根本原因。当您下载 Raspbian 映像时,它包含一组结构化分区,其中包括引导加载程序 (das uBoot)、相应硬件的设备树 blob 以及配置包存储库时可用的一组基本包。

这涉及到另一个有趣的琐事……您是否曾经研究过当您“安装”Linux 时 ISO 映像在做什么?

让我使用基于 Anaconda 的安装程序(Fedora、RHEL、CentOS 等)作为示例。

当您开始安装时,它会启动一个最小的实时系统,该系统会自动开始运行 python 实用程序蟒蛇。然后,Anaconda 提示用户回答一系列问题,用其域特定语言填充配置文件,然后创建 chroot 并在该 chroot 内执行一组包安装。

这......在某种程度上,就像使用 Raspbian 图像一样。

那么这是什么意思?

好吧,首先我会推荐一些答案,具体取决于您想如何继续?

如果模拟 RPi 就足够了,我建议: 使用 QEMU 模拟 Raspberry Pi

如果您想模拟更像基于“云”的系统,George Hawkins 维护了一个要点以及一些很棒的说明

如果您真的想从头开始,Debian 用户 Aurel32 多年来一直维护着一套基础镜像准备启动他们的博客上有一篇关于类似过程的精彩文章

相关内容