参考

Ubuntu installation on a RISC-V virtual machine using a server install image and QEMU

用到的文件

fw_jump.bin

u-boot.bin

ubuntu-22.04.3-preinstalled-server-riscv64+unmatched.img

1 镜像准备

ubuntu.com

1.1 镜像选择

如上在下载 Ubuntu Server 时,可能会遇到以下两种安装选项:

  1. Ubuntu Server preinstalled image:
  • 这是一个预安装的系统映像。意味着它已经包含了一个基本的 Ubuntu Server 系统,你可以直接将其写入到目标设备(例如 SD 卡、USB 驱动器或硬盘)并立即启动。

  • 这种类型的映像通常用于嵌入式设备或特定的硬件平台,如 Raspberry Pi 或其他 ARM 设备。

  • 使用预安装映像,你可以迅速地部署 Ubuntu Server,无需经过传统的安装过程。

  1. Ubuntu Server live installer:
  • 这是一个“实时”安装程序。当你启动这个映像时,你会进入一个实时的 Ubuntu 环境,其中包含一个安装程序。你可以使用这个安装程序来安装 Ubuntu Server 到目标设备。

  • 这种类型的安装程序允许你在安装前测试硬件的兼容性、网络连接等,并提供更多的自定义选项。

  • 一旦你决定安装,你可以启动安装程序,选择安装选项,然后等待安装完成。

  • 安装后移除安装介质,操作系统已经已经被安装到指定的硬盘中。

总结:

  • 如果你想要快速部署一个 Ubuntu Server 系统,而不需要进行详细的配置或安装,那么选择 preinstalled image 可能是一个好选择。

  • 如果你想要更多的自定义选项,或者你想在安装前测试系统,那么选择 live installer 会更合适。

参考中文章是使用 Ubuntu Server live installer 的安装流程,本文是使用 Ubuntu Server preinstalled image的安装流程。如果想使用参考文章中的安装流程,在阅读完本文后也会有帮助

1.2 解压镜像

unxz [下载的.img.xz文件路径]

2 创建虚拟磁盘

使用 dd 命令创建磁盘映像时,如:

dd if=/dev/zero of=riscv_disk.img bs=1M count=10240

这里是各个选项的含义:

  1. dd: 这是数据复制的命令名,它可以用于低级别的数据复制

  2. if=/dev/zero: 这是输入文件(Input File)的路径。

  • /dev/zero 是一个特殊的设备文件,它提供了无限的零(null bytes)。当你从这个文件读取时,你会得到连续的零。
  1. of=riscv_disk.img: 这是输出文件(Output File)的路径。
  • riscv_disk.img 是你要创建的文件的名称。这将是你的虚拟磁盘映像。
  1. bs=1M: 这是块大小(Block Size)。
  • 这里,1M 表示每个块的大小是 1 兆字节。dd 会按照这个大小来读取和写入数据。
  1. count=10240: 这是要复制的块的数量。
  • 10240 块,每块 1M,所以总大小是 10GB。

总的来说,这个命令从 /dev/zero 读取了 10GB 的零,并将它们写入 riscv_disk.img 文件,从而创建了一个 10GB 的空磁盘映像。

3 将预安装镜像写入虚拟磁盘

dd if=[你的预安装映像路径] of=riscv_disk.img

4 启动qemu

之前有在x86的ubuntu上通过QEMU运行运行RISC-V版本的QEMU

在参考的文章中 (先不要着急操作,请看完)

sudo apt-get install qemu-system-misc opensbi u-boot-qemu
  • qemu-system-misc QEMU 用于模拟虚拟 RISC-V 芯片以及CLINT,PLIC等设备

  • OpenSBI提供以机器模式运行的SBI运行环境

  • U-Boot 是实现 UEFI API 并加载 GRUB 的固件

这是参考文章中启动的参数 (别执行)

qemu-system-riscv64 \
-machine virt -m 4G -smp cpus=2 -nographic \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.bin \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin \
-netdev user,id=net0 \
-device virtio-net-device,netdev=net0 \
-drive file=jammy-live-server-riscv64.img,format=raw,if=virtio \
-drive file=disk,format=raw,if=virtio \
-device virtio-rng-pci

分别通过 -bioskernel 参数指定了两个二进制文件,参数指定的目录下发现还有 fw_jump.elfu-boot.elf 文件。按照经验,通常 .bin 文件是由 objcopy 命令从 .elf 文件中拷贝出的 .text .data .rodata 段组成。

一个典型的使用 objcopy 从 ELF 文件生成 .bin 文件的命令如下:

objcopy -O binary input.elf output.bin

其中,-O binary 指定了输出的目标文件格式为二进制格式。.bin 文件包含了 ELF 文件中所有应当被加载到内存的段的内容,而不包含其他的调试或链接信息。

