最近开始学习操作系统的相关知识,选择学 MIT6.S081 的课程。
首先在 课程官方网站 上拉取仓库配置环境。
$ git clone git://g.csail.mit.edu/xv6-labs-2020
$ cd xv6-labs-2020
$ git checkout util
$ make qemu
make
时发现有报错:
user/sh.c: In function ‘runcmd’:
user/sh.c:58:1: error: infinite recursion detected [-Werror=infinite-recursion]
58 | runcmd(struct cmd *cmd)
| ^~~~~~
打开该文件发现:
// Execute cmd. Never returns.
void
runcmd(struct cmd *cmd)
这里已经注释说明了这个函数不返回,但是并没有告诉编译器,因此应该加上注解:
// Execute cmd. Never returns.
__attribute__ ((noreturn))
void
runcmd(struct cmd *cmd)
现在就可以 make
成功了。
但是又有了新的问题, qemu
无法加载系统,发现该项目最好在 Ubuntu20.04 上运行,我查看了一下 Ubuntu20.04 的 qemu 版本,是 4.2.1 ,比 Fedora 36 的低很多,我干脆直接编译安装得了。
在 qemu 官网 安装 4.2.1 ,并安装:
$ ./configure --prefix=/home/vandark/.local
$ make -j8 && make install
报错没有选项 -nopie
很明显是 GCC
的版本高了,现在的选项是 --no-pie
,在 config-host.mak
修改就可以编译成功了。
最后就可以进入了:
$ make qemu
xv6 kernel is booting
hart 1 starting
hart 2 starting
init: starting sh
$