grub2-自身启动-阅读笔记

1. BOIS->MBR执行0扇区的boot.s,它将第二扇区的diskboot.s读到GRUB_BOOT_MACHINE_BUFFER_SEG=0x7000先缓冲(实际地址是0x70000高于0x8000),再copybuf到内存0x8000处;

2. diskboot.s将其后面的扇区(grub内核)读到GRUB_BOOT_MACHINE_BUFFER_SEG=0x7000先缓冲(实际地址是0x70000高于0x8200),再copybuf0x8200处,其实这部分就是grub的内核了(下图第1幅)

3. 实际上内核一般情况下是压缩的,结构应该是 汇编代码(用来解压,startup.s)+压缩的内核及模块

4. 由于startup.s在内核首部,所以它正好处于0x8200处。diskboot.s从磁盘上将内核加载到0x8200后,就跳转到0x8200去执行startup.s(下图第1幅)

5. startup.s包括 初始化、用reedsolomn校验内核完整性、多重载入支持、lama解压(见后)、其它函数库。startup.s会将其身后的内核解压到1M的位置(下图第2幅)。

6. kernel.img被解压到1m地址后,生成kernel和modules,kernel解压后被移动到低地址0x8200继续执行(注意覆盖了原来startup.s的位置),modules依旧保存在1M以上的地址(模块的位置没变)

7. 加载模块,一般情况下进入normal模式

++++++++++++++++++++++++++++++++++++++


++++++++++++++++++++++++++++++++++++++++++++

modules部分先是一个module总头结构,然后是每个module信息;每个module又包含一个module头,紧接着一个elf文件格式

其中modules是以下的结构

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值