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
、tar
vi
编辑器gcc 1.4
编译器,可用来编译标准C程序as86
和ld86
Linux 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
即可。