在x86下运行的Ubuntu系统上部署QEMU用于模拟RISC-V硬件环境

news2025/1/13 15:32:19

1.配置工作环境

sudo apt install gcc bison flex libncurses-dev ninja-build \
 pkg-config build-essential zlib1g-dev pkg-config libglib2.0-dev \
 binutils-dev libboost-all-dev autoconf libtool libssl-dev \
 libpixman-1-dev python-capstone virtualenv software-properties-common \
 libcap-ng-dev libattr1-dev

sudo apt install python3.8

2.下载RISC-V交叉编译器

下载地址:

https://toolchains.bootlin.com

建议选择stable版本,arch选择riscv64-lp64d,libc选择常用的glibc。

下载后解压,然后将bin目录加入PATH环境变量中。

3.下载编译QEMU

下载地址:

https://www.qemu.org/download/

建议选择稳定版本,下载后解压,然后make

wget https://download.qemu.org/qemu-8.0.3.tar.xz
tar xjvf qemu-8.0.3.tar.xz
cd qemu-8.0.3
./configure --enable-kvm --enable-virtfs
make

--enable-virtfs 用户虚拟机和宿主机之间共享文件

4.下载编译Linux kernel

Linux内核下载地址:

https://www.kernel.org/

选择稳定的版本,下载完后解压编译

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.125.tar.xz
tar xf linux-5.15.125.tar.xz
cd linux-5.15.125

export ARCH=riscv
export CROSS_COMPILE=riscv64-linux-

make defconfig
make -j8

编译成功后,在arch/riscv/boot下生成Image:

 5.使用buildroot制作rootfs

buildroot下载地址:

https://buildroot.org/download.html

选择稳定版本,下载后解压,然后进行buildroot配置

wget https://buildroot.org/downloads/buildroot-2023.02.3.tar.gz
tar xzvf buildroot-2023.02.3.tar.gz
cd buildroot-2023.02.3

make menuconfig

选择 Target options ---> Target Architecture,然后选择RISCV;

选择 Filesystem images ---> ext2/3/4 root filesystem,勾选上;

最后保存退出,然后编译

make -j8

编译过程会花费比较长时间,编译完成后,生成文件在output/images目录下:

rootfs.ext2是我们需要用到的。

6.运行QEMU

将Image、rootfs.ext2拷贝到当前目录下,然后执行命令:

qemu-system-riscv64 -M virt -smp 4 \
-kernel Image -nographic \
-append "root=/dev/vda console=ttyS0" \
-drive file=rootfs.ext2,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-virtfs local,path=/home/lynxi/bin.liu,mount_tag=host0,security_model=passthrough,id=host0 \
-m size=8g,slots=16,maxmem=16g

 -smp 用于指定模拟的CPU核心数

-virtfs是用来挂载宿主机目录到qemu内部Linux系统,path后面填写的是宿主机目录地址

-m 用于设置内存大小

7.挂载宿主机目录

执行上述命令启动QEMU后,root账号登录Linux系统,然后执行mount命令挂载宿主机目录,用于文件共享

mkdir -p /mnt/shared

mount -t 9p -o trans=virtio,version=9p2000.L host0 /mnt/shared

8.退出QEMU

键盘按 ctrl+a,松开后按 x

参考资料:

手把手教你在QEMU上运行RISC-V Linux - 知乎

Running 64- and 32-bit RISC-V Linux on QEMU — RISC-V - Getting Started Guide

在QEMU虚拟机和宿主机之间传输文件_qemu共享文件夹_远小帅的博客-CSDN博客

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

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

相关文章

第三章 图论 No.10无向图的双连通分量

文章目录 定义Tarjan求e-DCCTarjan求v-DCC395. 冗余路径1183. 电力396. 矿场搭建 定义 无向图有两种双连通分量 边双连通分量,e-DCC点双连通分量,v-DCC 桥:删除这条无向边后,图变得不连通,这条边被称为桥 边双连通分…

