操作系统开发系列——Bootloaders
操作系统开发系列——Bootloaders
分类: 操作系统相关 2010-09-20 17:05 1386人阅读 评论(0) 收藏 举报
磁盘汇编测试dosbytereport
目录(?)[+]
简介
欢迎光临!本章教程相信您已期待很久。本章我们将涵盖许多话题,如:
启动过程——它是如何工作的
Bootloader理论
开发一个简单的Bootloader
用NASM来汇编这个Bootloader
使用VFD(Virtual Floppy Drive)软件;创建一个软盘镜像
使用PartCopy;将我们的Bootloader复制到软盘镜像
使用Bochs——基本的安装和使用;测试这个Bootloader
准备好了吗?
启动过程
按下电源按钮
当你按下电源按钮,实际上发生了什么?当这个按钮被按下,连接到这个按钮的线向主板发送一个电子信号。主板仅仅重定向这个信号到电源(power supply)(PSU)。
这个信号包含了单个位的数据。如果它是0,那么,当然,没有电源(所以电脑是关闭的,或者主板是失效的(the motherboard is dead))。如果它是1(意味着一个有效的信号),这意味着电源已经正在供电。
为了更好地理解它,记住计算机中的二进制逻辑的基础。8个“位”仅仅代表8根电流能够通过的“线”。0表示当前没有电流,而1表示当前电线中有电流。这个再加上逻辑门,就是数字逻辑电子学的基础,计算机就是在其基础上建立起来的。
当电源接收到活动信号,它就开始给系统其余部分供电。当给所有设备提供了正确数额的电压,电源将能够继续补充那些没有重大问题的电源。
接着电源发送一个信号,一个被称为“power_good”的信号,给主板中的基本输入输出系统(BIOS)。
BIOS自检(POST)
当BIOS接收到”power_good”信号,BIOS就会开始一个成为自检(Power On Self Test)的过程。自检会测试提供的电压以确保足够,会测试安装的设备(例如键盘,鼠标,USB,串口等等),还有保证内存可用(通过测试内存是否损坏)。
接着自检会将控制权交给BIOS。自检将BIOS加载到内存的结尾(可能是0xFFFFF0)并且将一个跳转指令放在内存的第一个字节。
处理器的指令指针(CS:IP)被设为0,接着处理器获得控制权。
这意味着什么?处理器开始执行地址0×0的指令。在这里,是被自检所放的跳转指令。这个跳转指令会跳到0xFFFFF0(或者其他BIOS被加载的位置),接着处理器开始执行BIOS。
BIOS获得控制权…
BIOS
基本输入输出系统(BIOS)会做这么几件事。它创建一个中断向量表(IVT),并提供一些基本的中断服务。然后BIOS会做一些测试以确保没有硬件问题。BIOS也提供一个设置工具。
接着BIOS需要找到一个操作系统。基于你在BIOS中所设的引导顺序,BIOS会执行中断(INT)0×19来试着找到一个可引导的设备。
如果没有发现引导设备(INT 0×19返回),BIOS接着试引导顺序中所列的下一个设备。如果没有设备了,它会打印一条错误就像“没有发现操作系统”这样的然后停止系统。
中断和中断向量表(IVT)
一个中断就是一个可以通过许多不同程序运行的子程序。这些中断被存放在地址0×0开头的一个成为中断向量表的表里面。例如,一个常用的中断是DOS中使用INT 0×21。
备注:这里没有DOS!“仅有”的可用中断是由BIOS提供的,除此之外没有别的了!使用其他的中断将会引起系统执行一个不存在的例程,导致你的程序崩溃!
备注:如果你转换处理器模式,IVT将不再有效。这意味这绝对“没有”中断——既无软件中断也无硬件中断可用,甚至没有BIOS中断。对于一个32位的操作系统,我们不得不这样做。虽然现在还没有!
BIOS中断0×19
INT 0×19 – SYSTEM:BOOTSTRAP LOADER
通过热启动重启系统而并不清除内存以及恢复中断向量表
这个中断是被BIOS执行的。它读取第一个硬盘的第一个扇区(1扇区,0扇面,0磁道)。
扇区
一个扇区仅仅代表一组512字节。因此,扇区1代表一个磁盘的第一个512字节。
扇面
一个“扇面”(或者面)代表磁盘的一个侧边,扇面0是前侧,扇面1是后侧。大多数磁盘只有1个侧边,因此只有一个扇面(“扇面0”)。
磁道
为了理解磁道,我们看下面一张图:
在这张图中,这个磁盘可以代表一个硬盘或者一个软盘。这里我们看到的是扇面1(前侧),并且扇区代表512字节。一个磁道是扇区的集合。
备注:记住一个扇区是512字节,软盘上每个磁道有18个扇区。这在我们加载文件时是非常重要的。
如果这个磁盘是可引导的,引导扇区将会被加载到0x7C00,然后INT 0×19会跳到它,从而使bootloader
原创力文档

文档评论(0)