目录

xv6 macOS 运行环境

前言

oh,技术真的浮躁,也真的没用~~

来看个有意思的例子:

fastjson2 FASTJSON2是FASTJSON项目的重要升级,目标是为 下一个十年 提供一个高性能的JSON库

第一时间,我就笑喷了!
先不说 fastjson 漏洞百出,就算 fastjson2 真的很优秀,也没必要···这样吧···国家也才五年一个计划···

这体现出啥呢?会吹才会赢!

不会吹怎么办?不怎么办,躺平!

老实干活,研究点自己喜欢的东西,也不需要研究出啥,就当取悦自己,还有就是锻炼身体啊!同志们!

或者可以选择润出国去,可是万一老外也在卷···

所以!再次盯上了 xv6,学习一下操作系统吧!

环境准备

我的是 macOS 12.4 版本

指引文档是 https://pdos.csail.mit.edu/6.828/2020/tools.html

1.安装 Xcode developer tools 和 Homebrew

这个因为之前已经安装了,如果没有安装,按照文档执行相应命令应该没问题

2.安装 risc-v compile toolchain

一开始害怕版本问题,去 git clone 了对应的仓库,但是图中有一个子 module 一直 pull 不下来,放弃。

使用文档中的命令:

$ brew tap riscv/riscv
$ brew install riscv-tools

等待比较久,最终我这边目前安装的版本是 11.1.0,后续似乎没有什么版本兼容问题,gdb 也可以启动

3.安装 qemu 5.1.0 并手动编译

这个踩了一个坑,通过 brew install qemu 安装的是一个高版本 qemu

这个版本的 qemu 在运行 xv6 时,会卡主不动!!!

最终去官网下载了一个 5.1.0 版本,手动编译即可!

qemu 各版本源码地址:https://download.qemu.org/

不得不说这个东西的作者,同时也是 QuickJS 和 FFmpeg 的作者,Fabrice Bellard,我只能说天才就是天才,热爱就是热爱!一个人可以顶100个人!

感觉他做的东西,才叫做技术

吹捧完毕

4.下载 xv6 源码

https://pdos.csail.mit.edu/6.828/2020/tools.html

可以从这里的 Labs tab 中跟着学习下载,同时 xv6 tab 下也有一个理论知识的 pdf

比如,进入 Lab: Xv6 and Unix utilities

$ git clone git://g.csail.mit.edu/xv6-labs-2020
Cloning into 'xv6-labs-2020'...
...
$ cd xv6-labs-2020
$ git checkout util
Branch 'util' set up to track remote branch 'util' from 'origin'.
Switched to a new branch 'util'

记得切分支之后运行

make qemu

最终输出一长串 log 后,出现 init: starting sh,那么就 OK 了!

/img/in-post/xv6.png

5.如何 Debug

打开两个 terminal,都进入 xv6 源码目录

其中一个 terminal 输入

make qemu-gdb

查看输出,会有一个端口号输出,如 tcp::25501

/img/in-post/xv6-qemu-gdb.jpg

在另一个 terminal 输入

riscv64-unknown-elf-gdb kernel/kernel # 表示调试某个可执行文件

之后会有一堆输出,进入 gdb 调试,terminal 开头也会有 (gdb) 字样,这时输入,就可以开始调试了!

/img/in-post/xv6-gdb-2.jpg

target remote localhost:25501 

具体的 gdb 相关命令,我也不是很熟

可以输入

b exec # 表示的是在 exec 出打断点,b = break

之后输入

c # continue,就是运行到断点出

/img/in-post/xv6-gdb-1.jpg

相应的第一个 terminal 也会运行到对应断点位置,有对应的输出!

小功告成!