QEMU安装和使用@Ubuntu(待续)

参考这篇文档:在 QEMU 上运行 RISC-V 64 位版本的 Linux - 知乎

参考官方文档:Running 64- and 32-bit RISC-V Linux on QEMU — RISC-V - Getting Started Guide

 FreeBSD riscv下载:Index of /freebsd/releases/riscv/14.0-RELEASE/

Linux 内核下载:GitHub - torvalds/linux: Linux kernel source tree

国内Linux内核镜像:Linux Kernel: Linux 内核源码镜像

Debian riscv:RISC-V - Debian Wiki

先按照qemu的这个手册一步步来:

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

先安装必要的库

sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \gawk build-essential bison flex texinfo gperf libtool patchutils bc \zlib1g-dev libexpat-dev git

再安装交叉编译gcc(这个不必须)

sudo apt install gcc-riscv64-linux-gnu gcc-riscv64-unknown-elf

安装交叉编译riscv-gnu-toolchain

git clone --recursive https://github.com/riscv/riscv-gnu-toolchainmkdir build && cd build../configure --prefix=/opt/riscv64-linux --with-arch=rv64imafdc --with-abi=xxx --enable-linux
make linux

可以设置with-abi=ilp64d ,也可以不设置。这个toolchain下载特别慢,因为里面还有很多其它库,经常会断

解决的方法是哪里缺少下哪里。另git下载的时候可以加上--depth参数以减少下载数据。

比如要下载

git clone https://sourceware.org/git/binutils-gdb.git

git clone https://gcc.gnu.org/git/gcc.git

https://sourceware.org/git/binutils-gdb.git

下载代码

git clone https://github.com/qemu/qemu
git clone https://github.com/torvalds/linux
git clone https://git.busybox.net/busybox

Build QEMU with the RISC-V target:

cd qemu
git checkout v5.0.0
./configure --target-list=riscv64-softmmu
make -j $(nproc)
sudo make install

这个应该用apt等包直接装了

不过后来又重新跑了一遍。

Build Linux for the RISC-V target. First, checkout to a desired version:

cd linux
git checkout v5.4.0
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig

这里会报错,需要提前riscv64-unknown-linux-gnu安装GitHub - riscv-collab/riscv-gnu-toolchain: GNU toolchain for RISC-V, including GCC

而编译riscv64-unknown-linux-gnu的时候会报toolchain缺少binutils,解决方法是下载:

git clone https://sourceware.org/git/binutils-gdb.git

 然后改名binutils-gdb 到binutils

缺 gcc git clone https://gcc.gnu.org/git/gcc.git

编译Linux

make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)

Build Busybox:

cd busybox
CROSS_COMPILE=riscv{{bits}}-unknown-linux-gnu- make defconfig
CROSS_COMPILE=riscv{{bits}}-unknown-linux-gnu- make -j $(nproc)

run

sudo qemu-system-riscv64 -nographic -machine virt \-kernel linux/arch/riscv/boot/Image -append "root=/dev/vda ro console=ttyS0" \-drive file=busybox,format=raw,id=hd0 \-device virtio-blk-device,drive=hd0

调试

toolchain软件包下载不全

编译的时候报错少东西

k/riskv64-linux/riscv-gnu-toolchain/build/../gdb/configure \
......
/bin/sh: /home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/../binutils/configure: No such file or directory
make: *** [Makefile:354: stamps/build-binutils-linux] Error 127
make: *** Waiting for unfinished jobs....
/bin/sh: /home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/../gdb/configure: No such file or directory
make: *** [Makefile:378: stamps/build-gdb-linux] Error 127

解决的方法是哪里缺了补下哪里。在riscv-gnu-toolchain目录里:

git clone https://sourceware.org/git/binutils-gdb.git
rm -rf gdb
mv binutils-gdb gdb

 报错不知道哪里错了

  CXX    dwarf2/macro.o
