第一范文网 - 专业文章范例文档资料分享平台

GRUB2及启动过程详解

来源:用户分享 时间:2025/5/28 22:45:48 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

00,这部分代码请参考https://en.wikipedia.org/wiki/Master_boot_record 其中的Structure of a modern standard MBR, 我拷贝到这里作参考

被修改的这4个Byte[a7 36 08 00] 为32 bit Disk Signature,它是可选的, 我想可能是为了UEFI使用。

4) 0x01be~0x01fd, DPT硬盘分区表部分,保持不变grub2-install不会去修改

如果大家有兴趣可以去研究代码,知道grub2-install还有很多工作,这里就不在描述。

6.6. 硬盘总结

一块SCSI硬盘逻辑结构简单来说如下图所示:

LBA0: 固定存储MBR,一般GRUB2的boot.img就存放在这里

LBA1~LBA2047: 被称为“Embedding Area”“MBR Gap”,一般GRUB2的core.img就存放这里 LBA2048后面为我的两个硬盘分区,他们放在连续的区域

7. 启动过程

在前面介绍相关的知识,咱们回归到主题,现在开始启动过程

7.1. BIOS

系统上电之后,由固化在ROM里面的BIOS代码运行,进行硬件检查及初始化工作。有关BIOS具体运行原理在这里不作描述,有兴趣的请参考相关书籍。

最近的EFI作为BIOS的替代或升级,支持更多的功能,在这里也不做描述。

BIOS运行的最后两步操作我们必须知道

1) 加载LBA-0(或者CHS的0柱面、0磁头、1扇区)的MBR,共512字节到内存中0x7C00位置

2) 从内存0x7C00位置运行

我们知道拷贝到MBR中的正式GRUB2 boot.img,从这个时候开始,GRUB2正式登上历史舞台。但是请注意,并不是说BIOS就全部退出舞台,BIOS依然为GRUB2提供底层服务,比如硬盘读取等等(通过BIOS INT13 功能), GRUB2在一穷二白基础上还离不开BIOS

============================================ 地址0x7C00

============================================

这里有个问题,为什么BIOS会加载MBR到0x7C00的位置,而不是其他的位置? 答案请参考:

http://stackoverflow.com/questions/2058690/what-is-significance-of-memory-at-00007c00-to-booting-sequence

这个问题是应该由最初的IBM PC BIOS的设计者们(软件及硬件)来回答,但是简单的答案可能是0x7C00是距离地下最初32K安装内存有1K大小(512Bytes给MBR以及另外的512Bytes作运行时堆栈使用)

7.2. GRUB2中boot.img

BIOS加载MBR到0x7C00并从该处运行的时候,实际上就是boot.img开始运行了,我们的工作来了,我们将介绍boot.img将要干什么,可以从官方网站http://www.gnu.org/software/grub/.去使用git下载源码, 源码是采用AT&T风格的汇编。

这里我们采用反汇编的方式取得Intel风格代码 1) 我们已经在6.2MBR中使用DD命令导出的MBR 2) 安装nasm

[root@controller i386-pc]# yum install nasm Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: mirrors.163.com * updates: mirrors.btte.net

Package nasm-2.10.07-7.el7.x86_64 already installed and latest version Nothing to do

3) 进行反汇编

[root@controller image]# ndisasm -o 0x7c00 mbr.bin > mbr.asm

这里加入-o 0x7c00是告诉反汇编器这段代码在0x7c00处运行,使生成的mbr.asm更加容易理解

在这里我把反汇编的代码mbr.asm作为附件供参考,后面的boot.S是官方源码:

mbr.asmboot.S

注意:boot.S是AT&T汇编语法,反编译的mbr.asm是Intel汇编语法,两者有区别,如果感兴趣,请参阅相关文档进行学习。下面详细讲解主要流程。

7.2.1. Step1无条件跳转

/*位于0x7C00的语句就是一条跳转语句, 跳转到0x7c65处*/

00007C00 EB63 jmp short 0x7c65

7.2.2. Step2 初始化

/* 禁止中断 目前是不安全的*/

00007C65 FA cli 00007C66 90 nop 00007C67 90 nop

/*

搜索更多关于: GRUB2及启动过程详解 的文档
GRUB2及启动过程详解.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4o8p67lo6z9vfqx3d4pq7px008twlp015cj_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top