Windows、macOS、liunx下使用qemu搭建riscv64/linux

背景

在Windows、macOS和Linux环境下使用QEMU搭建RISC-V 64位Linux系统,网络上存在大量过时、不完整或错误的教程。且部分AI生成的内容“幻觉”现象严重,导致关键步骤错误且难以进行。为确保可靠性,本教程基于最新实测验证,涵盖三种操作系统环境,并以Casibase项目作为下游任务进行了搭建部署,如果读者需要在riscv64部署、运行golang + react + mysql服务,可以参考下篇文章。

所有必要工具及文件的下载链接均来自官方源,避免因第三方托管导致的版本混乱或安全风险。以下内容经过完整测试,确保从环境配置到系统启动的每一步均可复现。

关于Casibase

介绍:⚡️AI Cloud OS: Open-source enterprise-level AI knowledge base and MCP (model-context-protocol)/A2A (agent-to-agent) management platform with admin UI, user management and Single-Sign-On⚡️, supports ChatGPT, Claude, Llama, Ollama, HuggingFace, etc., chat bot demo: https://ai.casibase.com, admin UI demo: https://ai-admin.casibase.com

GitHub仓库:https://github.com/casibase/casibase

官网:casibase.org

目标

分别在Windows、macOS、liunx下使用qemu搭建基于Debian的riscv64/linux系统。

我们需要三个必要的软件:

  • QEMU
  • OpenSBI:一个开源项目:RISC-V Open Source Supervisor Binary Interface,SBI 是在 RISC-V 模式运行的硬件和操作系统之间的层,有点类似 BIOS。
  • U-Boot:一个开源的主引导加载程序,提供一系列用于引导操作系统内核的指令。

环境部署

一、Windows

       1. 从官网下载QEMU

 Download QEMU - QEMU 该下载链接简短清晰,阅读后直接下载即可。

        2. 下载 OpenSBI 和 U-Boot

        无需源码构建(复杂),直接从 De­bian Archive 中下载预编译的版本即可。

  • OpenSBI:Debian -- Details of package opensbi in sid
  • U-Boot:Debian -- Details of package u-boot-qemu in sid

        下载会得到两个 .deb 软件包。这是Debian系统的软件包文件,我们仅需要内部的fw_jump.elf和uboot.elf文件。所以,只需要解压出这个.deb文件即可。

        Windows下可以使用第三方解压软件,如7-Zip等。解压后,继续解压data.tar.xz文件,形成usr目录。之后按路径:basePath\usr\lib\riscv64-linux-gnu\opensbi\generic\fw_jump.elf和basePath\usr\lib\u-boot\qemu-riscv64_smode\uboot.elf拿到对应要的文件(可以迁移到任何位置,并不依赖当前包下其他文件起作用)。

     3. 下载riscv64 QCOW2 虚拟磁盘。 

        不需要自己去构建,直接使用Debian Quick Image Baker pre-baked images预编译镜像:Debian Quick Image Baker pre-baked images 下载 Release architectures---->Images for riscv64-virt项。下载后是一个无后缀的文件,将其重命名为zip后缀,然后解压。得到关键文件:image.qcow2

至此,结束前期准备,可以启动qemu riscv64了。请翻阅文末。

二、Linux

        前言:qemu可从官网下载,OpenSBI、 U-Boot、QCOW2并不吃操作系统差异,所以即使按照window的配置流程进行也完全没问题,只不过命令有差异而已。但是如Linux/macOS这类操作系统的包管理命令(apt、yum)可以很方便帮我们完成上述工作(缺点:包比较老旧,但是实测可用,未发生不兼容情况)。所以下文以Debian/ubuntu为例进行:

        0. 安装依赖包:

sudo apt-get install build-essential pkg-config libboost-all-dev autoconf libtool libssl-dev flex bison ninja-build libglib2.0-dev    libpixman-1-dev libslirp-dev libncurses5-dev libncursesw5-dev 

       1. 下载QEMU

