题外话:其实我是一名非计算机专业的在校生,因为对软件开发和服务器开发很感兴趣,并且这方面的就业相对我来说资源比较充沛,所以就学习了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的相关知识。你一定会享受这个学习的过程。文章来源:https://www.toymoban.com/news/detail-837409.html
一个菜鸡大学生,欢迎关注。文章来源地址https://www.toymoban.com/news/detail-837409.html
到了这里,关于MIT6.828/6.S081 Mac OS下搭建xv6和risc-v的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!