g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[3]: *** [Makefile:1925: dwarf2/index-write.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-gdb-linux/gdb'
make[2]: *** [Makefile:11378: all-gdb] Error 2
make[2]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-gdb-linux'
make[1]: *** [Makefile:1028: all] Error 2
make[1]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-gdb-linux'
make: *** [Makefile:379: stamps/build-gdb-linux] Error 2

再次编译就过了,也许是交换空间告急了吧。

chain的库

~/riskv64-linux/riscv-gnu-toolchain$ cat .gitmodules
[submodule "binutils"]
    path = binutils
    url = https://sourceware.org/git/binutils-gdb.git
    branch = binutils-2_42-branch
[submodule "gcc"]
    path = gcc
    url = https://gcc.gnu.org/git/gcc.git
    branch = releases/gcc-13
[submodule "glibc"]
    path = glibc
    url = https://sourceware.org/git/glibc.git
[submodule "dejagnu"]
    path = dejagnu
    url = https://git.savannah.gnu.org/git/dejagnu.git
    branch = master
[submodule "newlib"]
    path = newlib
    url = https://sourceware.org/git/newlib-cygwin.git
    branch = master
[submodule "gdb"]
    path = gdb
    url = https://sourceware.org/git/binutils-gdb.git
    branch = gdb-14-branch
[submodule "qemu"]
    path = qemu
    url = https://gitlab.com/qemu-project/qemu.git
[submodule "musl"]
    path = musl
    url = https://git.musl-libc.org/git/musl
    branch = master
[submodule "spike"]
    path = spike
    url = https://github.com/riscv-software-src/riscv-isa-sim.git
    branch = master
[submodule "pk"]
    path = pk
    url = https://github.com/riscv-software-src/riscv-pk.git
    branch = master
[submodule "llvm"]
    path = llvm
    url = https://github.com/llvm/llvm-project.git
    branch = release/17.x

编译toolchain报错

../sysdeps/unix/sysv/linux/riscv/flush-icache.c:24:10: fatal error: asm/syscalls.h: No such file or directory
   24 | #include <asm/syscalls.h>
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
make[3]: *** [/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-glibc-linux-rv64imafdc-lp64d/sysd-rules:43: /home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-glibc-linux-rv64imafdc-lp64d/misc/flush-icache.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/glibc/misc'
make[2]: *** [Makefile:258: misc/subdir_lib] Error 2
make[2]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/glibc'
make[1]: *** [Makefile:9: all] Error 2
make[1]: Leaving directory '/home/linuxskywalk/riskv64-linux/riscv-gnu-toolchain/build/build-glibc-linux-rv64imafdc-lp64d'
make: *** [Makefile:426: stamps/build-glibc-linux-rv64imafdc-lp64d] Error 2

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

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

相关文章

共享旅游卡到底是怎么回事?

共享旅游卡&#xff0c;一种引领旅游新风尚的智能卡片&#xff0c;正以其独特的方式改变着人们的旅游体验。千益畅行旅游卡&#xff0c;作为共享旅游卡的杰出代表&#xff0c;正逐渐成为旅游市场的新宠。 那么&#xff0c;共享旅游卡到底是什么&#xff1f;它又如何改变了我们…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课&#xff1a;话题通信一、话题通信概述&#xff08;一&#xff09;概念&#xff08;二&#xff09;作用 二、话题通信基本操作需求:分析:流程:&#xff08;一&#xff09;发布方解释一些关键的ROS函数和概念&#xff1a; &#xff08;二&#xff0…

久菜盒子|医学大数据|R|常用安装包及介绍

复习下&#xff1a; library(tibble) library(readxl) library(survival) library(survminer) library(rms) library(forestplot) library(magrittr) library(corrplot) library(car) require(stringdist) library(timeROC) library(tidyverse) library(dplyr) library(tidyr)…

RESTful API 名词解释:查询参数、请求体参数、响应参数、内容类型(Content-Type)、表单

查询参数 RESTful API 设计中的查询参数 在 RESTful API 设计中&#xff0c;查询参数是什么意思&#xff1f; 在RESTful API设计中&#xff0c;查询参数是指当客户端发起GET请求以获取资源时附加在URL末尾的一部分&#xff0c;用来进一步筛选或定制返回资源的内容。查询参数通…

QT+Opencv+yolov5实现监测

功能说明&#xff1a;使用QTOpencvyolov5实现监测 仓库链接&#xff1a;https://gitee.com/wangyoujie11/qt_yolov5.git git本仓库到本地 一、环境配置 1.opencv配置 将OpenCV-MinGW-Build-OpenCV-4.5.2-x64文件夹放在自己的一个目录下&#xff0c;如我的路径&#xff1a; …

Android密钥库(AndroidKeyStore)使用

一、KeyStore描述 在 Android 开发中&#xff0c;KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息&#xff0c;如密钥对、数字证书等&#xff0c;以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL…

Spark SQL— Catalyst 优化器

Spark SQL— Catalyst 优化器 1. 目的 本文的目标是描述Spark SQL 优化框架以及它如何允许开发人员用很少的代码行表达复杂的查询转换。我们还将描述Spark SQL如何通过大幅提高其查询优化能力来提高查询的执行时间。在本教程中&#xff0c;我们还将介绍什么是优化、为什么使用…

蓝桥杯练习系统(算法训练)ALGO-967 共线

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定2维平面上n个整点的坐标&#xff0c;一条直线最多能过几个点&#xff1f; 输入格式 第一行一个整数n表示点的个数   …

【Django】枚举类型数据

模型 在模型里主要增加两项内容&#xff1a; 枚举表字段增加choices class Snort(CoreModel):PAGE_TYPE_CHOICES [(1, 失陷主机检测), # 1是保存到数据库里的数据&#xff0c;失陷主机检测是显示在前端的(2, 远程漏洞攻击检测),(3, 可疑流量行为),(4, WEB检测),]page_type…

STM32 使用gcc编译介绍

文章目录 前言1. keil5下的默认编译工具链用的是哪个2. Arm编译工具链和GCC编译工具链有什么区别吗&#xff1f;3. Gcc交叉编译工具链的命名规范4. 怎么下载gcc-arm编译工具链参考资料 前言 我们在STM32上进行开发时&#xff0c;一般都是基于Keil5进行编译下载&#xff0c;Kei…

React中的受控组件与非受控组件

受控组件与非受控组件 受控组件 组件(input, select)的状态与state的值绑定&#xff0c;组件的状态全程响应外部数据 class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai };}render () {return <input …

区块链安全之DDoS防护的重要性及其实施策略

随着区块链技术的不断发展和广泛应用&#xff0c;其安全问题也日益凸显。其中&#xff0c;分布式拒绝服务(DDoS)攻击是对区块链网络稳定性和效率构成潜在威胁的重要因素之一。本文旨在深入探讨区块链为何需要采取DDoS高防措施&#xff0c;并提出相应的防护策略。 一、区块链面…

博客系统——3、数据库表设计 - 博客标签表

任务描述 本关任务&#xff1a;在博客数据库中建立博客标签表。 相关知识 多对多关系的建立 每一个博客都可以设置很多个标签&#xff0c;比如一篇讲JavaWeb知识的博客&#xff0c;就可能会涉及到多个标签如&#xff1a;前端、后端、Java、SpringMVC等标签&#xff0c;而一…

碳课堂|什么是碳资产?企业如何进行碳资产管理?

碳资产是绿色资产的重要类别&#xff0c;在全球气候变化日益严峻的背景下备受关注。在“双碳”目标下&#xff0c;碳资产管理是企业层面实现碳减排目标和低碳转型的关键。 一、什么是碳资产&#xff1f; 碳资产是以碳减排为基础的资产&#xff0c;是企业为了积极应对气候变化&…

Kubernetes示例yaml:1. service-deployment.yaml

service-deployment.yaml 示例 apiVersion: apps/v1 kind: Deployment metadata:name: example-plusnamespace: aaaalabels:app: example-prdapp_unit: AAAA-EXAMPLE spec:replicas: 2selector:matchLabels:app: example-prdtemplate:metadata:labels:app: example-prdapp_uni…

js相关的dom方法

查找元素 //获取元素id为box的元素 document.getElementById(box) //获取元素类名为box的元素 document.getElementsByClassName(box) //获取标签名为div的元素 document.getElementsByTagName(div)改变元素 //设置id为box的元素内容 document.getElementById("box"…

常见位运算的总结

目录 一、基础位运算 二、给一个数n&#xff0c;确定它的二进制中的第x位是0还是1 三、将一个数n的二进制表示的第x位修改成1 四、将一个数n的二进制位表示的第x位修改成0 五、位图思想 六、提取一个数(n)二进制表示中最右侧的1(lowbit) 七、干掉一个数n的最右侧的1 八、…

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …

神经网络代码实现(用手写数字识别数据集实验)

目录 一、前言 二、神经网络架构 三、算法实现 1、导入包 2、实现类 3、训练函数 4、权重参数矩阵初始化 5、参数矩阵变换向量 6、向量变换权重参数矩阵 7、进行梯度下降 7.1、损失函数 7.1.1、前向传播 7.2、反向传播 8、预测函数 四、完整代码 五、手写数字识别 一、前言 …