主要工具
Bochs(虚拟机)
一个x86模拟器,其中的软件可以模拟计算机cpu,内存,硬盘等硬件。它的优势在于可以单步调试内核,可以清楚看到当修改操作系统内核时,寄存器每一步的变化,看见cpu内部发生了什么。
真实的操作系统修改后执行很容易崩溃,所以模拟一个虚拟的环境,再来修改操作系统。
linux-0.11
最早期的linux操作系统,代码只有近10000行,现代的linux有将近几千万行,但是这10000行中就包括了最核心的进程调度,内存管理等代码,简单且学习起来更容易
ubuntu(宿主机)
就是在上面运行buchs,执行linux-0.11。
我的理解是类似于windows,然后在windows上模拟机器Bochs,再在其中运行linux。
先置知识
软盘,软驱,硬盘
这里我的理解,就是软盘类似u盘,上面可以传文件,可以插拔。
软驱类似u盘插入的接口,用来读取软盘
硬盘就是一个大的固定的存储文件的地方。
挂载
挂载就是把外部的存储“插入”到你的文件系统。
这里我的理解就是类似插u盘这个行为。因为宿主机ubuntu和虚拟机是两个隔离的系统,想要在这两个之间传输文件就需要通过类似插u盘(软盘),这种行为。这里的挂有硬件层次的挂载,和文件系统层次的挂载。后面会讲到
这里插u盘只是一种类似的说明作用的比喻
环境配置过程
解压编译生成Image文件
先在宿主机上解压文件,然后一般后续如果改了linux源码,make编译后就会生成Image文件
注意后续要修改linux操作系统都是在宿主机上修改,然后传到boches,然后在Bochs上执行。
这个Image文件就是一个虚拟软盘,里面是引导启动和linux的代码
可以看到Image里包含了引导启动操作系统,和linux操作系统的代码。
是用来启动boches的,如果没有Image,是启动不了boches,和linux。
./run之后发生的事情
前面我们生成了Image虚拟软盘,还没有用到。这里./run这个代码中就有一部分是用到它,./run指令明显就是关于在宿主机上关于启动boches以及linux的指令了
./run之后其实就会发生很多挂载。
硬件层次的挂载, 首先Image(编译后生成的,系统启动盘,软盘镜像)会挂载到虚拟软驱a
文件系统的挂载,hdc-0.11img(解压后就有的文件,工具和数据盘,文件系统格式硬盘镜像)会挂载到虚拟硬盘
文件系统的挂载,硬盘会挂载到根目录。
挂载到根目录的意义是让linux系统能够看到并读取这些文件,
总的流程图(重要)
附录:如果要在ubuntu和linux 0.11之间传输文件该怎么做
Minix格式
Minix是这两个系统都可以识别共通的文件系统格式,奠定了他们可以互相传输识别文件的基础
流程
其实这个过程和u盘的使用很像。
这里相当于首先把u盘插入ubuntu(挂载),然后在里面放文件,相当于在u盘里放文件,然后一定要拔出(卸载:sudo umount hdc),然后再启动bochs(./run),只不过这里./run指令内部既包含启动也包含挂载,自动插u盘,传入了文件,让linux能看见了。
这里hdc-0.11.img本身是虚拟硬盘
实验中有两个注意
第一个注意:意思简单来说就是u盘只能在一个系统(ubutnu或者linux 0.11)用,不能同时用。
第二个注意:当在linux-0.11修改程序时,写入缓存后会异步等待写入硬盘。如果在写入硬盘前就退出boches就改动没保存。这里sync相当于强制保存硬盘。确定保存的作用吧
从图中看到只是插u盘对应的操作不一样。