不吹不黑,WSL才是yyds,在云服务器上CentOs8搞了半天,各种源码编译,不如WSL搭配Ubuntu16.04半小时轻松搞定,但也有一些坑,这篇算是记录帖,所以最好看完再开始弄。
1. 启用windows的WSL。
“控制面板”->“程序”->“启用或关闭Windows功能”。
√选“适用于Linux的Windows子系统”和“虚拟机平台”,后者是WSL2必须的,因此这里直接先√上,然后重启即可。
2. 安装Ubuntu16.04 LTS
打开Windows PowerShell,
wsl -l -o
查看可安装的有效distribution
wsl --install -d Ubuntu-16.04
安装Ubuntu-16.04
安装完成后会弹出一个界面,输入UNIX用户名、密码之类的,需要注意全新的Ubuntu系统需要sudo passwd
激活root并设置密码(跟一开始让你输入的密码不是一个东西,但方便记忆你可以设置成一样的),设置完成后就可以su
转换成root用户。
这个时候理论上就已经可以在Ubuntu上愉快地玩耍了,但它自带的shell实在太丑了,非常推荐windows terminal,在powershell中使用”wsl”命令就能直接进登录Ubuntu,或者直接下拉点击,非常好用
3. 安装qume以及必要依赖
安装之前,建议先把apt-get换成国内源,教程随便找就行
sudo apt-get install qume
安装qume
sudo apt-get install -y build-essential gdb
sudo apt-get install gcc-multilib
安装完qume之后可以看看/usr/bin里面有没有qume-system-xxx一大堆可执行文件,有的话就安装成功了。
4. 下载和编译xv6
git clone git://github.com/mit-pdos/xv6-public.git && cd xv6-public
先从github克隆下来并进入该目录
git checkout -b xv6-rev7 xv6-rev7
这个命令是创建本地分支并关联远程同名分支xv6-rev7,学校实验需要使用rev7
vim Makefile
修改Makefile文件,指定QEMU路径QEMU = qemu-system-x86_64
make
直接编译即可!
5. 升级WSL2
syntax error: word unexpected (expecting “)”)
没想到功败垂成,在编译的时候出现这样的报错,是不是很像在写代码的时候IDE报的语法错误,定位到Makefile的一百多行,然后就进去瞧了瞧,然而看不出什么所以然,只好去百度,大概有几个博客都是说是编译器的问题,跟Makefile指定的不一致,我的理解是就比如py2和py3有语法上的区别,同样的代码会出现编译失败,也就是兼容性问题,但也没有看到一个统一的解决方案。
然后我就突然想到会不会是WSL1的问题,而WSL2是真正的Linux内核,升级试试看。
比较 WSL 1 和 WSL 2 | Microsoft Docs
旧版 WSL 的手动安装步骤 | Microsoft Docs
参照以上教程基本没问题
wsl --set-version Ubuntu-16.04 2
将Ubuntu的version升级成2
wsl -l -v
查看当前的Distribution并显示详细信息,确认升级成功。
最后运行WSL2,进入/xv6-public目录下,开make
!理论上是再不会出现error的。
6. 运行xv6
运行非常简单make qemu-nox
即可,看到下图基本就意味着成功了,可以尝试一些ls,echo之类的基础命令。
值得一提的是,要怎么退出?所有人都是说ctrl+a然后x退出qemu,但真的不会很容易让人误解成要一起按么(麻了)。
正确的操作是按下ctrl+a,然后释放,接着按x键就能退出qemu,而不是需要按下3个键。