Arch: pacman -S qemuDebian/Ubuntu:
For full system emulation: apt-get install qemu-system
For emulating Linux binaries: apt-get install qemu-user-static
Fedora: dnf install @virtualizationGentoo: emerge --ask app-emulation/qemuRHEL/CentOS: yum install qemu-kvmSUSE: zypper install qemu

        验证:qemu-system-riscv64 --version

        2. 下载 OpenSBI 和 U-Boot

sudo apt update
sudo apt install qemu-system-misc opensbi u-boot-qemu

     3. 下载riscv64 QCOW2 虚拟磁盘。 

        不需要自己去构建,直接使用Debian Quick Image Baker pre-baked images预编译镜像:Debian Quick Image Baker pre-baked images 下载 Release architectures---->Images for riscv64-virt项。下载后是一个无后缀的文件,将其重命名为zip后缀,然后解压。得到关键文件:image.qcow2:

# 下载镜像
wget -O dqib_riscv64-virt.zip "https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt"# 重命名并解压
unzip dqib_riscv64-virt.zip# 显示文件列表
ls -la

至此,结束前期准备,可以启动qemu riscv64了。请翻阅文末。

三、MacOS

        前言:qemu可从官网下载,OpenSBI、 U-Boot、QCOW2并不吃操作系统差异,所以即使按照window的配置流程进行也完全没问题,只不过命令有差异而已。但是如Linux/macOS这类操作系统的包管理命令(apt、yum、brew)可以很方便帮我们完成上述工作(缺点:包比较老旧,但是实测可用,未发生不兼容情况)。所以下文以Debian/ubuntu为例进行:

       1. 下载QEMU

brew install qemu

        验证:qemu-system-riscv64 --version

        2. 下载 OpenSBI 和 U-Boot

 无需源码构建(复杂),直接从 De­bian Archive 中下载预编译的版本即可。

  • OpenSBI:Debian -- Details of package opensbi in sid
  • U-Boot:Debian -- Details of package u-boot-qemu in sid

        下载会得到两个 .deb 软件包。这是Debian系统的软件包文件,我们仅需要内部的fw_jump.elf和uboot.elf文件。所以,只需要解压出这个.deb文件即可。

        MacOS下可以使用“ar -x 文件名”进行解压。解压后,继续解压data.tar.xz文件,形成usr目录。之后按路径:basePath\usr\lib\riscv64-linux-gnu\opensbi\generic\fw_jump.elf和basePath\usr\lib\u-boot\qemu-riscv64_smode\uboot.elf拿到对应要的文件(可以迁移到任何位置,并不依赖当前包下其他文件起作用)。

        3. 下载riscv64 QCOW2 虚拟磁盘。 

        不需要自己去构建,直接使用Debian Quick Image Baker pre-baked images预编译镜像:Debian Quick Image Baker pre-baked images 下载 Release architectures---->Images for riscv64-virt项。下载后是一个无后缀的文件,将其重命名为zip后缀,然后解压。得到关键文件:image.qcow2:

# 下载镜像
wget -O dqib_riscv64-virt.zip "https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt"# 重命名并解压
unzip dqib_riscv64-virt.zip# 显示文件列表
ls -la

至此,结束前期准备,可以启动qemu riscv64了。请翻阅文末。

四、启动

建议把前期的四个工具的文件都整到一起,便于管理(qemu、OpenSBI、 U-Boot、QCOW2)

qemu riscv64/linux启动命令:

qemu-system-riscv64 -machine virt -m 8G -smp 8 -cpu rv64 \
-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,hostfwd=tcp::14000-:14000 \
-bios ~/riscv-linux/opensbi-1.3-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.elf \
-kernel ~/riscv-linux/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"

