码迷,mamicode.com
首页 > 其他好文 > 详细

0.11之路(二):加载setup

时间:2015-04-10 18:01:12      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

BIOS将bootsect这个引导程序载入内存后,接下来就要靠bootsect来加载第二批和第三批程序。

bootsect首先要做的工作就是规划内存
实模式下,寻址最大范围是1MB(0xFFFFF)。关于setup程序,在bootsect.s中要指定setup程序的扇区数和被加载到的位置(0x90200),此外还要指定启动扇区(也就是bootsect.s)被BIOS加载的位置(0x07c00)和将要移动到的新位置(0x90000),内核被加载的位置(0x10000)和内核的末尾位置,根文件系统设备号(ROOT_DEV=0x306,第二个硬盘第一个分区)。
这就是内存规划,可以确保互不重叠。

bootsect的第一步是将自身从0x07c00的位置复制到0x90000的位置。
第二步就是将setup程序加载至内存中。

加载bootsect,BIOS需要 int 0x19 这个中断向量。加载setup,则要借助BIOS提供的 int 0x13 中断向量所指向的中断服务程序——磁盘服务程序。二者不同的是, int 0x19指向的启动加载服务程序是BIOS执行的,而 int 0x13指向的磁盘服务程序是linux自身的启动代码bootsect执行的。前者只负责把第一扇区的代码加载到0x07C00位置,而后者的中断服务程序则根据设计者的意图,把指定扇区的代码加载到内存的指定位置。所以对于 int 0x13 来说,要事先将指定的扇区、加载的内存位置等信息传递给中断服务程序。

复制后的bootsect的起始位置是0x90000,占用512B,因此,0x90200紧挨着bootsect的尾部,所以bootsect和setup是连在一起的。setup程序占据四个扇区,这样加上bootsect,一共加载了五个扇区。bootsect代码执行完毕后就开始执行setup。

0.11之路(二):加载setup

标签:

原文地址:http://blog.csdn.net/bluecloudmatrix/article/details/44980433

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!