深入理解GRUB源代码:从启动到文件系统

需积分: 34 3 下载量 96 浏览量 更新于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行为、修复启动问题或开发新的文件系统驱动都有极大的帮助。