题外话:其实我是一名非计算机专业的在校生,因为对软件开发和服务器开发很感兴趣,并且这方面的就业相对我来说资源比较充沛,所以就学习了mit6.828的实验

课程的学习直接跟着官网的schedule走就行,先看Lecture下提供的讲义和手册,然后完成相应的Lab,Lab共计10个,主要内容是在xv6基础上进行内核开发和扩展。但是官网的比较繁杂,并且不是那么容易懂,在做此次教程前我也查阅了大量资料,此次教程也同样适用于LInux。

环境搭建:

        在Mac OS下搭建首先要准备好Xcode和homebrew,我的系统版本是14.2.1,已经安装了xcode和homebrew。注意:在此之前gcc应该已被安装。并且安装了awk和sed(注:homebrew将会在第一步教如何安装)

brew install gcc
brew install gawk 
brew install gsed

一、准备工作

        那么下面我将会介绍一下如何安装xcode,不过在此之前我们先尝试安装homebrew。

终端输入-

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

        接着-

brew update

        测试有没有安装成功

brew -v

        出现如图所示则说明homebrew已经安装成功。接下来我们安装xcode

        Xcode可在APP store自行安装,安装完成之后我们运行以下代码配置Xcode command-line tools

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch

        执行sudo命令时,需要下输入macOS登录用户名的密码,且用户名具有管理员权限。
        执行xcodebuild -runFirstLaunch命令时,会要求先确认Xcode license。

        确认Xcode license

        第1次打开Xcode.app时,同意Xcode license agreement,或运行命令sudo xcodebuild -license时,选择同意(agree)。

到此Xcode安装完成

二、安装risc-v工具链

        在这里说一下为什么不选择去安装gmp,mpc,mpfr以及binutils,因为最新的Mac os系统对这些库的支持不太行,会出现安装不上,编译错误等一系列错误,建议M1以及以下的Mac使用,因为我已经实验过,这些库更适用于Linux,对最新Mac的兼容似乎不太好。并且risc- v工具链已经包含gcc,binutils,glibc等。OK,让我们进入正题。

        安装risc-v工具链的坑非常多,去官网下载超级慢,就算是翻墙安装的成功几率也很低。教程中的安装命令是brew install riscv-tools,在这里我们只需要使用riscv-gnu-toolchain,源码下载方式如下:

git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

但是直接clone可能会很慢,我已经将源码上传到baidu网盘,链接: https://pan.baidu.com/s/1Ugp7DqjzTF1CpwU2OOGrWA?pwd=zz66 提取码: zz66

然后configure配置产物路径,再编译,但是我觉得这种方法容易报错跑不过。所以我在这里换一种方法。

        直接安装(需要的时间会有一点长,大概30min)

brew tap riscv/riscv
brew install riscv-tools 

在这里环境变量默认就是/opt/homebrew/bin/,不需要额外添加。

至此risc安装成功,可输入查看是否已经安装

brew info riscv -pk

三、安装QEMU

qemu模拟处理器,模拟cpu执行编译

在这里我们也不clone了,直接安装

brew install qemu

ok,我们接着下一步。

四、xv6

从GitHub下载xv6源码

git clone https://github.com/mit-pdos/xv6-riscv-fall19.git

在根目录在编译,进入xv6的shell则表示搭建成功,

make
make qemu

注意:当你make时提示

❯ make
make: `kernel/kernel' is up to date.

说明kernel文件已经是最新的,不会在执行任何编译行为。

但是我这里make qemu出现了问题,我相信有人也会遇到一样的问题

根据里面的提示可以知道sh.c中的文件出现了递归调用错误:无限递归

在此我特地去查阅了大量资料,发现有两种方法可以解决

一是修改makefile:

CFLAGS = -Wall -Werror -O -fno-omit-frame-pointer -ggdb -Wno-error=infinite-recursion

二是sh.c文件中, runcmd函数上面设置特殊属性的宏:

__attribute__((noreturn))
 void
 runcmd(struct cmd *cmd)
 {

sh.c文件直接在系统中就可以搜索到

加入特殊属性的宏,这个递归问题即可得到解决。

再次输入make qemu如果成功进入qemu,则说明搭建成功。

至此环境搭建就完成了,当然在这个过程中会出现一系列未知问题,但相应的log里都会说明错误所在。每个人的环境都不同所以会出现不同的环境和报错,我们需要灵活一点,查看日志和报错信息,或者去qemu查看相应的文档。如果有错误请指出,主打的就是一个听劝,也欢迎私信交流有关xv6和Unix的相关知识。你一定会享受这个学习的过程。

一个菜鸡大学生,欢迎关注。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