本文档详细介绍了 Ventoy 如何利用 GNU GRUB (GRand Unified Bootloader) 作为其基础,以及它所采用的自定义模块如何提供灵活而强大的启动环境。它涵盖了 GRUB 的配置结构、核心模块、启动流程,以及 Ventoy 如何扩展 GRUB 的功能以支持从 ISO 文件无需解压即可启动多个操作系统。
有关 UEFI 启动过程的特定信息,请参阅 UEFI 启动过程。
GRUB 作为 Ventoy 的主要引导加载程序,为 Legacy BIOS 和 UEFI 启动环境提供了框架。Ventoy 通过自定义配置和模块扩展了 GRUB 的能力,以实现从 ISO 文件直接启动。
来源: INSTALL/grub/grub.cfg19-100
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 ISO,Ventoy 执行以下关键操作
来源: INSTALL/grub/grub.cfg975-1143 INSTALL/grub/grub.cfg219-256
对于 Linux ISO,Ventoy
来源: INSTALL/grub/grub.cfg257-426 INSTALL/grub/grub.cfg674-877
Unix 系统(FreeBSD、DragonFly 等)接受特殊处理
来源: INSTALL/grub/grub.cfg583-609
Ventoy 通过自定义模块扩展 GRUB 以增强功能
Ventoy 向 GRUB 添加了多个模块以增强其功能
| 模块 | 目的 |
|---|---|
| 文件系统处理器 | 超越 GRUB 的原生支持,增强 ISO 处理能力 |
| 启动方法模块 | 针对不同启动方式的专用模块 |
| ISO 解析 | 解析和提取 ISO 中所需文件的模块 |
| Menu 渲染 | 支持主题的自定义菜单显示 |
来源: INSTALL/grub/grub.cfg19-23
Ventoy 支持多种替代启动模式以应对特殊情况
这些替代模式根据操作系统检测或用户选择进行激活。
来源: 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 实现与多个系统组件交互
来源: INSTALL/grub/grub.cfg README.md96-113
Ventoy 的 GRUB 配置和模块构成了其启动系统的核心,为直接从 ISO 文件启动各种操作系统提供了一个灵活而强大的框架。广泛的自定义功能和对不同启动方式的支持,使得 Ventoy 能够支持各种操作系统和启动场景。
Ventoy 中的 GRUB 实现展示了一种创新的引导加载程序设计方法,它极大地扩展了 GRUB 的原始功能,创造了一个多功能的多启动系统。