GRUB 0.93源码详解:Minios结构与文件系统接口

4星 · 超过85%的资源 需积分: 33 101 下载量 73 浏览量 更新于2024-08-02 2 收藏 604KB PDF 举报
GRUB (Grand Unified Bootloader) 是一种开源的多平台启动加载器,常用于Linux发行版中作为引导装载程序。本文是对GRUB 0.93版本源代码的深入分析,作者phyma将其比喻为一个mini操作系统(minios),具有shell支持和脚本功能,同时具备文件系统管理能力。 GRUB的启动流程可以分为几个步骤: 1. **BIOS阶段**: - BIOS通过INT 0x19中断调用GRUB的MBR部分(即stage1),MBR将stage1(初始512字节)加载到内存地址0x7C00并开始执行。 - 安装GRUB时,会根据stage2的大小,可能将stage1.5或stage2的位置信息嵌入到stage1中,以便引导后续步骤。 2. **stage1执行**: - stage1负责基本的引导过程,如检查磁盘分区并加载stage1.5或stage2,然后跳转执行。 - stage1.5主要作用是加载stage2,之后就不再参与后续操作。 3. **stage2运行**: - stage2作为真正的OS核心,首先会将系统切换到保护模式并设置C运行环境。 - 它会寻找config文件(菜单列表),如果没有则启动shell,让用户输入命令。 - grub的主要工作是命令行交互,解析用户输入并执行相应的操作,包括加载kernel、initrd(初始RAM磁盘)和链式加载器等。 4. **文件系统接口**: - 在stage2的disk_io.c模块中,grub提供了一系列函数(如grub_open, grub_close, grub_read, grub_dir)作为文件系统操作的接口,用于打开、关闭、读取和切换目录,以支持对引导加载过程中的文件和数据的访问和管理。 5. **核心功能**: - GRUB的核心目标是加载和管理不同的操作系统,因此在用户执行"boot"命令后,会将控制权交给即将启动的操作系统,让其接管系统的运行。 理解GRUB源代码对于深入学习Linux内核启动机制以及如何定制和扩展启动流程至关重要。通过分析源代码,开发者可以更好地掌握GRUB的内部结构、命令处理逻辑和文件系统管理机制,这对于优化启动速度、创建自定义菜单选项或修复启动问题具有重要意义。