6.828的第一节的Part1的主要内容是把课程提供的操作系统源代码编译并启动编译好的操作系统。

1.编译操作系统

课程的源代码被放在https://pdos.csail.mit.edu/6.828/2014/jos.git上,通过 Git 获取到源代码之后,可以开始执行编译操作。这里的编译器是用的是 GNU 的 gcc 编译器,需要使用到make命令。在进入源码的文件夹之后,执行make命令,即可以编译文件生成操作系统的镜像文件。我在这里遇到了一些问题,最开始我是在 Windows 下进行的编译,一直失败,于是我开始怀疑是编译器的原因(懒得搞交叉编译),因而决定在 Linux 下进行编译,刚好有一个树莓派,就决定在树莓派下进行编译,依然失败,于是意识到因为树莓派的 CPU 不是 x86 指令集,所以便安装了虚拟机,接着在虚拟机下安装了 Ubuntu 来进行编译,编译成功,生成kernel.img的操作系统镜像文件。

2.启动操作系统

接下来进行操作系统的引导和启动,这里使用 QEMU 来模拟机器并启动操作系统(QEMU 支持 Windows 和 Linux,这里我使用的是 Windows)。下载并安装 QEMU,为了接下来的操作方便,可以把 QEMU 的文件夹加入到环境变量中。之后到kernel.img所在的文件夹中,执行qemu-system-i386 kernel.img命令,可以启动我们的操作系统 :)

如上就是我们我们的执行结果,该操作系统只支持两条命令helpkerninfo,至此,我们就完成了操作系统的启动~~~

3.调试

如果需要查看到 QEMU 在启动时所执行的指令(instructions),可以使用 GDB 工具,GDB的使用也很简单,操作如下:

  1. 启动操作系统时,把执行命令更换为qemu-system-i386 -s -S kernel.img,其中s表示运行虚拟机时将1234端口开启成调试端口,S表示“冷冻”虚拟机,等待调试器发出继续运行命令,执行完毕之后,QEMU 的情况如下图所示,它处于一个等待调试并卡住的情况:

  2. 启动一个命令行,输入gdb,会进入调试模式,然后执行target remote 127.0.0.1:1234,此时该 gdb 就会通过 1234 端口远程连接上 QEMU,接下来就可使开始进行调试。比如,可以执行调试命令 c,会发现操作系统开始执行了,更多的命令可以参考GDB。
    在 GDB 中调试启动程序: