Go to file
2023-11-22 20:58:04 +08:00
boot backward compatiblity for nams headers 2023-11-22 18:02:24 +08:00
fs_flags original from 2022 2023-11-22 16:16:24 +08:00
hd original from 2022 2023-11-22 16:16:24 +08:00
include remove asm print in kernel 2023-11-22 20:58:04 +08:00
kernel remove asm print in kernel 2023-11-22 20:58:04 +08:00
lib remove asm print in kernel 2023-11-22 20:58:04 +08:00
user original from 2022 2023-11-22 16:16:24 +08:00
.gitignore original from 2022 2023-11-22 16:16:24 +08:00
build_img.sh original from 2022 2023-11-22 16:16:24 +08:00
Makefile original from 2022 2023-11-22 16:16:24 +08:00
mergedep.pl original from 2022 2023-11-22 16:16:24 +08:00
README.md original from 2022 2023-11-22 16:16:24 +08:00
实验7.md original from 2022 2023-11-22 16:16:24 +08:00
实验七-v0.2-todo.pdf original from 2022 2023-11-22 16:16:24 +08:00

MiniOS简介


MiniOS是一坨屎山每一届可怜的同学们在山里阴暗爬行。

MiniOS开发工具


MiniOS主要基于C语言和x86汇编语言开发使用的开发工具包括

  • 汇编器nasm
  • C语言编译器gcc
  • GNU二进制工具集Binutils
  • 项目构建工具make
  • 调试器gdb

其中Binutils是一套对二进制文件进行操作的工具集包括创建静态库的工具ar从二进制文件中去除符号表以减小文件体积的工具strip等。

运行MiniOS


MiniOS当前从软盘中启动启动流程为

  1. BIOS自检完毕后从软盘引导扇区中加载引导程序boot.bin至内存并将控制权交给引导程序。
  2. 引导程序从软盘中读取加载器loader.bin至内存并将控制器交给加载器。
  3. 加载器运行时会从软盘中读取MiniOS内核kernel.bin至内存然后从CPU的实模式进入保护模式并将控制权交给内核。
  4. MiniOS开始运行。

由于MiniOS是一个面向学习者的操作系统内核因此目前主要运行在虚拟机中可选的虚拟机有BochsQemu

在Bochs中运行MiniOS

  1. 安装Bochs在Ubuntu系统下可以直接执行命令sudo apt-get install bochs进行安装也可以先下载Bochs的源码再进行编译安装通过源码进行安装可以选择想要的Bochs版本。
  2. 进入MiniOS源目录执行tar zxvf misc/80m.img.tar.gz .,从硬盘镜像压缩包中解压出硬盘镜像。
  3. 在当前目录下执行bochs命令启动Bochs虚拟机Bochs首先会从bochsrc文件中读取配置信息然后对Bochs给出的运行提示信息进行确认便可让MiniOS在Bochs内运行。

在Qemu中运行MiniOS

  1. 按照Qemu在Ubuntu系统下可以直接执行命令sudo apt-get install qemu-system-x86进行按照也可以下载Qemu的源代码进行编译安装。
  2. 进入MiniOS源目录执行tar zxvf misc/80m.img.tar.gz .,从硬盘镜像压缩包中解压出硬盘镜像。
  3. 在当前目录下执行./launch-qemu.sh命令启动Qemu虚拟机之后MiniOS将直接在Qemu内开始运行。Qemu虚拟机没有使用像bochsrc一样的配置文件配置信息是通过命令行选项指定的脚本launch-qemu.sh中包含了当前使用的配置选项。

调试MiniOS

通过使用Bochs或Qemu中自带的调试功能可以对MiniOS进行汇编语言级的调试但由于汇编程序比较冗长且难以阅读这种调试方式使用起来不太方便。幸运的是Bochs和Qemu中都内置了gdb支持通过和gdb提供的远程调试功能配合可以对MiniOS进行C源码级的调试。

使用Bochs+gdb调试MiniOS

  1. 从源代码编译安装Bochs并在编译时打开gdb支持选项。然后在Bochs配置文件中添加gdb配置信息MiniOS源目录下的bochsrc-gdb文件中已经包含了所需的配置选项。
  2. 在MiniOS源目录下执行./launch-bochs-gdb.sh所运行的shell脚本会在一个新的终端窗口中运行gdb并加载debug版的内核二进制文件。
  3. 在gdb命令界面执行命令target remote :2345和Bochs建立连接。
  4. 用gdb像调试本地程序一样对MiniOS进行调试。

使用Qemu+gdb调试MiniOS

  1. 在启动Qemu时添加命令行选项以启用gdb支持MiniOS源目录下的脚本文件launch-qemu-gdb.sh中已经添加了所需的配置选项。
  2. 在MiniOS源目录下执行./launch-bochs-gdb.sh所运行的shell脚本会在一个新的终端窗口中运行gdb并加载debug版的内核二进制文件。
  3. 在gdb命令界面执行命令target remote :1234和Qemu建立连接。
  4. 用gdb像调试本地程序一样对MiniOS进行调试。

常用MiniOS构建选项

# 编译MiniOS内核和用户程序init并写入到软盘镜像a.img中
make image
# 清除所有.o目标文件
make clean
# 清除所有.o目标文件和可执行文件
make realclean

参考资料

  • Orange's 由于渊开发的一个微型操作系统在《一个操作系统的实现》这本书中讲述了Orange's的开发过程。MiniOS是基于Orange's进行开发的。
  • xv6 由MIT开发的一个用于教学的微型操作系统xv6由Unix V6改写而来被应用在MIT的操作系统课程6.828: Operating System Engineering中。
  • Minix 最初由Andrew S. Tanenbaum教授开发的一个微内核操作系统Linus在开发早期的Linux的时候从Minix处继承了很多特性于渊在开发Orange's的时候也多次借鉴了Minix。