开机启动到加载os内核的过程

现在的BIOS通常写在闪存或eeprom中,断电后也可以被保存。

电脑各硬件的参数信息被记录在cmos中,这些参数可以被bios读取,也可以在bios

中被修改。

1 通电以后,cpu恢复初始状态,默认指向ffff0,此地址在BIOS的范围内。放在这

的只是一条跳转指令,可以跳到系统BIOS中真正的启动代码处。

2 系统BIOS的启动代码首先要做的事情就是进行POST(Power-OnSelfTest,加电

后自检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作。


3 检测这些设备的参数和cmos中的是否一样,不一样则同步一下。

4 系统BIOS的启动代码根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,
BIOS将磁盘的第一扇区(磁盘最开始的512字节)载入内存,放在0X0000:0X7C00处(调用BIOS的 中断 int 13h 其作用是从磁盘将数据读入es:bx指向的缓冲区),然后检查这个扇区的最后两个字节是不是“AA55”,如果是则认为这是一个有效的启动扇区,如果不是就会尝试下一个启动介质

5 引导扇区一般为磁盘的主分区的第一个扇区 共512B 其中 引导程序源码(boot,保护了磁盘的matadata)446B 和分区列表4*16B 以及结束标志AA55

6 boot可以找到 Loader模块
软盘是提前被格式化的(比如fat12格式),这样寻找文件就有了一定的运算规则。我们将这些运算规则再实现一遍,就能读取到软盘上的数据。
假如规定loader.bin文件名只能放在根目录14~33簇。
遍历根目录所在的所有簇,
foreach 簇
1) 将该簇号 转化为bios能识别的磁头号,柱面号和起始扇区号
2 )将该扇区的内容读入内存,从中寻找 文件名为 loader.bin 的条目,直到找到为止。
3 )根据即定的运算规则(这些规则我们自己用汇编再实现一遍),可以将该文件名对应数据区的扇区找出来
4 )加载那些扇区进内存即可。
loader被加载到es:bx处 =90100h,boot结束以后跳转到90100处
7 loader模块的作用
1)将os内核加载到内存中;
2)跳入保护模式。
loader 根据boot 找loader 的方法 找到 kernel.bin kernel.bin被加载到80000h处, kernel会被重新整理并转移到一个位置(原因不太清楚),
loader结束后跳转到 kernel被转移的位置
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值