操作系统实验课要学,但是自己本身水平太低,连linux都不怎么熟,配环境花了不少时间。所以想总结一下经验,记录一下,希望能帮助同样不怎么熟悉的人。
注意!!!!!
由于本菜鸟目前只做到Lab1的sleep,调试等比较深入的东西还未尝试过,所以仅能说
“能make qemu运行成功,并且能把自己编写的代码放到Makefile里运行成功”,其他的结果暂不明,请谨慎参考(如果真的有人参考的话)!
并且由于我的环境还同时是其他课程的环境,可能有些东西不是6.S081必须的,还请见谅。
课程网站
中文网站,里面有经大佬翻译后的课程介绍、课本章节、实验内容和实验解析等:
课程介绍 · 6.S081 All-In-One (dgs.zone)
课程本身的tools页面,在这里找所需的软件包:
准备
安装ubantu
这个方法很多,这里就不展开了。要注意的是,课程推荐使用ubantu20.04版本,低于或高于20.04的版本多多少少都会出现一些问题。我自己因为以前用的是22.04,顺势就用22了,同时也另外安装了20.04的搭建了一次。22.04在搭建环境的时候会和20.0有点不同,好在目前差别不大。
安装Vim、git、c++环境
sudo apt update
sudo apt install vim git build-essential
查看是否成功安装(即看是否能看到版本号)
git --version
gcc --version
g++ --version
配置git用户名和email
git config --global user.name "用户名"
git config --global user.email "用户email"
(可选)编写一个c++程序试试
找一个文件夹,用vim编写代码:
vim ./hello.cpp
在Vim中写:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, Ubantu!" <<endl;
return 0;
}
g++ -o hello hello.cpp
./hello
能看到输出结果就证明c环境和Vim没有问题了。
配置实验环境
首先,根据课程tools页面:6.S081 / Fall 2020 (mit.edu)
我们下载这些软件包:
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
下载完后,先看看版本号:
riscv64-unknown-elf-gcc --version
这一步就有可能会出现问题(我自己的两台虚拟机显示找不到riscv64-unknown-elf-gcc,而和我相同步骤的同学一次成功):如果提示“riscv64-unknown-elf-gcc没有/找不到”之类的,留意一下该报错下方是否有提示“但是你可以使用xxxxxxx命令来安装它”,有的话,按照提示安装、查看版本号即可。
值得一提的是,课程的示例版本是10.1,而我用22.04下的版本是10.2,用20.04下的版本是9.3,不知如何解决,也不知会不会影响实验。
然后是qemu
qemu-system-riscv64 --version
这里22.04和20.04也有区别。先来看20的:在我这里20.04版本安装的qemu是4.2版本的,落后了示例版本挺多,但最后并不影响make qemu,还是能启动环境的,所以20.04这里建议谨慎。
建议跟着官网做一遍:
sudo apt-get remove qemu-system-misc
sudo apt-get install qemu-system-misc=1:4.2-3ubuntu6
有趣的是,按照官网的步骤,20.04最后下的还是4.2.1的qemu,与示例的5.1.0不符。但是进去xv6代码文件夹,是能正常运行make qemu的。
这是20.04下的结果↑
然后是22.04版本:不用管了,反正肯定是不对的。。。由于22.04已经找不到“1:4.2-3ubantu6”这个版本了,所以上面第二条↑命令不用执行了。
需要手动编译:
参考:MIT6.S081 Ubuntu22.04 WSL2实验环境配置 - 知乎 (zhihu.com)
先获得指定版本的qemu源码:
注:按评论区大佬的说法,
qemu最好安装在/usr下,所以我最后把提取出的文件夹移动到了/usr/下了。你也可以直接在/usr下wget,这个我没有试过(其实我不知道qemu-5.1.0文件夹放在哪里是否有影响)
wget https://download.qemu.org/qemu-5.1.0.tar.xz
tar xf qemu-5.1.0.tar.xz
然后先安装几个要用到的包:
sudo apt install pkg-config libglib2.0-dev libpixman-1-dev
再进入qemu文件夹开始编译安装:
cd qemu-5.1.0
./configure --disable-kvm --disable-werror --prefix=/usr/ --target-list="riscv64-softmmu"
make
sudo make install
然后查看版本:
qemu-system-riscv64 --version
如果能看到版本号,那应该就成功了。
至于新建仓库clone实验代码那些在此就不再赘述了。进去xv6实验代码文件夹,切换util分支后 运行make qemu看是否正常运行
如果无法运行的话,很抱歉,可能我的某个步骤出现了问题,还请多多指教!
试运行第一个代码
首先来看看目录下的文件:
user/:我们编写的代码放在这里
Makefile:把自己编写的代码加入到这里,使其成为构建目标以供自己调用
编写代码(以sleep.c为例):
vim ./user/sleep.c
写完后把代码加入到Makefile中,注意格式,不要有多余的空格:
vim ./Makefile
运行
make qemu
然后在终端sleep 数字就能看到结果了
在终端按Ctrl+A,然后松开(两个都松开),快速按X就退出了。
由于我自己做得慢,后面的命令还没来得及试,所以后面可能会出问题。不过至此,环境是能启动了,算是一个小小的成功?
谢谢浏览,如有错误,还请多多指教!