MIT6.828/6.S081 Mac OS下搭建xv6和risc-v

这篇具有很好参考价值的文章主要介绍了MIT6.828/6.S081 Mac OS下搭建xv6和risc-v。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

MIT6.828/6.S081 Mac OS下搭建xv6和risc-v,risc-v,macos,编辑器        出现如图所示则说明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出现了问题,我相信有人也会遇到一样的问题

MIT6.828/6.S081 Mac OS下搭建xv6和risc-v,risc-v,macos,编辑器

根据里面的提示可以知道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文件直接在系统中就可以搜索到

MIT6.828/6.S081 Mac OS下搭建xv6和risc-v,risc-v,macos,编辑器

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

MIT6.828/6.S081 Mac OS下搭建xv6和risc-v,risc-v,macos,编辑器

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

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

一个菜鸡大学生,欢迎关注。文章来源地址https://www.toymoban.com/news/detail-837409.html

到了这里,关于MIT6.828/6.S081 Mac OS下搭建xv6和risc-v的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MIT6.S081 - Lecture3: OS Organization and System Calls

    使用操作系统的主要原因是为了实现 CPU 多进程分时复用以及内存隔离 如果没有操作系统,应用程序会直接与硬件进行交互,这时应用程序会直接使用 CPU,比如假设只有一个 CPU 核,一个应用程序在这个 CPU 核上运行,但是同时其他程序也需要运行,因为没有操作系统来帮助

    2024年04月22日
    浏览(28)
  • mit6.828 - lab5笔记(上)

    unix的文件系统相关知识 unix将可用的磁盘空间划分为两种主要类型的区域: inode区域 和 数据区域 。 unix为每个文件分配一个inode,其中保存文件的 关键元数据 ,如文件的stat属性和指向文件数据块的指针。 数据区域中的空间会被分成大小相同的数据块(就像内存管理中的分

    2024年02月02日
    浏览(24)
  • MIT6.S081学习笔记--lec 1

    abstract H/W 抽象化硬件 multiplex 多路复用 isolation 隔离性 sharing 共享(进程通信,数据共享) security / access control 安全性/权限控制 performance 性能/内核开销 range of applications 多应用场景 操作系统应该提供的功能:1. 多进程支持 2. 进程间隔离 3. 受控制的进程间通信 xv6 :一种在本

    2024年02月16日
    浏览(29)
  • MIT6.S081 - Lab2: system calls

    step1:系统调用声明 user/user.h :系统调用函数(如 int fork(void) ) step2:ecall 进入内核态 user/usys.S (该文件由 user/usys.pl 生成,后续添加函数可以在这里添加):执行如下命令 将系统调用的编号(在 kernel/syscall.h 中定义)写入 a7 寄存器 从 ecall 进入中断处理函数 step3:保存数据并

    2024年04月23日
    浏览(34)
  • MIT6.S081 - Lecture1: Introduction and Examples

    理解操作系统的设计和实现 通过 XV6 操作系统动手实验,可以扩展或改进操作系统 Abstraction: 对硬件进行抽象 Multiplex: 在多个应用程序之间共用硬件资源 Isolation: 隔离性,程序出现故障时,不同程序之间不能相互干扰 Sharing: 实现共享,如数据交互或协同完成任务 Securi

    2024年04月15日
    浏览(40)
  • xv6(RISC-V)操作系统源码分析第二节——操作系统组织

    一个操作系统至少需要满足以下三个要求: 多路复用 进程隔离 进程通信 硬件CPU的数量有限,且往往少于同时存在的进程数量。而操作系统需要支持进程的并发执行,所以操作系统应该能使多个进程分时共享计算机的资源。 一个进程的运行,应当具有一定的独立性,这个独

    2024年02月03日
    浏览(35)
  • 6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6

    本来往年这里还有个Lazy Allocation的,今年不知道为啥直接给跳过去了。. 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 官网链接 xv6手册链接,这个挺重要的,建议做lab之前最好读一读。 xv6手册中文版,这是几位先辈们的辛勤奉献来的呀!

    2024年02月14日
    浏览(26)
  • xv6 调试技巧

    url: https://pdos.csail.mit.edu/6.S081/2020/labs/guidance.html 参考链接详细讲了 xv6 调试技巧,认真研读 下面总结重点: 1.运行 debug 模式的方式: 窗口1执行 make qemu-gdb 窗口2执行 gdb-multiarch 如果你想观看内核文件的汇编版本,请查找 kernel.asm If the kernel panics, it will print an error message listin

    2024年02月07日
    浏览(27)
  • 1664_MIT 6.828 JOS页管理的相关行为实现

             全部学习汇总:GreyZhang/g_unix: some basic learning about unix operating system. (github.com)          这一次,看几个存储管理的辅助接口的实现。          这个接口给出来的提示信息还是很多的,至少从这里能够收集到这个接口实现要用到的一些辅助转换函数以及基本

    2023年04月08日
    浏览(24)
  • MIT6.024学习笔记(三)——图论(2)

    科学是使人变得勇敢的最好途径。——布鲁诺 在通信网络中,分为主机和路由器两部分,我们将主机分为输入端和输出端,则构成的图中有三部分:路由器、输入端、输出端,构成了一个有向图。那么,一个N*N规模的通信网络,应该怎么构成才能达到性能最佳呢(假设N总是

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包