关于UEFI的启动流程
- 参考借鉴:GRUB官方手册 | grub-2.04-for-windows | 制作Grub2引导 | )
UEFI主机开机后会搜索所有磁盘的第一个fat32分区下看是否存在/efi/boot/bootia32.efi或者bootx64.efi,如果存在则添加这个启动项
UEFI通过执行磁盘的第一个fat32分区下的/efi/boot/bootia32.efi或者bootx64.efi来实现对系统的引导
boot[ia32][x64].efi它只是一个规定,任意efi文件改成boot[ia32][x64].efi都会在启动项被选择时加载并执行
Windows是由bootmgfw.efi引导启动,Linux一般是由grubx64.efi引导启动
当然你也可以使用efibootmgr之类的工具手动创建efi文件在其他路径的启动项
有的UEFI默认
startup.nsh
为初始启动脚本,内容可以为:fs0:\efi\boot\bootx64.efi
Debian下GRUB的安装
- 安装grub的管理工具及本体
1 | sudo apt install grub-efi-amd64 grub-efi-ia32 grub-efi-arm64 |
- 使用grub-install安装GRUB到指定位置
1 | sudo grub-install --target=x86_64-efi --efi-directory=/mnt/ --removable |
Win32系统下制作GRUB单文件
可使用grub-mkimage命令将bootia32.efi或bootx64.efi与其所需的模块合并成为单文件
下载解压后在grub-2.04-for-windows文件夹下打开命令提示符执行下面命令
1 | grub-mkimage.exe -d x86_64-efi -c grub.cfg -p /efi/boot -o bootx64.efi -O x86_64-efi boot linux linux16 chain loopback search net disk part_gpt part_msdos disk blocklist btrfs cpio exfat ext2 f2fs fat hfs hfsplus iso9660 jfs ntfs procfs squash4 tar xfs zfs date echo ls configfile normal file sleep true minicmd play read acpi reboot halt efifwsetup efi_gop efi_uga video_bochs video_cirrus gfxmenu gfxterm gfxterm_background gfxterm_menu font jpeg png |
- 命令参数所代表的含义
1 | 32位:grub-mkimage.exe -d i386-efi -c grub.cfg -p /efi/boot -o bootia32.efi -O i386-efi |
- 要集成的模块名
1 | # 部分模块,集成下面的模块可胜任大部分的引导工作 |
用efibootmgr管理固件中的启动项
安装:
sudo apt install efibootmgr
显示现有的启动项
1 | leux@Debian:~$ efibootmgr |
- 添加自定义启动项
1 | sudo efibootmgr -c -w -L "GRUB" -d /dev/sda -p 1 -l \\EFI\\Boot\\bootx64.efi |
- 开关及删除和修改启动顺序操作
1 | sudo efibootmgr -a -b 0000 # 启用标号为0000的启动项 |
使用GRUB引导系统的极简配置文件
1 | # /efi/boot/grub.cfg |