xv6 源码精读(一)环境搭建
目录
一、序言
二、xv6介绍
三、源码、资料链接
四、环境准备
1)代码版本
2)qemu版本
3)编译
4)运行
5)调试
一、序言
最近学习了下xv6的源码,这是一个非常经典的开源OS。个人认为,对操作系统感兴趣同学用这个来作为入门非常合适,同时github上也有很多aarch64架构的xv6实现版本。
因此,打算单独开一个专栏,精读xv6源码,并选取一个aarch64架构的版本,结合起来分享arm64架构相关的知识,如:MMU、中断、异常处理等。希望感兴趣的小伙伴能够喜欢!
PS:如果觉得有帮助的话,请点赞、收藏、关注 3连下吧哈哈哈~
二、xv6介绍
xv6 是由麻省理工学院(MIT)开发的一个现代化的教学用操作系统,xv6 是在经典的Unix V6基础上进行现代化重写,以适应现代处理器架构。
xv6支持任务调度、进程间通信、文件系统、多核启动、以及设备虚拟化。对于对操作系统感兴趣的学生和研究人员来说,xv6是一个很好的学习平台。
三、源码、资料链接
xv6课程官网:https://pdos.csail.mit.edu/6.828/2012/xv6.html
xv6官方文档:https://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf
xv6源码:https://github.com/mit-pdos/xv6-public
以上都是一些官方的链接,我在github上也找了一些aarch64的实现版本:
https://github.com/k-mrm/xv6-aarch64
https://github.com/hakula139/xv6-armv8
https://gitlab.com/xv6-multiarch/xv6
https://github.com/sudharson14/xv6-OS-for-arm-v8
以上这些aarch64 xv6的实现,与MIT xv6的实现差异主要集中在一些架构相关的代码(如:页表、中断管理、异常管理等),其余部分还是保留的xv6中的实现,因此对于学习xv6操作系统本身,没有太大区别。
这里,我打算选取 https://github.com/k-mrm/xv6-aarch64 这一版本的xv6,作为本系列文章的codebase。
四、环境准备
1)代码版本
git clone git@github.com:k-mrm/xv6-aarch64.git
如果下不来的话,我也上传了一份代码在这里:https://download.csdn.net/download/h_b__k/91907195
2)qemu版本
qemu-7.0.0
3)编译
cd xv6-aarch64-aarch64make
4)运行
make qemu
可以看到,这是一个非常简单的OS,不过也提供了类似busybox的基础功能,用于学习操作系统足够够了!
5)调试
// 窗口1:
qemu-system-aarch64 -cpu cortex-a72 \-machine virt,gic-version=3 \-kernel kernel/kernel \-m 128M \-smp 4 \-nographic \-drive file=fs.img,if=none,format=raw,id=x0 \-device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 \-S -gdb tcp::7758// 窗口2:
gdb-multiarch kernel/kernel -q
至此,前期准备工作都搞定了,下一篇文章就正式开始xv6 aarch64的源码精读(主核启动、MMU开启流程、一致性页表)~