0x00 前言
闲着也是闲着,无意中看到MIT6.828 Operating System Engineering
好像是挺好的操作系统学习方式(我可不希望在学校学完操作系统后,啥也不会),所以就想试试。后来又看到这门课被改为了研究生课程,取而代之的本科课程MIT6.S081Operating System Engineering
好像更易上手,所以就有了这篇文章。第一天,我就先记载一下环境的搭建,以及中间遇到的问题的解决办法。
0x01 系统的配置
安装Ubuntu 18.04
这部分就不说了,可以自己网上自己找教程,不过一般都没什么困难,只要有镜像,然后直接利用Vmware安装就行了。
Nat下代理设置
今天我才发现原来ifconfig
(Net-tools)已经要被淘汰了,安装好的系统没有这个命令,上网才知道,取而代之的是ip
命令,ip addr show
即可查看自己的ip,关于这个命令的更多用法,可自行谷歌。
首先,在物理机(Windows10)下使用ipconfig
查看到自己的ip(nat 模式下可以使用固定的vm虚拟ip,这样就不会因为拨号改变了ip而重新配置)。然后,在Ubuntu的设置里设置一下代理就行了,ip就填物理机的ip,端口号,就填v2rayN的Http代理端口,一般是10809。这时候如果你能访问油管、谷歌等就成功了。
你也可以跳过这步,这里主要用于科学上网,至于你问我为什么不用桥接?因为这傻逼校园网要用Netkeeper拨号…为什么不下破解版,因为我懒
换源
首先安装一个vim
sudo apt update
sudo apt upgrade
sudo apt install vim
然后切换到/etc/apt
下,更换为清华源,具体步骤可以上网搜索
sudo vim ./sources.list
sudo apt update
sudo apt upgrade
upgrade的时候,可能会比较久,耐心一点
安装proxychains
因为有可能又时候curl或者wget的时候还是很不爽(比如github 443拒绝访问…之类的)
sudo apt install proxychains
安装好后,进行配置,代理ip还是物理机ip(可能下次开机会变,没研究过怎么固定,好像是arp绑定之类的),但是这里太难写的端口号是v2rayN的socks5端口,默认是10808
vim /etc/proxychains.conf
在最后一行,把原来的socks4 127.0.0.1 9050
改一下就行了,第一个是协议,第二个是ip,第三个是端口
安装ohmyzsh
因为ohmyzsh实在太好看了,所以总是仍不住先安装一下。
sudo install zsh
然后更换一下默认终端,目前我还不知道ohmyzsh在非root下是不是可以安装成功,所以下文都是基于root用户的,首选切换到root:su -
。
chsh -s /bin/zsh
然后照着ohmyzsh的官方文档,输入以下命令,因为默认不带curl,所以要先apt install curl
。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
这里可能会提示错误,就是上面说的443之类的,没办法,谁要你在墙内呢,使用proxychains可以解决
proxychains sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装成功后,进入ohmyzsh的配置文件换下主题
vim ~/.zshrc
ZSH_THEME="robbyrussell"
改成ZSH_THEME="agnoster"
,然后source ~/.zshrc
使其生效
这时候,可能会有一些乱码,我们要下载一下字体
su os #切换成普通用户
cd ~
git clone https://github.com/powerline/fonts.git
cd /fonts
./install.sh
sudo fc-cache -fv#刷新缓存
这里我犯了一个错误,在root用户下安装了字体,然后死活也不能找到对应的字体,还浪费挺多时间的
接着在终端的edit下的preferences下找到custom font把字体修改成Ubuntu Mono...Powerline...
的就行了,貌似只要是Powerline的字体就行。
至此,系统的基本配置就结束了,然后就要开始搭建环境和工具链了。
0x03 环境及工具链
这里我看歪了,居然没发现有个给Ubuntu的安装说明….然后用了其他系统的安装方法,不过介于这里解决了一些困难,可能对以后有参考意义,所以就也写一下。
看歪了
6.S081 / Fall 2020 (mit.edu)文档里有Ubuntu我都没看到…用了其他Linux发行版的安装方法
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
这里好像因为网络原因,有些库没下载下来,但是我当时也没太注意,就接着执行了下面的命令了
sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
报错了:
The following packages have unmet dependencies:
gsettings-desktop-schemas : Breaks: mutter (< 3.31.4) but 3.28.4+git20200505-0ubuntu18.04.2 is to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
这里update,然后upgrade又浪费好多时间,而且没有解决问题,最后apt install mutter
解决了问题
然后照着文档:
$ cd riscv-gnu-toolchain
$ ./configure --prefix=/usr/local
$ sudo make
结果make卡住了,这时候意识到,上面git clone确实出了问题(没办法,代理也有可能不稳),然后换了中国镜像
git clone --recursive https://github.com.cnpmjs.org/riscv/riscv-gnu-toolchain
--recursive
表示循环克隆,因为有一些子仓库
然后下到三分之一的时候发现自己看错文档了,这是其他发行版的安装方法…..我是伞兵
Ubuntu下正确方法
非常的简易方便
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
…结束了
后来发现虽然成功启动qemu,但是好像这个有点问题
riscv64-unknown-elf-gcc --version
结果是命令未找到,重新apt一下
sudo apt install gcc-riscv64-unknown-elf
好起来了呢
0x04 开始实验
Boot xv6
只是叫我们体验一下xv6,但是事实证明我还是个伞兵…
git clone git://g.csail.mit.edu/xv6-labs-2020
然后切到目录里去,这里我是个老伞兵加老眼瞎了,进去之后发现啥文件也没有,然后我就把文件删了,再下了一遍,还是没有….然后才去看文档,发现要切换branch
git checkout util
接着,启动qemu
make qemu
激动的♥,颤抖的手,成功了
Ctrl-p有类似于Linux的ps命令的效果,Ctrl-a x退出qemu(注意要先同时按下ctrl和a,松开后,再输入x)