操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)

MIT6.S081(操作系统)学习笔记

操作系统入门系列-MIT6.828(操作系统)学习笔记(一)---- 操作系统介绍与接口示例
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)


文章目录

  • MIT6.S081(操作系统)学习笔记
  • 前言
  • 一、安装依赖
    • 1.测试环境
      • (a)检测1
      • (b)检测2
    • 2.检测未通过情况
    • 3.安装依赖
  • 二、安装QEMU
    • 1.下载源码
    • 2.修改配置
      • (a)修改Makefile
      • (b)增加头文件
      • (c)修改编译参数
    • 2.编译QEMU
  • 三、启动xv6
    • 1.下载实验源码
    • 2.编译启动
  • 四、2023版本配置
    • 1.配置环境
    • 2.检查环境
    • 3.启动xv6
  • 总结


前言

该课程有大量的课程实验,理论和实验的教学都是基于课程组设计的xv6操作系统(模仿Unix设计风格)。通过大量实验和课程,可以对操作系统特别是Linux有深入的理解。

本篇文章讲解实验的环境qemu+xv6搭建,具体配置如下:
虚拟机:WSL2
Linux:ubuntu20.04

官方的教程如下:Tools Used in 6.828


上述的课程资料是2018年,笔者发现2023年课程有所该改变,貌似改了名字,因此补充2023版本的xv6环境配置,更加的简单。
官方的教程如下:Tools Used in 6.1810


一、安装依赖

1.测试环境

(a)检测1

objdump -i

结果为:(部分打印)
在这里插入图片描述
有elf32-i386即为正确

(b)检测2

gcc -m32 -print-libgcc-file-name

结果为:
在这里插入图片描述

/usr/lib/gcc/x86_64-linux-gnu/11/32/libgcc.a
或者
/usr/lib/gcc/i486-linux-gnu/version/libgcc.a
即为正确

2.检测未通过情况

若上述检测未通过,运行下面代码:

sudo apt-get install -y build-essential gdb

命令执行结果如果出现错误:“__udivdi3 not found” 或者 “__muldi3 not found”,是因为需要32位的支持库,运行下面代码修复:

sudo apt-get install gcc-multilib

3.安装依赖

安装一些依赖库,以便顺利编译QEMU

sudo apt-get install libsdl1.2-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install libz-dev
sudo apt-get install libpixman-1-dev
sudo apt-get install libtool*
sudo apt-get install zlib1g-dev

如果中间出现错误,可能需要运行:

 sudo apt-get update

二、安装QEMU

1.下载源码

使用官方链接下载QEMU源码,执行命令如下:

git clone https://github.com/mit-pdos/6.828-qemu.git qemu

该命令会在当前目录下,将qemu的源码下载到名为“qemu”的文件夹内
在这里插入图片描述

2.修改配置

(a)修改Makefile

在qemu文件夹内,修改Makefile文件,在QEMU源码目录下的Makefile文件最后加上一行

QEMU_CFLAGS+=-w

结果如下图:
在这里插入图片描述

(b)增加头文件

在 qga/commands-posix.c文件中加 #include <sys/sysmacros.h>
结果如图:
在这里插入图片描述

(c)修改编译参数

将QEMU源码目录下的config-host.mak文件中的-Werror去掉
在这里插入图片描述

2.编译QEMU

在qemu目录下运行

./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"

如果没有成功,检查上述问题是否修改
运行成功后,进入root权限,并执行make:

sudo su
make && make install

退出root用户

exit

三、启动xv6

1.下载实验源码

git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab

该命令会在当前目录下,将实验的源码下载到名为“lab”的文件夹内
结果如下:(编译后的)
在这里插入图片描述

2.编译启动

在lab目录下,执行下面命令:

make
sudo make qemu

结果如下:
在这里插入图片描述
实验环境搭建成功

四、2023版本配置

1.配置环境

输入命令

sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

部分结果如下:
在这里插入图片描述

2.检查环境

输入命令:

qemu-system-riscv64 --version

结果如下:
在这里插入图片描述
输入命令:

riscv64-linux-gnu-gcc --version

结果如下:
在这里插入图片描述

输入命令:

riscv64-unknown-elf-gcc --version

在这里插入图片描述

输入命令:

riscv64-unknown-linux-gnu-gcc --version

结果如下:
在这里插入图片描述
这里没有发现对应工具,但是不影响后面的启动。

3.启动xv6

输入命令,拉取实验代码:

git clone git://g.csail.mit.edu/xv6-labs-2023 lab

在这里插入图片描述
进入lab目录,输入命令:

make qemu

结果如下:
在这里插入图片描述
即为启动成功。

总结

配置2018版本的过程中如果出现其他本文没有出现的bug,很有可能是没有依赖库或者依赖库的函数版本不对。可以按照报错提示修改相应的函数名称或者查看其他博客。wsl2+ubuntu的搭建,之后可能会出教程。

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

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

相关文章

福昕PDF编辑器自定义快捷方式

你是否为用不惯福昕PDF编辑器自带的快捷键而发愁&#xff1f;今天&#xff0c;我和大家分享一下如何设置自己想要的快捷键方式&#xff0c;希望能对大家有帮助。 步骤一&#xff1a;打开福昕PDF编辑&#xff0c;并找到更多命令 步骤二&#xff1a;切换到键盘一栏&#xff0c;并…

分布式专题

一&#xff1a;分布式事务 1、理论基础 分布式事务主要区分本地事务 什么是本地事务&#xff08;Local Transaction&#xff09;&#xff1f;本地事务也称为数据库事务或传统事务&#xff08;相对于分布式事务而言&#xff09;。尤其对于数据库而言&#xff0c;为了数据安全…

