笔者的github地址:
千里之行,始于足下。久闻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
- 然后通过下面的命令安装指定的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
解决方法:
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自带的终端还要方便点