QEMU-aarch64中模拟ARM64环境virt开发板中安装debian |
发表者:admin分类:云计算容器2020-12-23 11:35:25 阅读[764] |
在 QEMU 的 64 位 ARM"virt"板上安装 Debian
这篇文章是 描述了如何让 Debian 运行 Qemu 模仿一个 32 位 ARM "virt" 板。
为什么是"virt"板?
对于 64 位 ARM QEMU 模拟更少的板,因此"virt"几乎是唯一的选择,除非您特别知道要模拟 64 位 Xilinx 板之一。
"virt" 支持 PCI、virtio、最近的 ARM CPU 和大量 RAM。它唯一没有开箱即用的东西是图形。
先决条件和假设
我假设你有一个 Linux 主机, 和最新版本的 Qemu (至少 Qemu 2.8) 。我还使用libguestfs从 QEMU 磁盘映像中提取文件,但如果您愿意,您可以使用其他工具执行该步骤。
我要记录如何设置直接启动内核的来宾。也应该有QEMU启动一个UEFI映像,然后从磁盘映像启动内核,但这不是我自己研究过的事情。(网络上其他地方可能有教程。
获取安装程序文件
我建议为这些和我们要创建的其他文件创建一个子目录。
wget -O installer-linux http://http.us.debian.org/debian/dists/stretch/main/installer-arm64/current/images/netboot/debian-installer/arm64/linux
wget -O installer-initrd.gz http://http.us.debian.org/debian/dists/stretch/main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz
installer-linux
installer-initrd.gz
(如果我们在真正的硬件上安装,我们还需要一个"设备树"文件来告诉内核它运行的确切硬件的详细信息。QEMU 的"virt"板在内部自动创建一个设备树,并传递到内核,因此我们不需要提供一个设备树。
安装
首先,我们需要创建一个空磁盘驱动器安装。我选了一个 5gb 的磁盘, 但你可以使它更大, 如果你喜欢。
1 | qemu-img create -f qcow2 hda.qcow2 5G |
现在,我们可以运行安装程序:
1 2 3 4 5 6 7 8 | qemu-system-aarch64 -M virt -m 1024 -cpu cortex-a53 \ -kernel installer-linux \ -initrd installer-initrd.gz \ -drive if=none,file=hda.qcow2,format=qcow2,id=hd \ -device virtio-blk-pci,drive=hd \ -netdev user,id=mynet \ -device virtio-net-pci,netdev=mynet \ -nographic -no-reboot |
安装程序将在文本控制台上(通过模拟串行端口)显示其消息。按照其说明将 Debian 安装到虚拟磁盘;很简单, 但如果您有任何困难, Debian 安装指南可能会有帮助。
实际安装过程需要几个小时,因为它下载包通过网络,并将它们写入磁盘。偶尔会停下来问你问题。
在此过程后期,安装程序将打印以下警告对话框:
1 2 3 4 5 6 7 8 9 10 11 12 | +-----------------| [!] Continue without boot loader |------------------+ | | | No boot loader installed | | No boot loader has been installed, either because you chose not to or | | because your specific architecture doesn't support a boot loader yet. | | | | You will need to boot manually with the /vmlinuz kernel on partition | | /dev/vda1 and root=/dev/vda2 passed as a kernel argument. | | | | <Continue> | | | +-----------------------------------------------------------------------+ |
按现在继续,我们稍后再解决。
最终,安装程序将重新启动完成 - 这应该会导致 QEMU 退出(因为我们使用了选项)。-no-reboot
此时,您可能希望复制硬盘映像文件,以保存以后重复安装的乏味。
提取内核
安装程序警告我们,它不知道如何安排自动启动正确的内核,所以我们需要手动完成。对于 QEMU,这意味着我们需要提取安装程序放入磁盘映像中的内核,以便我们可以将其传递给命令行上的 QEMU。
有多种工具,你可以为此使用,但我要推荐libguestfs,因为它是最简单的使用。要检查其工作原理,让我们看看虚拟磁盘映像中的分区:
1 2 3 | $ virt-filesystems -a hda.qcow2 /dev/sda1 /dev/sda2 |
如果这不起作用,那么你应该先解决这个问题。我见过几个常见原因:
- 如果你在 Ubuntu 上, 那么你的内核被安装为不可读;你可以解决这个问题
/boot
sudo chmod 644 /boot/vmlinuz*
- 如果您在同一主机上运行 Virtualbox,它将干扰 libguestfs 运行 KvM 的尝试;您可以通过退出虚拟框来解决这个问题
查看磁盘中有什么,我们可以看到内核和 in/boot 中的 initrd:
1 2 3 4 5 6 7 8 9 10 | $ virt-ls -a hda.qcow2 /boot/ System.map-4.9.0-3-arm64 config-4.9.0-3-arm64 initrd.img initrd.img-4.9.0-3-arm64 initrd.img.old lost+found vmlinuz vmlinuz-4.9.0-3-arm64 vmlinuz.old |
我们可以将它们复制到主机文件系统:
1 | virt-copy-out -a hda.qcow2 /boot/vmlinuz-4.9.0-3-arm64 /boot/initrd.img-4.9.0-3-arm64 . |
(我们想要更长的文件名,因为 和 只是符号链接和 virt 复制出来不会复制它们。vmlinuz
initrd.img
有关 libguestfs 或从主机系统访问磁盘映像的任何其他工具的重要警告:在 QEMU 运行时不要试图使用它们,否则当 QEMU 和 libguestfs 中的来宾 OS 尝试更新同一映像时,您将遇到磁盘损坏。
如果随后升级来宾中的内核,则需要重复此步骤来提取新内核和 initrd,然后适当更新 QEMU 命令行。
运行
要运行已安装的系统,我们需要一个不同的命令行来启动已安装的内核和 initrd,然后传递内核命令行参数,安装程序告诉我们我们需要:
1 2 3 4 5 6 7 8 9 | qemu-system-aarch64 -M virt -m 1024 -cpu cortex-a53 \ -kernel vmlinuz-4.9.0-3-arm64 \ -initrd initrd.img-4.9.0-3-arm64 \ -append 'root=/dev/vda2' \ -drive if=none,file=hda.qcow2,format=qcow2,id=hd \ -device virtio-blk-pci,drive=hd \ -netdev user,id=mynet \ -device virtio-net-pci,netdev=mynet \ -nographic |
这应该引导到登录提示,您可以在其中使用安装过程中设置的用户和密码登录。
安装具有 SSH 客户端,因此获取文件的一个简单方法就是使用 VM 内部的"scp"与它外部的 SSH 服务器通信。或者,您可以使用 libguestfs 将文件直接写入磁盘映像(例如使用 virt 复制),但请确保仅在 VM 未运行时使用 libguestfs,否则将会使磁盘损坏。
转载请标明出处【QEMU-aarch64中模拟ARM64环境virt开发板中安装debian】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论