| boot | ||
| fs_flags | ||
| hd | ||
| include | ||
| kernel | ||
| lib | ||
| user | ||
| .gitignore | ||
| build_img.sh | ||
| Makefile | ||
| mergedep.pl | ||
| README.md | ||
| 实验7.md | ||
| 实验七-v0.2-todo.pdf | ||
MiniOS简介
MiniOS是一坨屎山,每一届可怜的同学们在山里阴暗爬行。
MiniOS开发工具
MiniOS主要基于C语言和x86汇编语言开发,使用的开发工具包括:
其中,Binutils是一套对二进制文件进行操作的工具集,包括创建静态库的工具ar,从二进制文件中去除符号表以减小文件体积的工具strip等。
运行MiniOS
MiniOS当前从软盘中启动,启动流程为:
- BIOS自检完毕后从软盘引导扇区中加载引导程序(boot.bin)至内存,并将控制权交给引导程序。
- 引导程序从软盘中读取加载器(loader.bin)至内存,并将控制器交给加载器。
- 加载器运行时会从软盘中读取MiniOS内核(kernel.bin)至内存,然后从CPU的实模式进入保护模式,并将控制权交给内核。
- MiniOS开始运行。
由于MiniOS是一个面向学习者的操作系统内核,因此目前主要运行在虚拟机中,可选的虚拟机有Bochs和Qemu。
在Bochs中运行MiniOS
- 安装Bochs,在Ubuntu系统下可以直接执行命令
sudo apt-get install bochs进行安装,也可以先下载Bochs的源码再进行编译安装,通过源码进行安装可以选择想要的Bochs版本。 - 进入MiniOS源目录,执行
tar zxvf misc/80m.img.tar.gz .,从硬盘镜像压缩包中解压出硬盘镜像。 - 在当前目录下执行
bochs命令启动Bochs虚拟机,Bochs首先会从bochsrc文件中读取配置信息,然后对Bochs给出的运行提示信息进行确认便可让MiniOS在Bochs内运行。
在Qemu中运行MiniOS
- 按照Qemu,在Ubuntu系统下可以直接执行命令
sudo apt-get install qemu-system-x86进行按照,也可以下载Qemu的源代码进行编译安装。 - 进入MiniOS源目录,执行
tar zxvf misc/80m.img.tar.gz .,从硬盘镜像压缩包中解压出硬盘镜像。 - 在当前目录下执行
./launch-qemu.sh命令启动Qemu虚拟机,之后MiniOS将直接在Qemu内开始运行。Qemu虚拟机没有使用像bochsrc一样的配置文件,配置信息是通过命令行选项指定的,脚本launch-qemu.sh中包含了当前使用的配置选项。
调试MiniOS
通过使用Bochs或Qemu中自带的调试功能可以对MiniOS进行汇编语言级的调试,但由于汇编程序比较冗长且难以阅读,这种调试方式使用起来不太方便。幸运的是,Bochs和Qemu中都内置了gdb支持,通过和gdb提供的远程调试功能配合,可以对MiniOS进行C源码级的调试。
使用Bochs+gdb调试MiniOS
- 从源代码编译安装Bochs,并在编译时打开gdb支持选项。然后在Bochs配置文件中添加gdb配置信息,MiniOS源目录下的bochsrc-gdb文件中已经包含了所需的配置选项。
- 在MiniOS源目录下执行
./launch-bochs-gdb.sh,所运行的shell脚本会在一个新的终端窗口中运行gdb,并加载debug版的内核二进制文件。 - 在gdb命令界面执行命令
target remote :2345和Bochs建立连接。 - 用gdb像调试本地程序一样对MiniOS进行调试。
使用Qemu+gdb调试MiniOS
- 在启动Qemu时添加命令行选项以启用gdb支持,MiniOS源目录下的脚本文件launch-qemu-gdb.sh中已经添加了所需的配置选项。
- 在MiniOS源目录下执行
./launch-bochs-gdb.sh,所运行的shell脚本会在一个新的终端窗口中运行gdb,并加载debug版的内核二进制文件。 - 在gdb命令界面执行命令
target remote :1234和Qemu建立连接。 - 用gdb像调试本地程序一样对MiniOS进行调试。
常用MiniOS构建选项
# 编译MiniOS内核和用户程序init,并写入到软盘镜像a.img中
make image
# 清除所有.o目标文件
make clean
# 清除所有.o目标文件和可执行文件
make realclean