所以只要有这两个二进制文件,就可以省略安装 opensbiuboot。正好我在mac上无法直接安装需要源码编译,我可以将之前x86 ubuntu 环境中的这两个文件复制过来。如果使用linux,可以像参考文章那样使用通过apt 安装 opensbi 和 uboot获得这两个文件。

我在mac上运行以下命令就可顺利在QEMU中启动ubuntu

qemu-system-riscv64 \
-M virt \
-m 2048M \
-smp 4 \
-bios ./fw_jump.bin \
-kernel ./u-boot.bin \
-drive file=./riscv_disk.img,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-net-device,netdev=net0 \
-nographic \
-device virtio-rng-pci

这条命令是用来启动一个 RISC-V 64 位虚拟机的,使用的模拟器是 QEMU。下面是对每一个参数的详细解释:

  1. qemu-system-riscv64: 这是 QEMU 的命令,用于启动一个 RISC-V 64 位的虚拟机。

  2. -M virt: 选择 QEMU 虚拟机的类型。在这里,选择的是 virt,它是 QEMU 支持的 RISC-V 的通用虚拟机型号。

  3. -m 2048M: 设置虚拟机的内存大小。在这里,设置的是 2048M,即 2GB。

  4. -smp 4: 设置虚拟机的 CPU 核心数。在这里,设置的是 4 核心。

  5. -bios ./fw_jump.bin: 指定 BIOS 文件。在这里,用的是 fw_jump.bin 这个文件。

  6. -kernel ./u-boot.bin: 指定内核映像文件。这里用的是 U-Boot,一个常用的开源引导加载器。

  7. -drive file=./riscv_disk.img,format=raw,id=hd0: 定义一个驱动器。

  • file=./riscv_disk.img: 指定磁盘映像文件。

  • format=raw: 指定磁盘映像的格式,这里是 raw 格式。

  • id=hd0: 给这个驱动器一个标识符。

  1. -device virtio-blk-device,drive=hd0: 添加一个设备,并关联前面定义的驱动器。
  • virtio-blk-device: 这是一个块设备。

  • drive=hd0: 指定与此设备关联的驱动器。

  1. -netdev user,id=net0,hostfwd=tcp::2222-:22: 定义一个网络设备。
  • user: 使用用户模式网络堆栈。

  • id=net0: 给这个网络设备一个标识符。

  • hostfwd=tcp::2222-:22: 设置端口转发,将宿主机的 2222 端口转发到虚拟机的 22 端口。

  1. -device virtio-net-device,netdev=net0: 添加一个网络设备,并关联前面定义的网络设备。
  • virtio-net-device: 这是一个网络设备。

  • netdev=net0: 指定与此设备关联的网络设备。

  1. -nographic: 不使用图形界面,仅使用命令行界面。

  2. -device virtio-rng-pci: 添加一个设备,这是一个随机数生成器。

简而言之,这个命令是用来启动一个带有 2GB RAM、4 个 CPU 核心和一块磁盘的 RISC-V 64 位虚拟机的。虚拟机使用 U-Boot 启动,并设置了网络端口转发。

5 登录和使用

  • 由于这是一个预安装的映像,Ubuntu Server 应该已经安装并配置好了。在 QEMU 启动后,你应该可以看到登录提示。

  • 使用默认的用户名和密码登录(通常为 ubuntu/ubuntu,但最好查看下载页面或相关文档以确认)。

  • 在首次登录后,你会被要求更改密码。

使用SSH 登录

在启动QEMU事设置hostfwd=tcp::2222-:22,通过端口转发,将宿主机的 2222 端口转发到虚拟机的 22 端口。

ssh ubuntu@localhost -p 2222

6 关闭

  1. 方式一:正常关机
sudo shutdown -h now
  1. 方式一:相当于直接按下主机关机键

当你想要关闭 QEMU 时,可以在 QEMU 的窗口(非SSH链接)中按 Ctrl+A,然后 X

