xv6的安装启动
xv6 是 MIT 所做的教学用操作系统,在 cs 学生中久负盛名,本文将介绍如何如何一步一步在 centos 上编译安装 xv6
前提
- Linux 系统,本文使用的是 centos8、
- 至少 10g 的磁盘空间,编译依赖会占用较多磁盘空间
- 因 MIT 将 xv6 的基础架构从 x86,切换到 riscv,因此我们也需要 clone riscv 版 xv6 的代码,安装 riscv 的工具链
安装依赖
依赖目录
- riscv 工具链
- qemu
- xv6-riscv
- 其他依赖
安装 riscv 工具链
此处参考:https://blog.csdn.net/qq_35990574/article/details/110006307
安装前置依赖
yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-devel
clone 源码
git clone https://github.com/riscv/riscv-gnu-toolchain
Tip
此处因中国大陆网络原因,如此大的 git clone 很容易失败,因此采用上面博文的方案,一个一个手动下载。
几个 riscv-*子模块的 gitee 镜像地址:
Submodule 'riscv-binutils' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-binutils'
Submodule 'riscv-dejagnu' (https://gitee.com/mirrors/riscv-dejagnu.git) registered for path 'riscv-dejagnu'
Submodule 'riscv-gcc' (https://gitee.com/mirrors/riscv-gcc.git) registered for path 'riscv-gcc'
Submodule 'riscv-gdb' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-gdb'
Submodule 'riscv-glibc' (https://gitee.com/mirrors/riscv-glibc.git) registered for path 'riscv-glibc'
Submodule 'riscv-newlib' (https://gitee.com/mirrors/riscv-newlib.git) registered for path 'riscv-newlib'
一共有 7 个 submoule,先处理 riscv-**开头的几个
比如:riscv-newlib,在/…/riscv-gnu-toolchain 目录下
git clone --recursive https://gitee.com/mirrors/riscv-newlib.git
cd riscv-newlib
git reset --hard f289cef
#//此七位数字参考github中riscv-gnu-toolchain源码中riscv-newlib后的数字
上面的 git reset 后面的 7 位代码,即为 github 仓库中,@后面的代码,自己填入
其他几个 riscv-*的模块参照此方法自行修改
PS:.riscv-binutils 与 riscv-gdb 来自于同一个仓库,且与本地要求的文件夹名称不同,需用命令指定本地名,riscv-gdb 同理。
git clone --recursive https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-binutils
make
./configure --prefix=/opt/riscv
make
此处将会经历漫长的编译过程,且 cpu,内存的占用都会极大增加
测试
安装目录下的 bin 文件夹中有这些可执行文件,即代表编译成功
安装目录即前几步中的–prefix 参数
软连接
将此 bin 下的文件 软连接到/usr/bin 以便全局调用
编译安装 qemu
拉取源码
git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git submodule init
git submodule update --recursive
make
cd qemu
$ ./configure --target-list=riscv64-linux-user,riscv64-softmmu --prefix=安装目录
make
make install
这里可能会有些报错
- 找不到 ninja
- yum -y install git automake gcc+ gcc-c++ libtool
- 安装 re2c
- git clone https://github.com/skvadrik/re2c.git re2c
- cd re2c
- mkdir -p m4
- ./autogen.sh && ./configure –prefix=/usr && make sudo make install
- 安装 ninja
- git clone git://github.com/ninja-build/ninja.git && cd ninja
- git checkout release
- ./configure.py –bootstrap 这里如果报 no python 则 whereis python3 后 ln -s 这个路径 到/usr/bin/python
- 安装完成后 软链接 ninja 可执行文件,到 /usr/bin
- glib-2.56 gthread-2.0 is required to compile
- dnf –enablerepo=powertools install libmount-devel
- ERROR: Dependency “pixman-1” not found, tried pkgconfig
- dnf install pixman-devel
测试
- cd 到上一步的安装目录/bin
- 内应有以下这些,其中 qemu-system-riscv64 最为重要
软链接
安装 xv6
拉取代码
git clone https://hub.fastgit.org/mit-pdos/xv6-riscv.git
cd xv6-riscv
编译启动
make qemu
若无错,则会成功进入 xv6
xv6 安装完成
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小周の代码之路!
评论