per*_*ror 9 virtual-machine arm debian qemu
我试图建立一个完整的系统映像的ARM( armhf
,armel
甚至aarch64
基于可以用QEMU运行Debian的)。不幸的是,我在网上找到的所有示例都是通过传递内核(initrd
如果它需要一些模块的话)来启动映像的。
但是,我真的很qemu-system-amd64
想像使用 一样启动系统,只需提供磁盘映像和 CD-ROM 映像(以开始安装)。
我可以理解-machine
and没有默认值-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
...
Run Code Online (Sandbox Code Playgroud)
所以,我真的想知道这样的事情是否可能......如果是的话,如何?如果没有,为什么?
这是一个很好的问题,不久前我选择深入研究自己,仅对我来说它使用的是 MIPS/MIP64。
有几个问题使这具有挑战性。
在引导 Linux 主机时,内核需要了解它正在使用的硬件。对于某些架构(如 amd64),固件的发现由 BIOS 通过“高级配置和电源接口”(ACPI)处理。在其他情况下,这是由可扩展固件接口 ( EFI ) 或什至 ATAGS 作为非常古老的解决方案来处理的。在大多数现代嵌入式系统中,ATAGS 的使用已被称为“设备树 blob”(DTB)的机制所取代。一系列乐于助人的用户比我能更好地解释差异。
所有这些的目的是帮助向内核提示硬件配置,并且通常与引导加载程序协同工作。在您的情况下,在 ARM 小端 ( armel
)、ARM 硬浮点 ( armhf
) 和 ARM 64 位 ( aarch64
) 之间进行选择是一个关键的第一个决定,因为它会对编译包、内核等的选择产生影响,因为一切都需要符合模拟的“指令集架构”(ISA)。
我知道您想要简单的空白磁盘和 CD 映像,但这就是为什么没有这种形式的“安装程序”用于 Raspberry Pi* 等系统的最终原因。当您下载 Raspbian 映像时,它包含一组结构化的分区,其中包括引导加载程序 (das uBoot)、相应硬件的设备树 blob,以及一组可用的基本包,这些包可通过配置的包存储库使用。
这涉及到另一个有趣的琐事……当您“安装”Linux 时,您有没有研究过 ISO 映像在做什么?
让我以基于 Anaconda 的安装程序(Fedora、RHEL、CentOS 等)为例。
当您开始安装时,它会启动一个最小的实时系统,该系统会自动开始运行 python 实用程序Anaconda。然后 Anaconda 会提示用户回答一系列问题,用其域特定语言填充配置文件,然后创建一个 chroot 并在该 chroot 内执行一组包安装。
这……从某种意义上说,就像使用那个 Raspbian 镜像一样。
那么这是什么意思?
好吧,首先我会推荐一些答案,具体取决于您想如何进行?
如果模拟 RPi 就足够了,让我建议: 使用 QEMU 模拟 Raspberry Pi
如果您想模拟更像是基于“云”的系统,George Hawkins 维护了一个Gist,其中包含一些很好的说明。
如果你真的想从头开始,Debian 用户 Aurel32 多年来一直维护着一组准备启动的基本映像,并且在他们的博客上写了一篇关于类似过程的精彩文章。
归档时间: |
|
查看次数: |
8548 次 |
最近记录: |