作者:2cz2x | 来源:互联网 | 2023-10-16 13:25
用软盘引导操作系统貌似比较老,现在已经没有软盘了,作为实机实验操作系统,应该用U盘比较稳妥。话说软盘格式为FAT12,而U盘的主流分区大多分为FAT32。所以二话不说就应该研究FAT32,
用软盘引导操作系统貌似比较老,现在已经没有软盘了,作为实机实验操作系统,应该用U盘比较稳妥。
话说软盘 格式为FAT12 ,而U盘的主流分区大多分为FAT32。
所以二话不说就应该研究FAT32,正好可以结合FAT12一同学习。
先回顾一下 详细的硬盘开机流程:
1、 BIOS加电自检(POST)
2、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
3、 检查0000:7dfe是否等于0xaa55.(即Boot Sector 的最后一个字节)若不等于则转去尝试其他介质; 如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机;
4、 跳转到0000:7c00处执行MBR中的程序;
5、 MBR先将自己复制到0000:0600处,然后继续执行;
6、 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或者不止一个活动分区,则停止;
7、 将活动分区的第一个扇区读入内存地址0000:7c00处;
8、 检查0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试其他介质启动;
9、 跳转到0000:7c00处继续执行特定系统的启动程序;
总结一下过程 就是 硬盘第0扇区为MBR,开机自动读这个扇区到7c00h处,然后根据分区表DPT,找到活动分区,将引导代码(DBR)再次放到7c00h,然后加载LOADER.
至于为什么要加载loader是因为引导扇区(DBR),只有512字节,根本不够放下 转入保护模式和加载内核的任务,所以DBR只负责加载loader,让loader负责转入保护模式 和加载内核。(这就是所谓的突破512字节限制)
简化一下过程:
mbr ->DPT(检索活动分区)->DBR(加载活动分区的主引导记录)-> loader(loader)
所以:我们需要编写1. 存放到MBR中的程序,2.存放到DBR中的程序,3.loader文件
即我们需要做一个功能比较完整的bootloader.
现在我们的工作重心 在MBR和 DBR上 先看一下简图 硬盘分区
硬盘 结构 大致为 MBR ( 不必紧挨着) 分区1,分区2,分区3 --------
MBR 由446字节代码 和DPT分区表 和 0xaa55引导标志组成。
DPT分区表记录着分区的物理地址和长度,还有很重要的一项是否活动的标志.
在FAT32的引导扇区DBR不只一个扇区,所以首扇区是万分重要的,需要有 魔数0x55aa表示可以引导,而且在上文的描述中可知:
MBR程序干的工作是把这个扇区加载到内存0X7C00处,如果分区引导记录内容超过512字节,我们必须利用首扇区把超过512字节的内容加载到内存中.
为了简化制作流程
1.U盘只有一个分区
2.U盘首扇区是整个U盘分区的分区引导记录,即(我们的主引导记录就是整个分区的引导记录)
3.整个引导代码(可以超过512字节,但是必须自己加载到内存中)目的是将LOADER文件.加载到内存某某区域
过程就简化成
开机->硬件加载MBR->在FAT32文件系统下搜索LOADER