因为操作系统内核程序kernel实现的功能很多,为了减少编写难度,肯定要使用C语言编写,这就要求内核是在保护模式下使用汇编和C语言编写的。并且为了内核调试方便,选择使用ELF格式的内核程序。
一个操作系统从开机到开始运行,大致经历 “引导→加载内核入内存→跳入保护模式→按照ELF格式移动内核-->开始执行内核”这样一个过程。也就是说,在内核开始执行之前不但要加载内核,而且还有准备保护模式等一系列工作,如果全都交给引导扇区来做,而且我们的引导扇区为了能够让DOS以及 Linux识别了增加了BPB块,512字节很可能是不够用的,所以,不妨把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。
所以orange's的程序规划为:
boot程序不能大于512字节,编译生成以后使用dd命令写入到软盘的引导扇区,由BIOS加载引导扇区并跳转到boot执行;
boot按照FAT12文件系统格式寻找loader程序,把loader从软盘读入到指定内存位置,并跳转到loader执行;
(loader程序编译生成以后,是借助linux识别软盘并写入到软盘的)
loader程序按照FAT12文件系统格式寻找kernel程序,把kernel从软盘读入到指定内存位置,按照ELF格式移动内核,并跳转到kernel执行;
(kernel程序编译生成以后,是借助linux识别软盘并写入到软盘的)