注意:

        1. -drive file参数,后面跟着的是QCOW2的image.qcow2文件。注意路径要正确。

        2. -bios 参数,后面跟着的是opensbi的elf文件。注意路径要正确。

        3. -kernel参数,后面跟着的是u-boot的elf文件。注意路径要正确。

        4. 第一行-m、-smp参数,后面跟着的分别是内存和核心数,要根据自己电脑配置来,不然启动会失败,建议不要吝啬,因为qemu本身把riscv命令变为❌86等命令就很耗时,再加上riscv架构上许多应用适配不好,进一步加剧性能损耗,不加大内存和核心数的话很容易卡死riscv系统。

        5. -netdev参数,后面跟着的是要映射的主机端口,因为riscv和本机默认是NAT方式。如果我们希望riscv中的某些端口可以被外界访问,那么就需要配置映射,例如,本例中增加了14000作为映射端口,希望可以在宿主机使用localhost:14000的方式访问riscv服务。(建议保留2222-:22的映射)。

        6. 此外的报错,碰见缺啥依赖包下载啥就行了,都是包管理工具直接下载的包。

四、补充

下载下来的riscv64 QCOW2 虚拟磁盘默认是10G大小,很多情况下根本不够用。如果未来出现问题,可以进行扩容:

        1. 进入到image.qcow2所在文件夹下,执行:

qemu-img resize image.qcow2 +10G

        2.  扩容

# 更新包列表
sudo apt update# 安装cloud-guest-utils包(包含growpart工具)
sudo apt install cloud-guest-utils# 查看磁盘分区
sudo fdisk -l# 扩展第一个分区到最大可用空间
sudo growpart /dev/vda 1# 验证分区是否扩展成功
sudo fdisk -l /dev/vda# 检查文件系统类型
df -T /# 如果是ext4文件系统
sudo resize2fs /dev/vda1# 如果是xfs文件系统
sudo xfs_growfs /# 验证扩展结果
df -h /

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915083.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单使用MCP

1、说明# 测试环境服务器 CPU数量:2核 内存:4GB 磁盘:50GB# 补充 如果不想使用Docker进行操作,只需要跳过Docker相关命令操作 即:使用Ollama运行模型,使用Python来创建MCP2、安装Docker# 安装Docker https:…

电脑装机软件一键安装管理器

软件使用 现在的装机软件很多,主要几种类型就是办公、看图、影音、下载等,如果每次装机之后,手动一个一个去安装,费时费力还容易安装到全家桶。 就有人整理了网络上常用的一系列装机软件纯净和谐版本,并打包到一起&a…

深度学习入门-深度学习简介

深度学习是加深了层的深度神经网络。只需通过叠加层,就可以创建深度网络。1、 加深网络将深度学习中的重要技术(构成神经网络的各种层、学习时的有效技巧、对图像特别有效的CNN、参数的最优化方法等)汇总起来,创建一个深度网络&am…

Linux 下安装DM8数据库详细教程

Linux 下安装DM8数据库详细教程 一、环境准备 1.操作系统要求 DM 数据库支持多种操作系统,如 Windows、Linux 等。对于 Linux 系统,确保内核版本符合要求,例如 CentOS 7 或更高版本。同时,要保证系统有足够的磁盘空间(建议至少 10GB 以上)和内存(至少 1GB 以上)。 对…

搭建基于Gitee文档笔记自动发布

搭建基于Gitee文档笔记自动发布由于现在gitee不支持代理静态页面,并且github.io需要VPN,实际使用的话gitee更为方便。一、为服务器和个人PC添加免密push和pull 参考链接:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE…

【Lua】闭包可能会导致的变量问题

先思考下面这个问题:local function counter()local count 0return function()count count 1return countend endlocal a counter() local b counter()print(a()) --> ? print(a()) --> ? print(b()) --> ? print(a()) --> ?输出结果&#xff…

可观测性、OpenTracing、OpenCensus、OpenTelemetry、Jaeger

监控与观测 随着软件应用从单片架构向分布式微服务体系转变,应用监控(Monitoring)和观测(Observability)的需求也随之提升。两者存在相同的定义,目的都是为了发现应用程序中的问题。但还是有差别: 监控:目的是为了捕获已知的问题…

Linux下使用原始socket收发数据包

在Linux系统中,使用非原始的socket,可以收发TCP或者UDP等网络层数据包。如果要处理网络层以下的数据包,比如ICMP、ARP等,或者更底层,比如链路层数据包,就得使用原始socket了。 创建socket 创建socket要使用…

