菜单

GRUB 配置和模块

相关源文件

目的与范围

本文档详细介绍了 Ventoy 如何利用 GNU GRUB (GRand Unified Bootloader) 作为其基础,以及它所采用的自定义模块如何提供灵活而强大的启动环境。它涵盖了 GRUB 的配置结构、核心模块、启动流程,以及 Ventoy 如何扩展 GRUB 的功能以支持从 ISO 文件无需解压即可启动多个操作系统。

有关 UEFI 启动过程的特定信息,请参阅 UEFI 启动过程

GRUB 在 Ventoy 中的作用

GRUB 作为 Ventoy 的主要引导加载程序,为 Legacy BIOS 和 UEFI 启动环境提供了框架。Ventoy 通过自定义配置和模块扩展了 GRUB 的能力,以实现从 ISO 文件直接启动。

来源: INSTALL/grub/grub.cfg19-100

主要 GRUB 配置结构

Ventoy 中的主要 GRUB 配置文件定义了实用函数和启动流程逻辑。它以模块化的方式组织,以处理各种操作系统和启动场景。

核心功能

主配置包含许多实用函数

功能目的
ventoy_pause暂停执行并等待用户输入
ventoy_debug_pause用于调试目的的条件性暂停
ventoy_max_resolution设置最佳视频分辨率
ventoy_cli_console切换到命令行控制台
ventoy_gui_console切换到图形控制台
ventoy_language加载语言配置
ventoy_ext_menu加载扩展或自定义菜单选项
ventoy_show_help显示帮助信息

来源: INSTALL/grub/grub.cfg24-134

操作系统检测系统

Ventoy 实现了一个复杂的操作系统检测系统,以确定如何启动不同类型的 ISO

检测过程检查 ISO 中的文件和结构,以识别操作系统类型,然后决定相应的启动过程。

来源: INSTALL/grub/grub.cfg141-187

启动处理逻辑

Windows 启动处理

对于 Windows ISO,Ventoy 执行以下关键操作

  1. 检查 Windows 特定的文件,如 BCD、boot.wim 等。
  2. 定位并处理 WIM 文件以实现正确启动
  3. 处理不同 Windows 版本的启动配置
  4. 为特殊场景支持 WimBoot 模式

来源: INSTALL/grub/grub.cfg975-1143 INSTALL/grub/grub.cfg219-256

Linux 启动处理

对于 Linux ISO,Ventoy

  1. 通过各种检测方法定位 initrd 文件
  2. 处理特定发行版的配置
  3. 准备链式加载数据
  4. 适应不同的 Linux 启动机制

来源: INSTALL/grub/grub.cfg257-426 INSTALL/grub/grub.cfg674-877

Unix 启动处理

Unix 系统(FreeBSD、DragonFly 等)接受特殊处理

  1. 检测 Unix 变体和版本
  2. 安装适当的内核模块
  3. 针对不同 Unix 发行版的特殊配置

来源: INSTALL/grub/grub.cfg583-609

GRUB 模块扩展

Ventoy 通过自定义模块扩展 GRUB 以增强功能

核心 Ventoy GRUB 模块

Ventoy 向 GRUB 添加了多个模块以增强其功能

模块目的
文件系统处理器超越 GRUB 的原生支持,增强 ISO 处理能力
启动方法模块针对不同启动方式的专用模块
ISO 解析解析和提取 ISO 中所需文件的模块
Menu 渲染支持主题的自定义菜单显示

来源: INSTALL/grub/grub.cfg19-23

启动流程扩展

替代启动模式

Ventoy 支持多种替代启动模式以应对特殊情况

  1. WimBoot 模式:对于 Windows ISO,提供了一种替代的启动方法
  2. GRUB2 模式:对于需要特殊处理的某些 Linux 发行版
  3. 内存磁盘模式:在启动前将整个 ISO 加载到内存中

这些替代模式根据操作系统检测或用户选择进行激活。

来源: INSTALL/grub/grub.cfg975-1143

链式加载过程

链式加载过程是 Ventoy 操作的关键部分,它允许将控制权传递给 ISO 内的引导加载程序

链式加载过程在 Legacy BIOS 和 UEFI 环境之间有所不同,两者会使用适当的加载程序。

来源: INSTALL/grub/grub.cfg640-656 INSTALL/grub/grub.cfg788-894

自定义和扩展

插件集成

Ventoy 的 GRUB 配置支持插件,允许扩展功能

function ventoy_ext_menu {    
    if [ -e $vt_plugin_path/ventoy/ventoy_grub.cfg ]; then
        set ventoy_new_context=1
        configfile $vt_plugin_path/ventoy/ventoy_grub.cfg
        unset ventoy_new_context
    else
       echo "ventoy_grub.cfg NOT exist."
       echo -en "\n$VTLANG_ENTER_EXIT ..."
       read vtInputKey
    fi
}

来源: INSTALL/grub/grub.cfg101-111

语言支持

Ventoy 通过专门的 GRUB 配置支持多语言

function ventoy_language {
    configfile $prefix/menulang.cfg
}

function ventoy_load_menu_lang_file {
    vt_load_file_to_mem "auto" $prefix/menu.tar.gz vtoy_menu_lang_mem
    loopback vt_menu_tarfs mem:${vtoy_menu_lang_mem_addr}:size:${vtoy_menu_lang_mem_size}    
}

来源: INSTALL/grub/grub.cfg88-90 INSTALL/grub/grub.cfg136-139

Ventoy 的 GRUB 配置与其他组件的交互

Ventoy 的 GRUB 实现与多个系统组件交互

来源: INSTALL/grub/grub.cfg README.md96-113

结论

Ventoy 的 GRUB 配置和模块构成了其启动系统的核心,为直接从 ISO 文件启动各种操作系统提供了一个灵活而强大的框架。广泛的自定义功能和对不同启动方式的支持,使得 Ventoy 能够支持各种操作系统和启动场景。

Ventoy 中的 GRUB 实现展示了一种创新的引导加载程序设计方法,它极大地扩展了 GRUB 的原始功能,创造了一个多功能的多启动系统。