6. Linux 0.11 的工作模式¶
6.1. Image 的生成与加载¶
在宿主操作系统之上完成对 Linux 0.11 的开发、修改和编译之后,在 Linux 0.11 目录下会生产一个名为 Image 的文件,它就是编译之后的目标文件。该文件内已经包含 引导和所有内核 的二进制代码。如果拿来一张软盘,从它的 0 扇区开始,逐字节写入 Image 文件的内容,就可以用这张软盘启动一台真正的计算机,并进入 Linux 0.11 内核。 oslab 采用 Bochs 模拟器加载这个文件,模拟执行 Linux 0.11 ,这样省却了重新启动计算机的麻烦。
Bochs 目录下是与 Bochs 相关的执行文件、数据文件和配置文件。 run 是运行 Bochs 的脚本命令。运行后 Bochs 会自动在它的虚拟软驱 A 和虚拟硬盘上各挂载一个镜像文件,软驱上挂载是 linux-0.11/Image ,硬盘上挂载的是 hdc-0.11.img 。因为 Bochs 配置文件中的设置是从软驱 A 启动,所以 Linux 0.11 会被自动加载。而 Linux 0.11 会驱动硬盘,并 mount 硬盘上的文件系统,也就是将 hdc-0.11.img 内镜像的文件系统挂载到 Linux 0.11 系统内的根目录—— /。在 Linux 0.11 下访问文件系统,访问的就是 hdc-0.11.img 文件内虚拟的文件系统。
6.2. hdc-0.11.img 文件系统¶
hdc-0.11.img 文件的格式是 Minix 文件系统的镜像。
Linux 所有版本都支持这种格式的文件系统,所以可以直接在宿主 Linux 上通过 mount 命令访问此文件内的文件,达到宿主系统和 Bochs 内运行的 Linux 0.11 之间交换文件的效果。
hdc-0.11.img 内包含有:
Bash shell一些基本的
Linux命令、工具,比如cp、rm、mv、tarvi编辑器gcc 1.4编译器,可用来编译标准C程序as86和ld86Linux 0.11的源代码,可在Linux 0.11下编译,然后覆盖现有的二进制内核Linux上的实验环境
6.3. Ubuntu 和 Linux 0.11 文件交换¶
oslab 下的 hdc-0.11-new.img 是 Linux 0.11 内核启动后的根文件系统镜像文件,相当于在 Bochs 虚拟机里装载的硬盘。在 Ubuntu 上访问其内容的方法是:
sudo ./mount-hdc
之后, hdc 目录下就是和 Linux 0.11 内核一模一样的文件系统了,可以读写任何文件(可能有些文件要用 sudo 才能访问)。读写完毕,不要忘了卸载这个文件系统:
sudo umount hdc
警告
不要在 Linux 0.11 内核运行的时候 mount 镜像文件,否则可能会损坏文件系统。同理,也不要在已经 mount 的时候运行 Linux 0.11 内核。
警告
在关闭 Bochs 之前,需要先在 Linux 0.11 的命令行运行 sync ,确保所有缓存数据都存盘后,再关闭 Bochs 。
警告
问题:bochs: could not open hard drive image file “./hdc-0.11.img”
解决办法:删除同目录下的
hdc-0.11.img.lock即可。