论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
主机系统
›
linux
›
OS开辟条记(2)——GRUB启动流程
OS开辟条记(2)——GRUB启动流程
悠扬随风
论坛元老
|
2024-12-7 10:14:17
|
显示全部楼层
|
阅读模式
楼主
主题
1835
|
帖子
1835
|
积分
5505
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
GRUB如何突破实模式的限制
BIOS与MBR引导机制
BIOS会在启动时,检查逻辑0扇区(即硬盘的第一个扇区)的结尾是否存在标志 0x55, 0xaa,以此判断该扇区是否可引导。按照传统的MBR(Master Boot Record)引导流程,逻辑0扇区包含一个特殊的引导程序。这个程序的使命是检查位于逻辑0扇区偏移 0x1BE 处的分区表。分区表最多可以记录四个分区,这也是为什么 MBR 分区的硬盘只能有四个主分区的缘故原由。
在分区表中,每个分区可以有一个“可引导”标志。MBR引导程序会根据某种规则选取一个被标志为“可引导”的分区,将该分区的第一个扇区(称为VBR,Volume Boot Record)加载到内存中(一般加载到地点 0x7C00 以包管兼容性)。随后,程序跳转到VBR,由VBR负责加载并启动该分区中的操纵体系。
MBR和VBR的局限性
然而,MBR和VBR的大小都仅有一个扇区,也就是512字节,这对稍微复杂的引导程序来说已经不够用。此外,在16位实模式下,CPU的寻址范围最大只有1MB(实际可用空间还小于1MB,需思量BIOS和其他数据占用)。因此,对于体积超过1MB或需要加载到1MB以上地点的内核文件,MBR和VBR的能力不足。
16位的寻址限制
切换到保护模式虽然可以突破1MB寻址范围的限制,但由于仅实模式支持调用BIOS功能,在保护模式下无法直接调用BIOS来实现硬盘驱动和文件体系管理。这就需要自行实现这些功能,极大地增加了引导程序的复杂度。为了避免在引导内再实现一边磁盘驱动和文件体系,我选择了使用GRUB。
GRUB的办理方案
在GRUB中,将被称为stage1.5阶段的GRUB核心加载器(从磁盘启动是diskboot,从光盘是cdboot等等)存放在存放磁盘中的某个空闲空间(默认是MBR后的一个扇区),一个定制的MBR引导程序(如 boot.S,编译后生成 boot.img)负责加载这一阶段的程序到内存中。
这时候就又出现一个问题,怎么存放GRUB核心呢?GRUB提供了两种方式:
使用磁盘未分配空间
GRUB将包含核心功能的 core.img 写入硬盘上未被分区表分别的空闲空间。
基于文件体系引导
core.img 被看成一个普通文件存储在文件体系中,由MBR程序加载到内存中。
GRUB如何找到core.img
如果采用基于文件体系的方式,问题在于MBR程序如何知道 core.img 的具体位置。GRUB 的core.img 是通过grub-mkimage命令生成的,它由多个部门组成,包括:
diskboot
:负责从磁盘加载 core.img 的第一部门,大小为一个扇区。
decompresser
:用于解压 grub-core,以支持压缩后的存储形式。
core
:核心程序模块,可以根据需要加载各种功能扩展(grub模块)。
当执行 grub-install 时,工具会自动将 diskboot 的位置写入 boot.img 中。diskboot 的末尾包含一个 blocklist,用于记录 grub-core 的各个部门在磁盘上的位置。如许,diskboot 可以顺遂加载完备的 grub-core。
GRUB的引导过程
综上,GRUB 2 的启动流程如下:
MBR引导
BIOS 加载 MBR(即 boot.img),运行其中的引导程序。
加载diskboot
MBR 程序根据记录的位置加载 diskboot。
加载并解压grub-core
diskboot 根据 blocklist 读取并加载 grub-core,须要时解压。
启动操纵体系内核
grub-core 终极加载目标操纵体系的内核文件,并完成引导。
感想
稍微深入相识过GRUB后,感觉像是迷你内核一样,功能这么丰富。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
悠扬随风
论坛元老
这个人很懒什么都没写!
楼主热帖
(8) PyQt 设计并实现【工厂扫码装箱系 ...
Java Long类parseLong()方法具有什么功 ...
王心凌再次爆火,为了防止收费,我连夜 ...
IDEA: 如何导入项目模块 以及 将 Java ...
【Web前端】HTML详解(上篇)
命题逻辑等值演算
Uniapp进行APP打包——iOS 系统 ...
详解kubernetes五种暴露服务的方式 ...
Oracle ORA-10917: TABLESPACE GROUP c ...
互联网官方协议标准(rfc5000) ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Nosql
快速回复
返回顶部
返回列表