第四课 主引导程序的扩展-上
Posted wanmeishenghuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四课 主引导程序的扩展-上相关的知识,希望对你有一定的参考价值。
我们知道主引导程序只能存在第一扇区中,而Bios只会将第一扇区拷贝到内存执行,第一扇区之后的程序是不会被BIOS加载到内存中的,而这512字节的程序不可能完成整个操作系统的功能,因此,我们要突破这种限制。
这512字节只能完成最基本的功能,我们这样来规划它的功能:
1、首先完成最基本的初始化;
2、从存储介质中加载程序到内存中;
3、将控制权交给新加载的程序。
以上三步如下图所示:
那么怎么加载存储介质中的程序呢?我们平时写应用程序时,可以使用read这种系统调用来读取文件,而这种方法是建立在操作系统之上的,此时,我们没有现成的操作系统,我们写的程序是直接运行在硬件之上的,那么我们还有办法读取存储介质中的程序吗?答案是肯定的,我们可以将存储介质格式化成一种文件系统,然后用汇编程序去查找文件并将其加载到内存中,这个文件可以认为就是操作系统的内核,只不过它现在是以一个文件的形式存储在存储介质中的(和一些ARM开发可能不同,ARM嵌入式开发中,可能是去指定的地址读取内核,并没有文件的概念),我们将它读取到内存中后,然后就可以将控制权交给它了,是不是很简单呢?
接下来我们就先介绍要用到的文件系统和相应的工具,FAT12文件系统是软盘的专用文件系统,在DOS时代非常流行,我们就选用FAT12文件系统做实验,将一张软盘格式化成FAT12文件系统需要用到FreeDos操作系统,现在我们已经将这个操作系统做到了虚拟软盘中,名字为freedos.img,可以将它认为是一张现成的系统盘,插到光驱中就可以用了,而我们自己的虚拟软盘文件名为a.img现在还是一张没有格式的空盘。因此,我们需要将a.img插入到运行FreeDos操作系统的机器中,然后借用FreeDos中的工具对a.img进行格式化。
x86模拟器依然使用bochs,现在只需改一下启动文件,如下所示:
我们修改了启动文件的第13、14、16行,第13行表示将带有FreeDos操作系统的虚拟软盘插入光驱中,第14行表示在另一个光驱中插入另一张空盘a.img,第16行表示将软盘a作为启动盘。
修改了启动文件后,我们启动bochs,开始仿真,如下所示,可以看到FreeDos运行起来了。
FreeDos的盘符是A盘,而我们的插入的空盘盘符是B,下一步,首先对B盘进行格式化,然后,切换到B盘,查看B盘下面的文件,如下所示:
可以看到格式化成功了,格式化后的软盘中没有任何文件,是空的。
下面我们将a.img挂载到linux下的目录下,并写入几个文件,然后卸载a.img,如下所示:
其中,mount的-o loop选项表示将一个文件当做硬盘分区挂接到系统上。文件复制成功了,然后我们再去bochs虚拟机中查看B盘中的文件,如下所示:
文件成功写入到了虚拟软盘a.img中。
以上是关于第四课 主引导程序的扩展-上的主要内容,如果未能解决你的问题,请参考以下文章