(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

参考文献: [1]高瑜,黄森,陈刘鑫等.基于改进灰狼算法的并网交流微电网经济优化调度[J].科学技术与工程, 2020,20(28):11605-11611. [2]邓长征,冯朕,邱立等.基于混沌灰狼算法的交直流混合微网经济调度[J].电测与仪表, 2020, 57(04):99-107. 这两篇文章不管是从模型、…

【JavaScript】new 的原理以及实现

网道 - new 命令的原理 使用new命令时,它后面的函数依次执行下面的步骤。 创建一个空对象,作为将要返回的对象实例。将这个空对象的原型,指向构造函数的prototype属性。将这个空对象赋值给函数内部的this关键字。如果构造函数返回了一个对象…

[内网渗透]CFS三层靶机渗透

文章目录 [内网渗透]CFS三层靶机渗透网络拓扑图靶机搭建Target10x01.nmap主机探活0x02.端口扫描0x03.ThinkPHP5 RCE漏洞拿shell0x04.上传msf后门(reverse_tcp)反向连接拿主机权限 内网渗透Target2(1)路由信息探测(2)msf代理配置&a…

Air001基于Keil环境点灯和调试输出工程配置

Air001基于Keil环境点灯和调试输出工程配置 📌官方环境搭建教程介绍:https://wiki.luatos.com/chips/air001/Air001-MDK.html🔖本人使用的是基于HAL库环境搭建的。📍SDK开发资源链接:https://gitee.com/openLuat/luato…

私域流量宝工具源码搭建-含详细使用说明

👋私域流量宝致力于为个人、团队提供基于微信私域流量的推广、引流的效率工具。可减轻人力,有效降低资源损失、流量流失的几率。引流宝完全开源,免费,可商用、可任意二次开发。引流宝可以辅助你更好地开展营销活动推广&#xff01…

【Docker系列】push镜像报错问题解决方案

1 问题描述 docker push 报这个错,unknown blob 详细报错内容: Use docker scan to run Snyk tests against images to find vulnerabilities and learn how to fix them The push refers to repository [192.******/*******/*************] 3b3341e9d03…

2498. 青蛙过河 II;2568. 最小无法得到的或值;1954. 收集足够苹果的最小花园周长

2498. 青蛙过河 II 核心思想:这题有点开脑洞,就是如果想让代价最小只能是隔一个石头跳,因为其他方法的路径都会形成比这种方法大的结果,然后我们只需要统计出间隔石头的最大值即可。 2568. 最小无法得到的或值 核心思想&#xf…

【第二阶段】kotlin语言的匿名函数类型推断

1.常规匿名函数写法: 如果使用了":",必须给定参数类型和 返回值类型如下: val meThod:()->Int{}2.匿名函数“”,返回类型推断 使用类型推断“”,根据返回值的类型推断 fun main() {/** 常规匿名函数写法&#xff1a…

2023年最新最全软件测试面试题大全

一、面试基础题 简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(…

哈希unordered系列介绍(上)

一.Unordered_map,Unordered_set介绍 在之前我们已经介绍过set,map,multiset等等关联式容器,它们的底层是红黑树进行模拟实现的,在查询时效率可达到 l o g 2 N log_2 N log2​N,即最差情况下需要比较红黑树的高度次,当树中的节点…

【Linux】IP协议——网络层

目录 IP协议 基本概念 IP协议格式 分片与组装 网段划分 特殊的IP地址 IP地址的数量限制 私网IP地址和公网IP地址 路由 路由表生成算法 IP协议 IP协议全称为“网际互连协议(Internet Protocol)”,IP协议是TCP/IP体系中的网络层协议…

【LangChain】Memory

概要 大多数LLM应用都有对话界面。对话的一个重要组成部分是能够引用对话中先前介绍的信息。至少,对话系统应该能够直接访问过去消息的某些窗口。更复杂的系统需要有一个不断更新的世界模型,这使得它能够执行诸如维护有关实体及其关系的信息之类的事情。…

【D3S】REST接口文档自动生成 - 集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S(DDD with SpringBoot)为本作者使用DDD过程中开发的框架,目前已可公开查看源码&#…

Object.assign详解

一、Object.assign是什么? Object.assign( )方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 二、用法 Object.assign(target, ...sources) 参数:target ——>目标对象 source ——>源对象 返回值:…

使用生成式 AI 模仿人类行为

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 这项研究被 2023 年学习表征国际会议 (ICLR) 接受,该会议致力于推进通常称为深度学习的人工智能分支。 图 1:我们的方法概述。 扩散模型已成为一类强大的生…

【JVM】JVM垃圾收集器

文章目录 什么是JVM垃圾收集器四种垃圾收集器(按类型分)1.串行垃圾收集器(效率低)2.并行垃圾收集器(JDK8默认使用此垃圾回收器)3.CMS(并发)垃圾收集器(只针对老年代垃圾回收的) 什么是JVM垃圾收…

SDR硬件方案

以射频硬件为线索,梳理常见SDR(软件无线电)方案。SDR硬件位于天线和数字信号处理之间,负责把无线电信号数字化,交由主机或者嵌入式系统(FPGA、DSP,MCU)处理。SDR硬件一般包含射频和数…

Python Opencv实践 - 图像缩放

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg_cat cv.imread("../SampleImages/cat.jpg", cv.IMREAD_COLOR) plt.imshow(img_cat[:,:,::-1])#图像绝对尺寸缩放 #cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) #指定Size大…

18.3.0:Dynamic Web TWAIN Crack Web 文档扫描 SDK

Dynamic Web TWAIN用于快速部署 Web 应用程序的文档扫描 SDK,文档扫描SDK,,超过 5300 家公司信任 Dynamic Web TWAIN ,因其稳健性和安全性而受到超过 5300 家公司的信赖,Dynamic Web TWAIN 是一款基于浏览器的文档扫描…