Mit6.s081环境配置踩坑之旅WSL2+VScode

笔者的github地址:

SnowLegend-star/6.s081: In the annals of CS, there looms a legendary peak, known far and wide. The moment to conquer it is upon us. (github.com)

千里之行,始于足下。久闻6.s081大名,于是寒假尝试完成几个lab。在折腾了几天的环境配置后,依然是不得要领,遂作罢。近日尝试了另一种环境,终有所得,欣然献于诸君。

寒假的时候我尝试的是用Visual Studio2019+VMWare Workstation的Ubuntu20.04做实验,然后各种出毛病。这里劝想进行实验的同学先熟悉下linux的各种操作命令,如cd、ls、rmdir、vim等等,不然在进行一些进步的文件夹切换删除会感觉不得要领。我最开始就是直接上手的,结果切换文件啥的搞得头都大了。然后看了看兄弟连的linux课程,对一些常用操作就明了了很多。

用VS 2019+VMWare最大的问题就是内存,由于我电脑的内存只有8G,导致同时打开VS和VMware会超级卡,内存占用直飚90%。更别说我还要打开浏览器查资料什么的,搞得程序经常崩溃。其次,如果不想用Ubuntu远程连接VS,打算直接在Ubuntu里面下载个编译器,我也是不推荐的。还是那个问题,很吃内存,一般电脑带不动。而且虚拟机跑软件一般都会停卡的吧,好像内存大也会有这种问题。最后,远程连接好了之后你已经可以用VS给xv6-labs-202x添加新文件了。很遗憾,这时候最让人头大的地方来了,你会发现在VS上编译自己写的.c文件压根儿跑步起来,不是说头文件不存在就是编译出问题。给你们看看我当时遇到的问题

看着编译没啥问题,运行的时候就知道小毛病在埋伏你呢。

 

 

上面Ubuntu环境下出现的问题我后来都解决了,但是VS编译运行的问题实在是让我不得其解。当然,压死骆驼的最后一根稻草并不是上面这些问题。而是我时隔一段时间重新登录Ubuntu的时候显示“password authentication didn't work”,进入BIOS重置密码依然是不行,最后只得放弃。由于在折腾VS+VMware配置上浪费了太多时间,导致当时有许多人都建议用WSL2+VSCode我都没听进去。

现在看来,去TMD沉没陈本,及时止损才是王道,诸君切记!

总而言之,如果你电脑的内存够大,且打算挑战难度更高的跨平台连接编译,可以试试VS+VMWare。

言归正传,下面我正式介绍WSL2+Ubuntu 20.04的配置

声明:务必装Ubuntu 20.04!!

          务必装Ubuntu 20.04!!

          务必装Ubuntu 20.04!!

1.1 WSL2安装条件

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定” 。

1.2 启用所需Windows功能

安装WSL2需要启用windows功能中的虚拟机平台适用于Linux的Windows子系统
可以直接使用Windows+R快捷键,在打开的「运行」窗口中直接执行optionalfeatures打开「Windows 功能」,或者在控制面板中打开「Windows 功能」启用需要的功能,然后重新启动

勾选“虚拟机平台”和“适用于Linux的Windows子系统”

1.3 设置默认WSL版本

可以通过PowerShell或者cmd使用下面的命令设置默认版本

     wsl --set-default-version <Version>

若要将默认版本设置为 WSL1 或 WSL2,请将<Version>替换为数字 1 或 2,表示对于安装新的 Linux 发行版,你希望默认使用哪个版本的 WSL,例如:

2.1 安装Ubuntu 20.04

 直接在Microsoft Store搜就行,这里最好装20.04。我昏头装成了22.04版本的,导致后面安装qemu的时候有点麻烦。

2.1.1 如果Microsoft Store安装卡住了,可以通过下面的命令查看可安装的Linux发行版

     wsl --list --online

  1. 然后通过下面的命令安装指定的Linux发行版
    wsl --install -d <Distribution Name>

安装指定的 Linux 发行版,请将 <Distribution Name> 替换为你首选的 Linux 发行版的名称(例如 Ubuntu-20.04)

 Microsoft Store如果出问题感觉是正常现象哈哈哈,我一开始也是有这个问题。不过我没用第二种方法,过了几天重新安装就可以了。

2.2 打开Linux发行版

我们可以通过下面的命令查看已经安装的Linux发行版

     wsl -l

可以在所有应用里面找到Ubuntu,然后打开,可以将其固定任务栏或开始屏幕以方便快捷启动

初次打开Linux发行版时,需要设置用户名和密码,输入密码时,屏幕上不会显示任何内容,为盲目键入。

如果输入用户名出现

“adduser: Please enter a username matching the regular expression configured”

说明你输入的用户名格式有问题,首字母不能大写

都弄好之后,也可以直接操作Ubuntu里面的文件。点击linux这只小企鹅就可以。

MIT6.S081 Ubuntu22.04 WSL2实验环境配置 - 知乎 (zhihu.com)

