上一篇讲到的微内核程序是由BIOS例程自动加载到内存中运行的,而且大小有限,能做的事情有限。我们知道内核程序大小是可以扩展的不能只有512字节,同时在加载运行内核前还需要完成一些必要的实模式下才能做的准备工作。所以单纯在实模式下只使用微内核程序是不太够的,就有了加载程序setup(有的项目也叫bootloader)的引入。
在正常工作是,由bios加载微内核程序以后,微内核将加载程序加载到内存中,然后由用户自己实现的加载程序完成内核运行环境准备以及加载内核的工作。这样做,自由度就较高了,本文完成上述过程的演示工作,分为下面几个部分讲解:
1)整体项目工作安排
2)硬盘驱动结构讲解
3)读硬盘操作过程讲解
4)实战演练
#整体项目框架:
上一篇完成的Boot程序继续充当微内核角色,完成以下工作内容
1)使用BIOS中断清空屏幕
2)将setup程序从硬盘读取到内存的0x500的位置(实模式下的可用内存区域)
3)使用print打印字符:send to setup
4)跳转到0x500继续执行setup程序
开辟一个新的加载程序setup,完成一下工作:
1)清空屏幕
2)打印字符:hello world
##硬盘驱动接口讲解
上述没接触到技术点就是如何汇编实现硬盘驱动完成读硬盘的操作,在实模式下我们直接使用传统硬盘接口的 I/O 控制机制操作主通道的硬盘hd.img(分通道设置硬盘后续再说),如下图所示:
###关键接口讲解:deepseek写的不完全正确
1)0x1F0:
进行读写操作寄存器,内部可读写大小为16位
2)0x1F2:
操作扇区个数(一般一个扇区51