Qemu搭建RISC-V,运行opensbi+u-boot+img

✨1.先下载一个Ubuntu镜像

https://cdimage.ubuntu.com/releases/24.04/release/
我这里下载的是这个RISC-V的
在这里插入图片描述

🌟1.2.解压镜像

xz -d ubuntu-24.04.2-preinstalled-server-riscv64.img.xz

✨2.准备RISC-V的QEMU

打开qemu官网https://www.qemu.org/,下载qemu-9.1.3.tar.xz
在这里插入图片描述

🌟2.1.解压qemu

tar xf qemu-9.1.3.tar.xz

🌟2.3.编译qemu

cd qemu-9.1.3
mkdir build
cd build
../configure --enable-slirp --target-list=riscv64-softmmu
make -j$(nproc)
make install

编译完成之后可以看到系统下有qemu-system-riscv64生成
在这里插入图片描述

🌟2.4 注意:

博主在这里编译qemu的时候也遇到了一些问题,一般都能百度解决我就不贴在这里了,一般会遇到的问题有Glib的版本要大于2.66.0版本,这里可以通过以下方式升级,如果版本高于2.66则忽略该步骤。

🌟2.4.1 查看Glib版本

pkg-config --modversion glib-2.0  # 如果低于2.66.0的话可以手动编译

🌟2.4.2 手动安装编译Glib版本

# 安装编译依赖
sudo apt install -y build-essential git meson ninja-build libffi-dev python3-dev# 下载GLib源码
cd ~
wget https://download.gnome.org/sources/glib/2.66/glib-2.66.0.tar.xz
tar -xf glib-2.66.0.tar.xz
cd glib-2.66.0# 配置、编译和安装
mkdir build && cd build
meson --prefix=/usr/local ..
ninja
sudo ninja install# 更新动态链接库缓存
sudo ldconfig

🌟2.4.3 验证安装

pkg-config --modversion glib-2.0 # 显示更高版本

✨3.安装riscv64编译器

这里直接使用apt进行安装:

sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y

✨4.准备固件和依赖

QEMU运行RISC-V需要固件(如OpenSBI和U-Boot)。Ubuntu官方教程推荐以下文件:
OpenSBI(提供固件支持):
Ubuntu系统中通常已包含,位于 /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf。
如果缺失,可从 https://github.com/riscv/opensbi 下载并编译

🌟4.1.下载opensbi

从github上clone opensbi:

git clone https://github.com/riscv-software-src/opensbi.git -b v1.5.1

🌟4.2 .编译opensbi:

cd opensbi
make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic all -j$(nproc)

编译完成后,在build/platform/generic/firmware目录下生成相应的bin文件,后面我们要用到fw_jump.bin文件:
在这里插入图片描述

✨5. 编译u-boot

● Ubuntu系统中通常位于 /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf。
● 如果缺失,可从 https://github.com/u-boot/u-boot 下载并编译:

git clone https://github.com/u-boot/u-boot
cd u-boot
make qemu-riscv64_smode_defconfig
make CROSS_COMPILE=riscv64-linux-gnu- -j$(nproc)

编译完之后会生成一个u-boot.bin的文件
在这里插入图片描述

✨6.启动 RISC-V镜像

qemu-system-riscv64 \-nographic \-machine virt \-m 8G \-smp 8 \-bios /home/risc-v/opensbi/build/platform/generic/firmware/fw_jump.bin \-kernel /home/risc-v/u-boot/u-boot.bin \-append "root=/dev/vda rw console=ttyS0" \-drive file=/home/risc-v/ubuntu-24.04.2-preinstalled-server-riscv64.img,format=raw,id=hd0,if=none \-device virtio-blk-device,drive=hd0 \-netdev user,id=net0,hostfwd=tcp:0.0.0.0:2223-:22 \-device virtio-net-device,netdev=net0

成功安装Ubuntu24.04 riscv架构的操作系统
在这里插入图片描述

