开始学习xv6之前编译它是第一步骤,然而很多人可能和我一样用的是windows跑linux虚拟机,这样来回切换系统和共享文件显得十分麻烦。
在这样的背景下我就想直接在windows编译调试xv6会方便很多。
首先编译xv6涉及的工具包括gcc,binutils,make,qemu。
xv6需要能生成elf32格式的可执行文件的工具链,好在windows下已经有了mingw32这个gcc在windows下的移植,
这样用mingw32编译一套在windows下运行的i386-none-elf交叉工具链成为可能。
Make和qemu也是如此,这里需要说明的是默认网上下载的qemu可执行文件很可能是不带有gdb调试功能的,
这也是需要重新自己编译qemu的原因之一,第二个原因是qemu默认的输入输出会被定向到两个文本文件,
直接后果是xv6的uart将无法使用,自己编译qemu解决上述两点。
接下来是修改makefile文件,这里同时涉及dd,sign.pl,vectors.pl,mkfs。
dd在这里的作用是将bootblock和kernel两个文件组合构建xv6.img镜像,sign.pl是在bootblock添加0xaa55引导标记,
vectors.pl是生成vectors.S文件,mkfs是构建xv6根文件系统镜像fs.img用的。
我编写了wd.c对应dd,sign.c对应sign.pl,vectors.S在linux构建时直接复制了,mkfs.c也需要修改。
wd.c
#include <stdio.h>
int main(int argc,