65.9K
CodeProject 正在变化。 阅读更多。
Home

在 QEMU 中运行 Debian RISC-V:汇编开发虚拟环境

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2024年5月28日

CPOL

3分钟阅读

viewsIcon

3648

经过大量研究,我发现了一个在 QEMU 中运行 RISC-V Linux 镜像的最简单方法。

引言

我还在我的博客上发布了一篇类似的文章,链接如下: 

在 QEMU 中运行 Debian RISC-V:汇编开发虚拟机环境[^]

背景

我最近偶然发现一本我正在阅读的新书

RISC-V 汇编语言编程:解锁 RISC-V 指令集的强大功能[^]

这是一本学习在 RISC-V 机器上运行汇编语言的绝佳书籍:RISC-V ISA(指令集架构)。

这本书解释了如何在 QEMU 模拟器中运行基于 RISC-V 的 Ubuntu 版本。

经过大量研究,我发现了一个在 QEMU 中运行 RISC-V Linux 镜像的最简单方法。这个方法将运行 Debian,而且比 Ubuntu 的版本小得多,因此可以减少您在主 Linux 系统(运行 QEMU 的地方)上使用的内存。

简单步骤

以下是简单步骤

预备步骤

在您的系统上安装 QEMU。请按照官方 QEMU 网站上的说明进行操作。^


1) 前往 Debian 快速镜像生成器预制镜像[^] — 其中包含所有最新的 QEMU 虚拟化构建镜像(包括 RISC-V 版本。

2) 到达后,查找标记为“Images for riscv64-virt”的链接 — 点击该链接(Images for riscv64-virt[^])将立即开始下载一个(zip)文件,该文件的名称非常奇怪,类似于哈希值(当前名称为 2baed3d2ab30e7a4ff39c7e587c8b16dce3885afb2dc047dae555a8bc13e)。

3) 下载完成后,您可以将内容解压到自己的文件夹中,以保持一切井井有条。

该文件的内容是

  • image.qcow2 — 镜像文件
  • initrd – Linux 相关文件
  •  kernel – Linux 内核
  •  readme.txt – readme 文件提供了 QEMU 的命令行
  •  ssh_user_ecdsa_key — 我不知道的东西
  •  ssh_user_ed25519_key — 不知道
  •  ssh_user_rsa_key — 不知道。

readme 文件包含您可以使用 QEMU 命令来启动虚拟环境。

我们需要两个额外文件

我们实际上需要两个额外文件,即 RISC-V Linux 的 BIOS 和内核文件。

  1. fw_jump.elf
  2. uboot.elf

这些文件是开放服务器二进制接口(Open Source Supervisor Binary Interface)的一部分。

您可以访问以下链接了解更多信息: 

GitHub - riscv-software-src/opensbi: RISC-V 开放服务器二进制接口[^]

下载 uboot.elf 和 fw_jump.elf

您可以下载这两个文件并将它们放在本地计算机上的任何位置。

RISC-V-Assembly-Language-Programming/Chapter 1/QEMU at main · Apress/RISC-V-Assembly-Language-Programming · GitHub[^]

请确保在下载每个文件时选择 RAW 文件。如果您不使用 RAW 选项,GitHub 会将其下载为奇怪的文本文件。

下载到本地计算机

只需确保在运行下面的 QEMU 命令时引用它们(无论您将它们放在哪里)的完整路径。

您可以在下面的 QEMU 命令中看到这两个文件的引用。

注意:行延续字符(\)后面不能有任何空格。

我将命令分解成多行,以便您可以看到传递给 QEMU 可执行文件的每个参数?您知道每个 QEMU 平台(riscv64、x86_64 等)都有一个单独的 EXE 吗?

qemu-system-riscv64 -machine 'virt' \
-cpu 'rv64' \
-m 1G -device virtio-blk-device,drive=hd \
-drive file=image.qcow2,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-object rng-random,filename=/dev/urandom,id=rng \
-device virtio-rng-device,rng=rng \
-nographic \
-append “root=LABEL=rootfs console=ttyS0”

启动虚拟机后,使用以下凭据登录:
root(用户名)和 root(密码)

现在您可以安装 build_essential 包,以便编写和链接汇编代码。
您是 root 用户,因此不需要 sudo

$ apt install build-essential

安装后,您可以通过执行以下操作来检查汇编器 (as) 和链接器 (ld) 是否已安装,这将为您提供每个可执行文件的版本。

$ as --version

$ ld --version

完成后。

您可以打开 nano 编辑器,编写您的汇编代码,并完成书中剩余的示例(RISC-V 汇编语言编程:解锁 RISC-V 指令集的强大功能[^])。

关注点

如果您一直想模拟运行 QEMU(QEMU 官方网站/文档[^])的机器,这将是一个很好的起点。我不得不花费很多精力来完成这些,因为我以前从未自己运行过 QEMU。

如果您尝试此方法并在您的机器上成功运行 Debian,我认为您会感到惊喜。

我还在我的 Mac Pro M3 笔记本电脑上运行了这个。我很快也会写一篇关于那篇文章的。

历史

2024 年 5 月 28 日 - 首次发布

© . All rights reserved.