MIT6.S081的启航之旅

关于MIT 6.S081 课程学习

考完研了,对OS的各种实现细节有很大的兴趣,也是为了增加对操作系统的了解程度,决定学习MIT的6.S081这门课程,也是第一门系统学习国外名校课程,之前也有看过Harvard的CS50,但是只刷了视频,没有刷lab,也没有做quiz,导致现在的留存印象几近于零,所以打算按照真正的一套流程走下来 把 MIT6.S081这门课所有的流程刷一遍,并且用blog的形式记录下来。

得益于MIT的online learning,课程资料被完整地留了下来。MIT 6.S081传送门 上这门课的所有资料都能在这里找到!

话不多说,开始正文!

首先是配置环境,这门课采用软件模拟的方式来调试整个操作系统,也就是说让xv6操作系统运行在一个用软件仿真出来的x86计算机上。这个仿真软件就是QEMU,这个仿真器有一个非常好的优点,就是它能和调试器GDB共同配合使用,这样的话我们就可以一条指令一条指令的调试运行在QEMU里面的xv6操作系统了。所以在这部分我们将学习如何搭建这个调试的环境。

按照lab_tools 指示搭建qemu,看起来简单但实则还是会出现一点麻烦的。下面是我遇到的一些坑

首先我使用的是腾讯云香港轻量,linux版本是Ubuntu和Debian(考虑到我一台vps要过期 所以配置了两台) 这里说一嘴,个人建议要使用国外的vps(如阿里、腾讯的新加坡、香港节点)来做lab,因为考虑到git clone的速度,使用国外的机器可以带来可观的速度提升!配置方面1c1g就足够用了(虽然编译时间可能有点长)。

其实按照官方教程步骤一般来说都是会出现一点错误的。我这里就列举一下我所遇到的错误,并且通过google解决的方法

常见错误汇总

  1. apt-get没有更新

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

执行报错, 遇到的这个错误都是apt-get没有即时更新导致的,一般在底下它都会提醒你用apt-get upgrate进行更新, ,更新之后就行了

  1. 依赖库缺失 参考 fatsheep的blog 采用apt-get 方法(Ubuntu/Dedien) 安装好依赖库,注意一般情况下依赖库的名字可能存在差异所以这里需要Google一下,一般StackOverflow都已经有答案了 ,按着来就可以了(这点要强烈注意!!!!!因为它提醒缺失安装库的名字非常有可能和它真正依赖库的名字 可能是不一样的) 举个例子(为了举例,我特意开了一台vultr的Debian vps,亲测按照下面步骤是成功的)
这是在Debian系统下运行./configure所遇到的错误。它说缺失了pkg-config这个依赖库 这时你直接可以

sudo apt-get install pkg-config

就OK了,但是你再运行一次./config 又会遇到错误

此时你如果按上面的方法 apt-get会提醒无法找到glib、gthread这两个依赖库,这时你就需要Google一下了,一般情况下 StackOverflow已经存在这个答案直接复制粘贴就好了,这里的答案是 > apt-get install libglib2.0-dev

一般来说 还会有一个错误

这里的答案是

sudo apt-get install libpixman-1-dev

之后再运行./configure 就可以正常运行了 ,接下来就是正常按照官网的步骤 make&&sudo make install了 不再赘述

  1. make qemu 编译失败 一般除了1的错误之外没有什么可能编译失败了,除非是 riscv64-unknown-elf-gcc 没有安装好
凡是command not found 都是指这个gcc没有安装好的,这种情况下,Debian或者Ubuntu都可以直接利用 sudo apt install gcc-riscv64-unknown-elf(Ubuntu里可以 Dedian不行)进行修正(注:这时你的apt-get应该是最新版的才可以,也就是要进行第0步)

至此 环境应当是安装好了 按照tool里面的简介,你应该是可以成功查看这两个工具的版本了。

步骤2

这时你应该要git clone lab了,切换到官方教程的lab Utilities 按照步骤执行 至此你已经可以成功地开始愉快的开始写lab啦!

强烈建议按照schedule的步骤进行学习! 这个schedule详细的叙述了每一步要干什么 需要阅读什么,assignment是什么。强烈建议!!!!

有什么问题欢迎评论区提问或者私信 bingo

下面是我依次做完各个lab的时间点 lab one : 2021/1/ lab

0%