沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

MIT6.S081之day1环境的配置

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

激动的♥,颤抖的手,成功了

image-20210406214313864

Ctrl-p有类似于Linux的ps命令的效果,Ctrl-a x退出qemu(注意要先同时按下ctrl和a,松开后,再输入x)