深入理解GRUB源代码:从启动到文件系统
需积分: 34 189 浏览量
更新于2024-07-28
1
收藏 610KB PDF 举报
"GRUB源代码分析 - 简要介绍了GRUB启动加载器的源代码结构和工作流程,包括stage1、stage1.5和stage2的功能,以及stage2中的文件系统操作。"
GRUB(Grand Unified Bootloader)是计算机操作系统启动时使用的引导加载器,它的源代码分析对于理解其工作原理至关重要。GRUB作为一个迷你操作系统,具备自己的Shell、脚本支持和文件系统功能。在启动过程中,它扮演着加载其他操作系统的角色。
1. 启动流程概述
- BIOS通过中断INT 0x19加载MBR(主引导记录)到内存0x7c00处并执行。
- 如果GRUB被安装在MBR,安装程序会将stage1(512字节)复制到MBR。根据stage2的大小,安装程序会将stage1.5或stage2的位置信息嵌入到stage1中。
- stage1开始执行,根据之前的信息加载stage1.5或直接加载stage2并跳转执行。
- 如果使用stage1.5,它的唯一任务是加载stage2。最终,不论通过何种方式,都会进入stage2的执行阶段。
2. Stage2的工作
- stage2启动后,会将系统切换到保护模式,初始化C运行时环境,特别是BSS段。
- 它会查找配置文件(通常是menu.lst),若未找到,则启动一个Shell,等待用户输入命令。
- 用户输入的命令会被解析并执行,GRUB的工作循环在此展开。在执行boot命令后,如果条件允许,它会将控制权交给即将加载的操作系统。
3. Stage2的文件系统支持
- 在stage2/disk_io.c中,定义了grub_open、grub_close、grub_read和grub_dir等全局函数,用于文件操作。
- 为了简化驱动编写,GRUB并不直接支持磁盘操作,而是通过接口调用来实现对不同文件系统的兼容,这样可以方便地添加新的文件系统支持。
4. 文件系统驱动
- GRUB支持多种文件系统,如FAT、EXT2/3/4、NTFS等,这使得它可以加载不同类型的硬盘分区上的操作系统。
- 文件系统驱动通常在stage2中实现,每个驱动都有对应的初始化、读写和目录操作函数。
通过深入GRUB的源代码,开发者可以理解其如何处理各种启动场景,如何与硬件交互,以及如何解析和加载操作系统。这对于定制GRUB行为、修复启动问题或开发新的文件系统驱动都有极大的帮助。
605 浏览量
2024-06-05 上传
460 浏览量
381 浏览量
167 浏览量
322 浏览量
191 浏览量
2009-08-26 上传
179 浏览量
zsjalive
- 粉丝: 26
- 资源: 40