1.XV6环境配置

embedded/2024/9/24 6:02:16/

安装虚拟机

这个就不多说了,搞一台Ubuntu虚拟机即可,最好是通过vscode 用ssh远程连接进行实验会比较方便,具体怎么做可参考我这篇博客:

VsCode配置SSH连接远程服务器(手把手,学不会打我)_vscode remote ssh配置-CSDN博客

获取源码

git clone git://g.csail.mit.edu/xv6-labs-2020
Cloning into 'xv6-labs-2020'...

进入到实验目录下并切换到util分支

cd xv6-labs-2020
git checkout util

看readme可以知道,想运行xv6直接make qemu即可

但执行会报错

Error: Couldn't find a riscv64 version of GCC/binutils.

安装g++/gcc/binutils/qemu

根据上述报错信息,需要安装riscv64版本的binutils,

可以使用apt search搜索相关packages

apt search binutils  |grep binutils-riscv64

使用apt install 安装找到的三个packages

sudo apt install binutils-riscv64-linux-gnu
sudo apt install binutils-riscv64-linux-gnu-dbg
sudo apt install binutils-riscv64-unknown-elf

安装gcc、g++

sudo apt install g++
sudo apt install gcc-10-riscv64-linux-gnu
//进入 /usr/bin 目录建立软连接
sudo ln -s riscv64-linux-gnu-gcc-10 riscv64-unknown-elf-gcc进入 /usr/bin 目录

安装qemu

git clone https://github.com/qemu/qemu.git

下载到本地后目录为qemu进入该文件夹,执行下面指令

mkdir build && cd build
../configure --target-list=riscv64-softmmu && make

不过会出错,缺少了一些包

下面安装一下

sudo apt install ninja-build
sudo apt install pkg-config
sudo apt install libglib2.0-dev
sudo apt install libpixman-1-dev

安装完后继续执行上述命令即可

xv6 的 Makefile 中指定了 QEMU 命令的名称 QEMU = qemu-system-riscv64,会自动在 PATH 环境变量中寻找命令,因此将编译好的二进制文件 qemu-system-riscv64 (位置在 qemu/build 目录)复制到 /usr/bin 目录中。

sudo cp qemu-system-riscv64 /usr/bin/

启动

进入xv6-labs-2020,执行make qemu

执行完成


http://www.ppmy.cn/embedded/100829.html

相关文章

【HuggingFace Transformers】BertModel源码解析

BertModel源码解析 1. BertModel 介绍2. BertModel 源码逐行注释 1. BertModel 介绍 BertModel 是 transformers 库中的核心模型之一,它实现了 BERT(Bidirectional Encoder Representations from Transformers)模型的架构。BERT 是基于 Trans…

【图文并茂】ant design pro 如何给后端发送 json web token - 请求拦截器的使用

上一节有讲过 【图文并茂】ant design pro 如何对接后端个人信息接口 还差一个东西,去获取个人信息的时候,是要发送 token 的,不然会报 403. 就是说在你登录之后才去获得个人信息。这样后端才能知道是谁的信息。 token 就代码了某个人。 …

ThreeJs学习-层级模型

ThreeJs所有的模型就是一个树结构 Group层级模型 //创建两个网格模型mesh1、mesh2 const geometry new THREE.BoxGeometry(20, 20, 20); const material new THREE.MeshLambertMaterial({color: 0x00ffff}); const group new THREE.Group(); const mesh1 new THREE.Mesh(ge…

Spring Boot 集成 JdbcTemplate(盘它!)

文章目录 Spring Boot 集成 JdbcTemplate基本介绍JdbcTemplate 概念JdbcTemplate 优势JdbcTemplate 应用场景NamedParameterJdbcTemplate 概念 准备工作项目环境配置Spring Boot版本选择Maven 依赖配置 数据库配置实体类与数据库表映射创建实体类数据库表的设计与创建 JdbcTemp…

分布式互斥锁优化数据库压力:从基础到高级优化

分布式互斥锁优化数据库压力:从基础到高级优化 在高并发系统中,缓存击穿是一个棘手的问题。为了防止多个请求同时穿透缓存访问数据库,分布式锁成为一种有效的解决方案。然而,随着系统复杂度和并发量的增加,简单的锁机…

每日Attention学习15——Cross-Model Grafting Module

模块出处 [CVPR 22] [link] [code] Pyramid Grafting Network for One-Stage High Resolution Saliency Detection 模块名称 Cross-Model Grafting Module (CMGM) 模块作用 Transformer与CNN之间的特征融合 模块结构 模块思想 Transformer在全局特征上更优,CNN在…

【jvm】栈是否存在垃圾回收

目录 一、栈的特点1.1 栈内存分配1.2 栈的生命周期1.3 垃圾回收不直接涉及 二、堆与栈的区别三、总结 一、栈的特点 1.1 栈内存分配 1.栈内存分配是自动的,不需要程序员手动分配和释放。 2.每当一个方法被调用时,JVM就会在这个线程的栈上创建一个新的栈…

设计模式六大原则中的里氏替换原则

设计模式六大原则中的里氏替换原则(Liskov Substitution Principle, LSP)是面向对象设计中一个至关重要的原则,它定义了继承的基本原则和约束,确保子类能够透明地替换父类,而不会破坏系统的正确性和稳定性。以下是对里…