Docker快速搭建Oracle服务

服务器&#xff1a;CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号&#xff0c;也可以不注册账号&#xff0c;直接使用下面的连接。 也可以写入多…

【C++ 】学习问题及补充

一.自定义类型不初始化直接就赋值&#xff0c;比如string类会怎么样 vectr<string>里已经给每个string对象已经分配好空间&#xff0c;为什么不初始化再赋值会报错 在C中&#xff0c;std::string类是一个动态字符串类&#xff0c;它内部管理着一个字符数组&#xff0c;用…

【蓝桥杯】国赛普及-

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int…

【传知代码】无监督动画中关节动画的运动表示-论文复现

文章目录 概述动画技术的演进原理介绍核心逻辑环境配置/部署方式小结 本文涉及的源码可从无监督动画中关节动画的运动表示该文章下方附件获取 概述 该文探讨了动画在教育和娱乐中的作用&#xff0c;以及通过数据驱动方法简化动画制作的尝试。近期研究通过无监督运动转移减少对…

Java进阶学习笔记30——BigDecimal

BigDecimal&#xff1a; 用于解决浮点型运算的&#xff0c;出现结果失真的问题。 运行结果&#xff1a; package cn.ensource.d4_bigdecimal;import java.math.BigDecimal;public class Test {public static void main(String[] args) {// 目标&#xff1a;了解BigDecimal类do…

8、Qt—Log4Qt使用小记2(每日产生文件)

前言&#xff1a; 开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 例如&#xff1a;上一篇文章中笔者记录了Log4qt的编译及配置使用&#xff0c;这篇文章重点写下每天产生文件到指定文件夹中&#xff0c;…

5.1 Go 函数的定义与调用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Spring Boot集成testcontainers快速入门Demo

1.什么是testcontainers&#xff1f; Testcontainers 是一个用于创建临时 Docker 容器进行单元测试的 Java 库。当我们想要避免使用实际服务器进行测试时&#xff0c;它非常有用。&#xff0c;官网介绍称支持50多种组件。​ 应用场景 数据访问层集成测试&#xff1a; 使用My…

ubuntu20安装Labelme

conda create --namelabelme python3 进入conda环境 source activate labelme 安装labelme pip install labelme 遇到网络问题 使用清华源 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 输入labelme 打开

Google的MLP-MIXer的复现(pytorch实现)

Google的MLP-MIXer的复现&#xff08;pytorch实现&#xff09; 该模型原论文实现用的jax框架实现&#xff0c;先贴出原论文的代码实现&#xff1a; # Copyright 2024 Google LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may …

GEC210编译环境搭建

一、下载编译工具链 下载&#xff1a;点击跳转 二、解压到 /usr/local/arm 目录 sudo mv gec210.zip /usr/local/arm cd /usr/local/arm sudo unzip gec210.zip 三、添加到环境变量 PATH/usr/local/arm/arm-cortex_a8-linux-gnueabi-4.7.3/bin:$PATH 四、测试验证 在终端…

python数据分析-基于数据挖掘对APP评分的预测

前言 当我们谈论关于APP用户分析与电子商务之间的联系时&#xff0c;机器学习在这两个领域的应用变得至关重要。App用户分析和电子商务之间存在着密切的关联&#xff0c;因为用户行为和偏好的深入理解对于提高用户体验、增加销售以及优化产品功能至关重要。故本文基于K-近邻模…

OFDM 802.11a的FPGA实现(二十)使用AXI-Stream FIFO进行跨时钟(含代码)

目录 1.前言 2.AXI-Stream FIFO时序 3.AXI-Stream FIFO配置信息 4.时钟控制模块MMCM 5.ModelSim仿真 6.总结 1.前言 至此&#xff0c;通过前面的文章讲解&#xff0c;对于OFDM 802.11a的发射基带的一个完整的PPDU帧的所有处理已经全部完成&#xff0c;其结构如下图所示&…

CAN总线简介

1. CAN总线概述 1.1 CAN定义与历史背景 CAN&#xff0c;全称为Controller Area Network&#xff0c;是一种基于消息广播的串行通信协议。它最初由德国Bosch公司在1983年为汽车行业开发&#xff0c;目的是实现汽车内部电子控制单元&#xff08;ECUs&#xff09;之间的可靠通信。…

03自动辅助导航驾驶NOP其实就是NOA

蔚来NOP是什么意思&#xff1f;蔚来NOP是啥 蔚来NOP的意思就是NavigateonPilot智能辅助导航驾驶&#xff0c;也就是大家俗称的高阶辅助驾驶&#xff0c;在车主设定好导航路线&#xff0c;并且符合开启NOP条件的前提下&#xff0c;蔚来NOP可以代替驾驶员完成从A点到B点的智能辅助…

【二叉树】:LeetCode:100.相同的数(分治)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶初阶结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 1.问题描述&#xff1a; 2.问题分析&#xff1a; 二叉树是区分结构的&#xff0c;即左右子树是不一…

[JDK工具-6] jmap java内存映射工具

文章目录 1. 介绍2. 主要选项3. 生成java堆转储快照 jmap -dump4. 显示堆详细信息 jmap -heap pid5. 显示堆中对象统计信息 jmap -histo pid jmap(Memory Map for Java) 1. 介绍 位置&#xff1a;jdk\bin 作用&#xff1a; jdk安装后会自带一些小工具&#xff0c;jmap命令(Mem…