暑期自学嵌入式——Day05补充(C语言阶段)

接续上文:暑期自学嵌入式——Day05(C语言阶段)-CSDN博客 主页点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页: 一位搞嵌入式的 genius-CSDN博…

.NET Core EFCore零基础快速入门简单使用

一、什么是 Entity Framework (EF) Core Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的对象关系映射程序 (O/RM)数据访问技术,。 它将开发人员从编写大量 SQL 语句中解放出来。 二、EF的相关程序包 Microsoft.EntityFrameworkCore 核心程序包&#x…

AAC音频格式

目录 AAC音频格式介绍 主要特点 技术优势 常见文件扩展名 应用领域 AAC与PCM的区别与优势对比 基本概念差异 主要技术区别 各自优势 PCM的优势 AAC的优势 应用场景选择 AAC音频数据格式解析 1. AAC 文件格式 (1) ADIF (Audio Data Interchange Format) (2) ADT…

pom.xml文件中的${}变量从哪里传值

在 Maven 的 pom.xml 文件中,${} 格式的变量(称为属性占位符)的值来源主要有以下几种途径: 1. ​内置属性(Maven 预定义)​​ ${project.basedir}:项目根目录${project.version}:项…

【人工智能】项目案例分析:使用TensorFlow进行大规模对象检测

🏆🏆欢迎大家来到我们的天空🏆🏆 🏆 作者简介:我们的天空 🏆《头衔》:大厂高级软件测试工程师,阿里云开发者社区专家博主,CSDN人工智能领域新星创作者。 🏆《博客》:人工智能,深度学习,机器学习,python,自然语言处理,AIGC等分享。 所属的专栏:TensorF…

C++---cout、cerr、clog

在C编程里,cout、cerr和clog是标准库提供的重要输出流对象,在数据输出方面发挥着关键作用。 一、cout:标准输出流 cout 是 std::ostream 类的对象,其作用是向标准输出设备(一般是控制台)输出数据。它和 C 语…

脉冲神经网络(Spiking Neural Network, SNN)与知识蒸馏(Knowledge Distillation, KD)

目录 脉冲神经网络(Spiking Neural Network, SNN) 知识蒸馏(Knowledge Distillation, KD) 三种类别 三种变体 脉冲神经网络(Spiking Neural Network, SNN) 收到生物神经系统的启发,设计的&a…

使用Java完成下面项目

第一题:从控制台输入十个学生的成绩,使用list集合来保存数据, 遍历并打印其中成绩不及格的成绩,打印最高成绩,最低成绩,并计算及格率代码如下public class Home1 {public static void main(String[] args) …

龙虎榜——20250718

上证指数今天上涨收阳线,继续在5天均线保持强势上涨,个股下跌稍多,大盘股上涨为主。深证指数收小阳线,继续在5天均线上,总体保持强势,调整更多是小票。2025年7月18日龙虎榜行业方向分析1. 医药医疗• 代表标…

2025年华为认证之HCIE-云计算方向的报考流程

一、先搞明白:HCIE - 云计算认证到底是啥? HCIE - 云计算(华为认证 ICT 专家 - 云计算)是华为体系里云计算领域的顶级认证,说白了,就是证明你有能力搞定大型企业的云平台设计、部署和运维。现在政企、金融…

什么是私有化部署企业即时通讯?吱吱企业即时通讯安全吗?

在企业数字化转型加速的今天,沟通工具的选择已经从满足简单沟通,升级为“安全、高效、可控”。其中,“私有化部署企业即时通讯”成为许多中小型企业、跨国企业以及数据敏感型企业的核心需求。 那么,究竟什么是私有化部署&#xff…

Vue3 中使用 Element Plus 实现自定义按钮的 ElNotification 提示框

在 Vue3 项目中,我们经常会用到 ElNotification 作为消息提醒组件,尤其是在异步操作、任务完成或用户需要交互确认时。然而,Element Plus 默认的 Notification 是非交互式的,不能直接嵌入按钮或事件。 今天我们来实现一个带自定义…