3.1 开始换源和获取实验代码什么的

安装好WSL之后,首先换源!换源!还是换源!要不然你会发现一会儿下载东西的时候速度异常之慢。当然速度慢还不是最恶心的,让人头大的是会直接显示无法连接到XXXX网站。tnnd,第二次装就是被换源问题坑害了。

这里强烈推荐中科大源,反正在我这里中科大源实在是稳定且快。我也尝试过阿里源和清华源,都会有网址连接失败的问题。下面细说换源:

sudo vim /etc/apt/sources.list

 可能你会在别的地方看见他们用的是“sudo gedit /etc/apt/sources.list”,但是两者是一回事。我用这条命令的时候还提示我gedit命令没找到,得自己下这个安装包,而且下完安装包后还是报错了。为了方便,我推荐直接用vim命令得了。

进入编辑界面后先按“gg”定位到所有行的开头,然后按“dG”删掉所有内容。接下来按键盘上的“INSERT”键进行编辑,把中科大的源复制过去

deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

复制完了之后按“ESC”按键退出编辑模式。然后按下“:wq!”进行保存退出。 

更新系统:

sudo apt update
sudo apt upgrade

配置XV6系统环境

官方环境安装文档

实验均是在RISCV上运行的XV6环境上执行,由于缺少硬件支持,该课程使用了QEMU模拟了RISCV处理器,在RISCV处理器中运行XV6操作系统

3.2 安装QEMU等必备包

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 (GCC) 10.1.0
...

$ qemu-system-riscv64 --version
QEMU emulator version 5.1.0

你会发现第二条命名是没什么问题的,但是第一条命令输入完之后会提示你 Command 'riscv64-unknown-elf-gcc' not found, but can be installed with: sudo apt install riscv64-unknown-elf-gcc

按照它给的提示来安装就ok了。

安装XV6

通过Git将XV6完整代码或课程代码克隆到本地,二选一即可。

XV6完整源码:

git clone git://github.com/mit-pdos/xv6-riscv.git

XV6实验源码:

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

3.3 编译

进入克隆的文件夹

cd xv6-labs-2020/

切换到第一个实验分支

git checkout util

编译xv6并开启模拟器

make qemu

看到如下内容即表示成功:

 

最后,按下ctrl+a松开后再按x退出qemu

当然,如果你和我一样也装成了22.04,就会卡在下面这个界面

 

这是因为Ubuntu系统的版本过高,默认安装的qemu模拟器与xv6内核不兼容,导致编译不成功,根据官网提示,需要qemu的版本为5.1,因此执行如下命令首先对新版本的qemu进行移除:

sudo apt-get remove qemu-system-misc

根据官网提示执行如下命令安装旧版本qemu

sudo apt-get install qemu-system-misc=1:4.2-3ubuntu6

但是ubuntu22.04已经找不到该版本,运行上述会出现如下结果:

找不到对应包

因此,需要手动下载安装包、解压并安装相应的5.1qemu版本。

检索并提取 QEMU 5.1.0 的源代码:

wget https://download.qemu.org/qemu-5.1.0.tar.xz
tar xf qemu-5.1.0.tar.xz

编译QEMU:RISCV64-softmmu:

cd qemu-5.1.0
./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"

(上条命令需要依赖libglib2.0-dev和 libpixman-1-dev这两个包)

如果上述命名出现问题,不要惊慌,按照下面的来:

ERROR: pkg-config binary ‘pkg-config’ not found

解决方法:

sudo apt-get install pkg-config

ERROR: glib-2.48 gthread-2.0 is required to compile QEMU

解决方法:

sudo apt-get install  libglib2.0-dev 

ERROR: pixman >= 0.21.8 not present. Please install the pixman devel package

解决方法:

sudo apt-get install libpixman-1-dev

 处理完上述报错后,可以再次执行

./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"

 我们继续:

make 
sudo make install 

安装完毕之后,重新进入XV6对应目录中,再次执行make qemu即可。

如图,编译成功,执行ls命令:

成功

4 连接VSCode

下载完VSCode后,下载个WSL插件。可能别的地方要下remote-WSL,但是新版本的VSCode已经没有这个插件了,下载WSL这个插件就可以了。

下载完这个插件之后,我们用Ubuntu来打开VSCode,用下面这个命令

code .

它就会自动打开VScode了。

写完第一个sleep()函数后,如果你想测试成绩,一般还会出问题。如果你没现问题,请跳过。

 

我们打开相应文件夹,会发现没有evn这个文件夹,python这个文件直接就在bin文件夹里面了。

 在这里我们设置一个软连接

sudo ln -s /usr/bin/python3 /usr/bin/python

再用测试成绩就可以了

./grade-lab-util sleep

 测试成绩记得退出make qemu界面,在xv6-labs-2020文件夹下测试就好。

最后提一句,我们不是非要用Ubuntu的终端

 用VSCode自带的终端还要方便点

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值