✨注意点:

1.首次安装成功之后账号密码默认是ubuntu/ubuntu,进入到系统之后修改root密码:sudo passwd root修改即可
2. -netdev user,id=net0,hostfwd=tcp:0.0.0.0:2223-:22 端口不能冲突,可以通过netstat -tuln | grep 2223查看是否端口冲突了。
3.启动的路径需要对照自己的路径来修改
4.如果有自己对应的内核可以自己修改启动脚本
5.编译Qemu和uboot的话需要安装很多依赖包,具体遇到哪些报错就安装即可,一般python3,gcc,make,ninja,meson等都需要安装好。

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

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

相关文章

【实战手册】银河麒麟服务器系统进入单用户模式修改密码(root)指南

目录 前言 一、银河麒麟单用户模式简介 二、进入单用户模式修改密码 三、登录验证新密码 结语 前言 在日常服务器运维工作中,忘记root密码是系统管理员偶尔会遇到的问题。作为国产操作系统的优秀代表,银河麒麟服务器系统提供了通过单用户模式重置r…

偏微分方程通解求解2

题目 求下列方程的通解: { u x y = u x u y u − 1 ; u x y = u x u y ; u x y = u x u y u u 2 + 1 ; \begin{cases} u_{xy} = u_x u_y u^{-1}; \\ u_{xy} = u_x u_y; \\ u_{xy} = \dfrac{u_x u_y u}{u^2 + 1}; \end{cases} ⎩⎪⎪⎨⎪⎪⎧​uxy​=ux​uy​u−1;uxy​=ux​…

用于算法性能预测的 GNN 框架

大家读完觉得有帮助记得关注和点赞!!! 抽象。 数值黑盒优化中的自动算法性能预测通常依赖于问题特征,例如探索性景观分析特征。这些特征通常用作机器学习模型的输入,并以表格格式表示。然而,这种方法往往忽…

拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)

1 分区表核心原理与生产痛点 物理存储结构决定性能边界 PostgreSQL分区表的本质是继承表路由规则的逻辑封装。当父表被查询时,查询优化器通过CHECK约束快速定位子表,其性能核心取决于: -- 关键系统视图 SELECT relname, relkind, relpages …

【Wi-Fi天气时钟】网络授时

文章目录 1 网络授时概述1.1 什么是网络授时1.2 为什么要使用网络授时2 API概述2.1 什么是API2.2 如何使用API3 淘宝时间API简介4 网络授时流程和AT指令5 网络授时程序设计5.1 API返回信息解析5.2 RTC初始化5.3 必要的后续操作6 结语1 网络授时概述 1.1 什么是网络授时 首先我…

腾讯云IM即时通讯:开启实时通信新时代

一、引言 在当今数字化浪潮席卷全球的时代,即时通讯已然成为互联网世界中不可或缺的关键元素。无论是个人日常生活中的社交互动,还是企业运营里的高效协作,即时通讯都发挥着举足轻重的作用,已然渗透到人们生活与工作的每一个角落…

js逻辑:【增量更新机制】