使用qemu运行risc-v ubuntu的更多相关文章

  1. 使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

    开发环境 PC:ubuntu18.04 Qemu:4.1 Kernel:Linux-5.2 概述 由于要学习ARM的SVE技术,但是目前还没有支持SVE指令的板子,所以只能用Qemu来模拟,但是发现Q ...

  2. 用Qemu运行/调试arm linux【转】

    转自:https://blog.csdn.net/absurd/article/details/78984244 用Qemu运行/调试arm linux,这事情干过好几次了,久了就忘记了,每次都要重新 ...

  3. 使用Qemu运行Ubuntu文件系统(1)

    参考 https://blog.csdn.net/mountzf/article/details/51707853 https://blog.csdn.net/stephen_lu_fahai/art ...

  4. Qemu/Limbo/KVM镜像 Ubuntu 22.04 精简版,可运行Windows软件,内存占用不到200M

    镜像特征: Ubuntu 22.04系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅200M不到. 自制UI,Windows3.1风格. 完全开源 镜像说明: 用户名为 ...

  5. QEMU 运行uboot,动态加载内核与文件系统

    背景 上一讲我们完成了 编译 QEMU 以及简单地做了仿真.这一讲在 启动uboot 的基础上进行,以加强对于 运行地址,加载地址等理解. 有关资料: uboot 与 代码重定位 有这样的约定,ubo ...

  6. 编译aarch64 Linux内核并基于qemu运行

    核心流程 首先,本文主要讲述如何编译Linux内核并在qemu虚拟机上运行.这里针对的架构是aarch64. 本文的实验平台是Ubuntu 16.04. 为了达成目标,我们需要有qemu.buildr ...

  7. ASP.Net Core 运行在Linux(Ubuntu)

    这段时间一直在研究asp.net core部署到linux,今天终于成功了,这里分享一下我的部署过程. Linux Disibutaion:Ubuntu 14.04 Web Server:nginx. ...

  8. QEMU MIPIS远程共享ubuntu主机的文件

    尝试啦很多中办法,最终选择以在QEMU模拟器中ssh 远程登入的方式访问主机,并用sshfs 挂载 主机端的文件到模拟器中,实现模拟器访问主机端的代码. SSH分客户端openssh-client和o ...

  9. 编译x86_64 Linux内核并基于QEMU运行

    编译并运行内核镜像 安装包准备 $ sudo apt install git $ sudo apt install build-essential kernel-package fakeroot li ...

  10. win7 +v Ubuntu 16.04 grub rescue 模式下修复 grub

    前几天整理了下电脑的分区,合并并删除一些分区,结果导致 grub 被破坏了,Ubuntu进不去了,启动后直接进入了 rescure 模式.后来又折腾了下,终于修复好了,现总结一下. 先说一下我的系统环 ...

随机推荐

  1. Java freemarker 模板生成word动态表格

    1.新建一个word文档 2.把调整完的word另存为xml格式: 3.使用文本编辑器打开 4.xml格式化XML 在线格式化 | 菜鸟工具菜鸟工具-XML 在线格式化..https://c.runo ...

  2. AndroidStudio配置 | 菜鸟教程

    https://www.runoob.com/android/android-studio-install.html

  3. sqoop安装配置以及简单使用

    一.下载 链接:https://pan.baidu.com/s/1pc7t4e7GyDcZNJHURADE_w 提取码:420s 二.上传安装包到虚拟机的指定路径并解压 tar -zxvf ( 压缩包 ...

  4. #双指针#洛谷 7405 [JOI 2021 Final] 雪玉

    题目传送门 分析 无论怎样刮风,雪球的相对位置不会改变, 实际上每一个空段都由左右两个雪球瓜分(边界空段除外), 那么按照空段长度从小到大排序,用双指针找到恰好第一个未瓜分的位置 代码 #includ ...

  5. #模拟#洛谷 2327 [SCOI2005]扫雷

    题目 分析 考虑最多只有两种情况,因为确定一个位置其它位置随即也能确定, 那么指定第一个位置有没有雷然后判断一下后面推出的雷数是否为0或1,不是显然不行 代码 #include <cstdio& ...

  6. #树状数组,并查集#CF920F SUM and REPLACE

    题目 分析 由于\(a_i=1或2\)时\(d(a_i)=a_i\),且其余情况修改后答案只会越来越小, 考虑用树状数组维护区间和,用并查集跳过\(a_i=1或2\)的情况 代码 #include & ...

  7. OpenHarmony——内核对象队列之算法详解(下)

    前言 OpenAtom OpenHarmony(以下简称"OpenHarmony") LiteOS-M 内核是面向 IoT 领域构建的轻量级物联网操作系统内核,具有小体积.低功耗. ...

  8. 深入了解 Spring Boot 核心特性、注解和 Bean 作用域

    Spring Boot 是什么? Spring Boot 是基于 Spring Framework 构建应用程序的框架,Spring Framework 是一个广泛使用的用于构建基于 Java 的企业 ...

  9. 帕鲁重大更新!macOS 竟然也能玩了

    近日,<幻兽帕鲁>迎来了 v0.2.1.0 大版本的更新. 本次更新的最大亮点是新实装的突袭头目系统.玩家可以在 "召唤祭坛" 献祭石板,从而召唤强大的突袭头目.其中, ...

  10. 【鸿蒙千帆起】高德地图携手HarmonyOS NEXT,开启智能出行新篇章

    2024年1月18日下午,华为举办了鸿蒙生态千帆启航仪式,对外宣布HarmonyOS NEXT星河预览版现已开放申请,同时,首批200+鸿蒙原生应用加速开发,鸿蒙生态设备数量更是突破了8亿大关.这些进 ...