本系列文章主要更新哈工大《操作系统》课程对应的9个Lab实验(包括熟悉实验环境),提供了非常详细的环境配置方法以及按照指导书展开的详细操作步骤,希望对大家有所帮助。
实验的基本流程是根据实验要求编写应用程序、修改 Linux 0.11 的源代码,用 gcc 编译后,在 Bochs 的虚拟环境中运行、调试目标代码。注:笔者是在
Ubuntu20.04
平台上进行实验。
一、实验工具准备:
文件名 | 介绍 |
---|---|
hit-操作系统实验指导书.pdf | 哈工大OS实验指导书 |
Linux内核完全注释(修正版v3.0).pdf | 赵博士对Linux v0.11 OS进行了详细全面的注释和说明 |
file1615.pdf | BIOS 涉及的中断数据手册 |
hit-oslab-linux-20110823.tar.gz | hit-oslab 实验环境 |
gcc-3.4-ubuntu.tar.gz | Linux v0.11 所使用的编译器 |
Bochs 汇编级调试指令 | bochs 基本调试指令大全 |
二、实验环境配置
1、文件结构
下载 hit-oslab-linux-20110823.tar.gz
压缩包,并将其解压,将得到如下文件:
• Image 文件
oslab 工作在一个宿主操作系统之上,我们使用的 Linux,在宿主操作系统之上完成对 Linux0.11 的开发、修改和编译之后,在 linux-0.11 目录下会生产一个名为 Image 的文件,它就是编译之后的目标文件。
该文件内已经包含引导和所有内核的二进制代码。如果拿来一张软盘,从它的 0 扇区开始,逐字节写入 Image 文件的内容,就可以用这张软盘启动一台真正的计算机,并进入 Linux0.11 内核。
oslab 采用 bochs 模拟器加载这个 Image 文件,模拟执行 Linux 0.11,这样省却了重新启动计算机的麻烦。
• bochs 目录
bochs 目录下是与 bochs 相关的执行文件、数据文件和配置文件。
• run 脚本
bochs 目录下是与 bochs 相关的执行文件、数据文件和配置文件。run 是运行 bochs 的脚本命令。
运行后 bochs 会自动在它的虚拟软驱 A 和虚拟硬盘上各挂载一个镜像文件,软驱上挂载是linux-0.11/Image,硬盘上挂载的是 hdc-0.11.img。
• hdc-0.11.img 文件
hdc-0.11.img 文件的格式是 Minix 文件系统的镜像。
Linux 所有版本都支持这种格式的文件系统,所以可以直接在宿主 Linux 上通过 mount 命令访问此文件内的文件,达到宿主系统和 bochs 内运行的 Linux 0.11 之间交换文件的效果。
2、使用方法
(1)进入 linux-0.11 目录进行编译
shell
cd ~/my_space/OS_HIT/oslab/linux-0.11
make all
结尾出现 sync
则表示成功。
(2)运行
shell
../run
如果出现 Bochs 的窗口,里面显示 linux 的引导过程,最后停止在 [/usr/root/]#,表示运行成功
(3)调试
- 汇编级调试:OS汇编级详细的调试方法请参考文章 00 【哈工大_操作系统】Bochs 汇编级调试方法及指令-CSDN博客。这篇博文详细介绍了 Bochs 汇编级调试的方法,同时后续设计到的 Bochs 常用指令也都可以在这篇博文中查到。
- C语言级调试:将会在后续使用时更新。
(4)文件交换
接下来讲解一下 Ubuntu 和 Linux 0.11 之间的文件交换如何启动。
开始设置文件交换之前,务必关闭所有的 Bochs 进程。
slab 下的 hdc-0.11-new.img 是 0.11 内核启动后的根文件系统镜像文件,相当于在 bochs 虚拟机里装载的硬盘。在启动挂载之前打开 hdc
文件夹时显示内容如下:
- 在 Ubuntu 上访问其内容的方法:
shell
cd oslab
sudo ./mount-hdc // 启动挂载脚本
成功挂载后,hdc
文件夹显示内容如下:
读写完毕,不要忘了卸载这个文件系统:
shell
sudo umount hdc
经过 sudo ./mount-hdc 这样处理以后,我们可以在 Ubuntu 的 hdc 目录下创建一个 xxx.c文件,然后利用 Ubuntu 上的编辑工具(如 gedit 等)实现对 xxx.c 文件的编辑工作,在编辑保存以后。
执行 sudo umount hdc 后,再进入 Linux 0.11(即 run 启动 bochs 以后)就会看到这个xxx.c(即如下图所示),这样就避免了在 Linux 0.11 上进行编辑 xxx.c 的麻烦,因为Linux 0.11 作为一个很小的操作系统,其上的编辑工具只有 vi,使用起来非常不便。