增量更新机制:在数据发生变化时,只对变化的部分进行更新的策略,而不是每次都重新处理全部数据,即:在数据发生变化时,只对变化的部分进行更新的策略,而不是每次都重新处理全部数据 watch: {base…

详解Redis的LUA脚本、管道 (Pipelining)、事务事务 (Transactions)

1. 管道 (Pipelining) 网络延迟 (Round-Trip Time - RTT) 瓶颈。 在传统模式下,客户端发送一个命令 -> 等待 Redis 服务器处理并返回结果 -> 再发送下一个命令。如果客户端需要执行大量命令(例如设置或获取多个键),每个命令…

SIP 协议中的定时器

SIP(Session Initiation Protocol) 是一种信令协议,广泛用于建立、维持和终止多媒体会话(如VoIP通话)。作为基于UDP等不可靠传输的协议,SIP 通过多个定时器机制来确保消息的可靠传输和状态机的正常运行。 …

【机器学习深度学习】偏置项(Bias)概念

目录 前言 一、先说结论:偏置项是“默认起点” 二、类比理解 类比 1:老师给学生的“基础分” 类比 2:预测房价时的“固定成本” 三、没有偏置项的模型,会有什么问题? 四、在神经网络中,偏置项是神经…

使用数组 海选女主角

问题描述 面试那天,刚好来了m * n个MM,站成一个m * n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则&#xff…

从0开始学习R语言--Day29--社交网络分析

在探寻数据之间的关系时,由于数据类型的限制,很多时候我们可以从数据的现实角度出发去选择方法,而不是一昧地从头尝试不同方法去分类。假如我们用的是传染病在市面上的传播路径数据,亦或是病毒对于基因的感染模块,就可…

一款基于 React 的开源酷炫动画库

React Bits 是一个开源的交互式 React 组件库,包含一系列动画化、交互式且完全可定制的 React 组件,用于构建令人惊艳且难忘的用户界面,可帮助开发者在 React 应用中轻松实现各种动画效果。它提供了超过70种动画组件,分为文本动画…

深入理解前端理念bundleless

Bundleless 是一种新兴的前端开发趋势,它的核心思想是减少或完全去除传统的打包步骤,直接利用浏览器对现代 JavaScript 特性(尤其是 ES 模块)的原生支持。这一趋势背后的推动力包括现代浏览器的进步、开发者对更快开发反馈的需求以及更简单的开发流程。以下是对 bundleless…

马斯克YC技术核弹全拆解:Neuralink信号编译器架构·星舰着陆AI代码·AGI防御协议(附可复现算法核心/开源替代方案/中国技术对标路径)

一、Neuralink技术栈深度剖析 ▶ 神经信号编译架构(基于已公开专利US20220369936) 关键算法实现: # 运动意图解码核心(简化版) import numpy as np from sklearn.ensemble import RandomForestClassifierclass Neura…

【RK3568 嵌入式linux QT开发笔记】 二维码开源库 libqrencode 交叉静态编译和使用

本文参考文章:https://blog.csdn.net/qq_41630102/article/details/108306720 参考文章有些地方描述的有疏漏,导致笔者学习过程中,编译的.a文件无法在RK3568平台运行,故写本文做了修正,以下仅是自我学习的笔记&#xf…

git本地裸仓库的“激活”:在同一台 Linux 服务器上创建工作区

大家好!在之前的文章中,我们探讨了 Git 裸仓库(Bare Repository)的概念,它是没有工作目录,只包含 .git 目录内容的特殊仓库格式,非常适合作为中心化的代码集散地或备份。我们也了解了 git clone…

如何排查在docker中运行软件的故障:Docker故障排查可视化指南,三招锁定问题根源

很多刚接触Docker的朋友常觉得故障排查很神秘。其实只需关注CPU、内存、磁盘这三大资源指标!Linux终端虽强大但不够直观,下面教你用可视化工具轻松监控: 一、宿主机全局监控:FinalShell 掌控全局 连接宿主机 打开FinalShell&…

【论文笔记】【强化微调】T-GRPO:对视频数据进行强化微调

tulerfeng/Video-R1: Video-R1: Reinforcing Video Reasoning in MLLMs [🔥the first paper to explore R1 for video] 1. 引述 在强化微调中,像 GRPO、DAPO 这样的方法都是对文本或者图片进行微调思考,所以这类微调方法不对时序信息做处理&…

【Unity】动画系统

0 前言 早些时间学动画系统时的笔记,实际还没学完,后续计划会慢慢补全吧。 1 动画 通常来说动画都是动画师来做的,不过Unity也能实现简单的动画效果。PS:官方文档中,将动画称之为动画剪辑。 1.1 创建动画 首先在Unit…