INTRO
相传上古年代有三大屠龙技:编译原理、操作系统和图形学。两年前的 20 年学习 kernel 有幸接触到鼎鼎大名的 MIT 6.828,可惜一直都是从入门到放弃从放弃到入门,期间也接触过很多相关教材、书籍,没能实现 kernel 一直是我心里最大的遗憾。现在得以静下心来,虽然不知道能不能坚持下来,但我会尽力的。
PREPARATION
如今 MIT 6.828 已更名为 MIT 6.S081,今年的 Fall 要等到九月,所以目前以 Fall-2021 为准
如图所示,我的 learning roadmap 由箭头指出:
- 我会先阅读 Preparation 的 xv6 handout 相关 chapter
- 然后阅读 LEC x,当然,这是有其配套录屏的,但无奈我英语水平有限,所以搬运国内大神的文字翻译版取代:Fall-2020-文字翻译版 lec
- 最后动手做 LAB x
值得一提的是红框框圈出部分,ab 指的是任课教授 Adam Belay,TAs 指的是助教
TOOLCHAINS
在真正课程开始之前,让我们先来配置环境。作为一个忠实的 WSL 用户,我是肯定会选择 Linux 环境来配置的(当然也可以选择虚拟机,但我觉得太臃肿不太喜欢)。其实配环境我从虚拟机 + 远程终端,到 WSL + VSC 都尝试过,可以说反映了我一路以来的选择过程。原 blog 记载于博客园 OS实践-1: Windows 11 配置 WSL,但当时模拟器选择的是 Bochs,而在 xv6 里使用的是 qemu,所以现在重新记录一次 Fall-2021-xv6 的环境配置
安装 WSL
打开 Microsoft Store 搜索 Ubuntu,建议版本选 20.x。如果 Microsoft Store 打不开可以自行百度。另一方面,我以前安装是有长期维护版 LTS 的,然而这次居然没了
下载完后打开,会弹出一个控制台窗口让你等待安装,之后让你输入用户名,此时是普通用户
后面的 OS dev 也可以在这个窗口完成,但我比较喜欢用 VSC,所以我选择用 VSC 打开 WSL
打开 Visual Code,按下 Ctrl J,选择 Terminal,选择刚才安装的 Ubuntu(这一步忘记截图了,所以用以前 blog 的图取代)
此时先改改 root 用户的密码,因为默认密码是什么我也不知道
新镜像的配置
现在我们总算进入到 ubuntu 了,但通常我们拿到一个新 img,首先要做的是更换包管理器的源,否则 apt、apt-get 速度会很慢,参考Ubuntu20.04软件源更换,步骤略
更换源后记得更新
1 | su # 切换至 root |
git 访问速度优化
Linux 开发最离不开就是 git,但 github 服务器在国外,访问速度很慢,经常 git clone
和 git push
掉线,所以要搞点小动作:主要有代理和修改 hosts 两种方法
第一种方法可以参考 git clone一个github上的仓库,太慢,经常连接失败,但是github官网流畅访问,为什么?,主要注意设代理不要 git config --global
这样设全局,因为 gitee 和 coding 也可以托管 git 仓库,设全局会使所有流量都走代理,那国内流量就变慢了。但代理有时候也挺麻烦的,如果平时多以 ssh 作连接,那要给代理设 sock5 端口;如果直接用 http/https 作连接,git push
可能要打密码(当前 2022 访问 github 使用的是令牌 token,比较麻烦)。有时候更是会引入另外的问题,比如即使使用代理也会报错 connection refused
,所以我主要介绍第二种方法
第二种方法参考 GitHub中国加速访问 和 解决github图片不显示的问题。简单来说就是在 hosts 文件给诸如 github.com 这些域名显式添加解析地址(resolved addr),解析地址可通过 ipaddress 获得,以下地址都需要获得(当然在后文会给出解析地址)
1 | Github Speed |
需要注意的是,有些域名可能对应多个 ip,此时可以 ping 每个 ip 选择延迟最小的那个保留,如 assets-cdn.github.com
这个地址对应着 4 个 ip
另外也要注意到,这种方法也有缺点,就是需要经常更新,网上很多改 hosts 相关教程,如果是一两年前那就不要直接复制而是自己查询然后填入
最后再多说一句,Windows 的 hosts 文件在 C:\Windows\System32\drivers\etc\hosts
,WSL 的 hosts 文件在 /etc/hosts
,两者不是同一个文件。只是说 WSL 刚安装是的确是会把 Windows 的 hosts 拷贝一份,但是之后就不一样了。
最后这是 2022-02 查询完 ipaddr 的解析地址
1 | Github speed |
为单调的 bash 添加一些色彩(可选)
这个 subject 主要是我个人喜好,如果不喜欢搞这么多花里胡哨的东西可以跳过这项。效果如下,可以看到 prompt 发生了变化,这得益于 zsh + oh-my-zsh 配置
首先安装 zsh,apt install zsh
然后安装 oh-my-zsh,参考 oh-my-zsh 仓库,但这里直接用 README 的方法无论是 curl 还是 wget 都会报错 SSL Connection Error,我大概搜索了下发现是 SSL 证书的验证问题,你可以选择 git config --global sslVerify false
来绕过证书验证。但我这里使用 issue 里提供的 gitee 仓库进行安装,具体参考 unable to establish SSL connection,最后输入以下命令:
1 | sh -c "$(wget -O- https://gitee.com/mcornella/ohmyzsh/raw/master/tools/install.sh)" |
值得一提的是,上述命令执行中,如果你使用了代理或代理设置不当,很可能会报错 GnuTLS recv error (-110): The TLS connection was non-properly terminated
,所以如果出现 TLS 相关问题,请检查自己的代理
最后当出现以下内容时即配置 oh-my-zsh 成功
zsh 主题可以参考 ohmyzsh · themes 更改,此处附上本人常用配置(其实就是官方 bira 主题,我改了 prompt 而已)
1 | updated at 2022-02-25 |
首先键入 vi ~/.zshrc
,找到 ZSH_THEME
项改为 bira
然后键入 vi ~/.oh-my-zsh/themes/bira.zsh-theme
全部更换为上面配置
最后键入 source ~/.zshrc
更新配置文件,主题效果如下
最后一步加入几个常用插件,比如快速跳转路径(wd)(已内置)、检查命令正误(zsh-syntax-highlighting)、常用命令补全(zsh-autosuggestions)。现在安装后两者:
1 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting |
安装完后也是要修改配置,输入 vi ~/.zshrc
,找到 plugins=(git)
打头的这行
别忘了 source ~/.zshrc
,效果如下
以上是我本人习惯的配置环境,稍微绕了远路,现在我们回头来完成 xv6 的 Toolchains
配置 xv6 环境
上面整个页面我们只需要关注这行,键入命令等待安装即可
安装完成后,选择一个靓仔一点的路径,比如我选择了 D:\xxx
,然后 git clone
整个 xv6 仓库下来
1 | git clone https://github.com/mit-pdos/xv6-riscv.git ./xv6/ |
clone 完后 cd xv6
可以发现存在以下文件
最后回到 xv6-toolchains 页面,关注最底下一栏,启动 xv6
1 | make qemu |
显示以下内容即环境配置成功(Win 环境按 “Ctrl + A”,松开然后按 “X” 可以退出 xv6)
至此,环境配置完成,下课