Horbynz hub

⌈xv6-fall2021⌋ MIT 6.828 环境配置

Word count: 2.3kReading time: 9 min
2022/02/25

INTRO

相传上古年代有三大屠龙技:编译原理、操作系统和图形学。两年前的 20 年学习 kernel 有幸接触到鼎鼎大名的 MIT 6.828,可惜一直都是从入门到放弃从放弃到入门,期间也接触过很多相关教材、书籍,没能实现 kernel 一直是我心里最大的遗憾。现在得以静下心来,虽然不知道能不能坚持下来,但我会尽力的。

PREPARATION

如今 MIT 6.828 已更名为 MIT 6.S081,今年的 Fall 要等到九月,所以目前以 Fall-2021 为准

如图所示,我的 learning roadmap 由箭头指出:

  • 我会先阅读 Preparationxv6 handout 相关 chapter
  • 然后阅读 LEC x,当然,这是有其配套录屏的,但无奈我英语水平有限,所以搬运国内大神的文字翻译版取代:Fall-2020-文字翻译版 lec
  • 最后动手做 LAB x

值得一提的是红框框圈出部分,ab 指的是任课教授 Adam BelayTAs 指的是助教

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,首先要做的是更换包管理器的源,否则 aptapt-get 速度会很慢,参考Ubuntu20.04软件源更换,步骤略

更换源后记得更新

1
2
3
su                  # 切换至 root
apt-get update # 不是真的更新,只是列出包更新索引
apt-get upgrade # 真正的更新

git 访问速度优化

Linux 开发最离不开就是 git,但 github 服务器在国外,访问速度很慢,经常 git clonegit 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Github Speed
github.com
github.global.ssl.fastly.net

# Github Image
gist.github.com
assets-cdn.github.com
raw.githubusercontent.com
gist.githubusercontent.com
cloud.githubusercontent.com
camo.githubusercontent.com
avatars0.githubusercontent.com
avatars1.githubusercontent.com
avatars2.githubusercontent.com
avatars3.githubusercontent.com
avatars4.githubusercontent.com
avatars5.githubusercontent.com
avatars6.githubusercontent.com
avatars7.githubusercontent.com
avatars8.githubusercontent.com
# GitHub End

需要注意的是,有些域名可能对应多个 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Github speed
140.82.113.4 github.com
199.232.69.194 github.global.ssl.fastly.net

# Github images
140.82.112.3 gist.github.com
185.199.111.153 assets-cdn.github.com
185.199.108.133 raw.githubusercontent.com
185.199.110.133 gist.githubusercontent.com
185.199.110.133 cloud.githubusercontent.com
185.199.110.133 camo.githubusercontent.com
185.199.110.133 avatars0.githubusercontent.com
185.199.110.133 avatars1.githubusercontent.com
185.199.110.133 avatars2.githubusercontent.com
185.199.110.133 avatars3.githubusercontent.com
185.199.110.133 avatars4.githubusercontent.com
185.199.110.133 avatars5.githubusercontent.com
185.199.110.133 avatars6.githubusercontent.com
185.199.110.133 avatars7.githubusercontent.com
185.199.110.133 avatars8.githubusercontent.com
# Github end

为单调的 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# updated at 2022-02-25
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
local user_host="%B%(!.%{$fg[red]%}.%{$fg[green]%})%n@%m%{$reset_color%} "
local user_symbol='%(!.#.$)'
local current_dir="%B%{$fg[blue]%}%~ %{$reset_color%}"

local vcs_branch='$(git_prompt_info)$(hg_prompt_info)'
local rvm_ruby='$(ruby_prompt_info)'
local venv_prompt='$(virtualenv_prompt_info)'

ZSH_THEME_RVM_PROMPT_OPTIONS="i v g"

# ∭ ㏑x²dx ﹦ ? hoRbyn™ (这是我修改的内容)
PROMPT="╭─${user_host}${current_dir}${rvm_ruby}${vcs_branch}${venv_prompt}
╰─%B${user_symbol} %{$terminfo[bold]$fg[yellow]%}∭ ㏑x²dx ﹦%{$terminfo[blink]$fg[white]%}? %b"
RPROMPT="%B${return_code}%{$fg[cyan]%}(σ`д′)σ %b"

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[yellow]%}"

ZSH_THEME_HG_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX"
ZSH_THEME_HG_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX"
ZSH_THEME_HG_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY"
ZSH_THEME_HG_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN"

ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}‹"
ZSH_THEME_RUBY_PROMPT_SUFFIX="› %{$reset_color%}"

ZSH_THEME_VIRTUAL_ENV_PROMPT_PREFIX="%{$fg[green]%}‹"
ZSH_THEME_VIRTUAL_ENV_PROMPT_SUFFIX="› %{$reset_color%}"
ZSH_THEME_VIRTUALENV_PREFIX="$ZSH_THEME_VIRTUAL_ENV_PROMPT_PREFIX"
ZSH_THEME_VIRTUALENV_SUFFIX="$ZSH_THEME_VIRTUAL_ENV_PROMPT_SUFFIX"

首先键入 vi ~/.zshrc,找到 ZSH_THEME 项改为 bira

然后键入 vi ~/.oh-my-zsh/themes/bira.zsh-theme 全部更换为上面配置

最后键入 source ~/.zshrc 更新配置文件,主题效果如下

最后一步加入几个常用插件,比如快速跳转路径(wd)(已内置)、检查命令正误(zsh-syntax-highlighting)、常用命令补全(zsh-autosuggestions)。现在安装后两者:

1
2
3
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions

安装完后也是要修改配置,输入 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)

至此,环境配置完成,下课


CATALOG
  1. 1. INTRO
  2. 2. PREPARATION
  3. 3. TOOLCHAINS
    1. 3.1. 安装 WSL
    2. 3.2. 新镜像的配置
    3. 3.3. git 访问速度优化
    4. 3.4. 为单调的 bash 添加一些色彩(可选)
    5. 3.5. 配置 xv6 环境