在 UEFI 上创建可启动 syslinux USB

在 UEFI 上创建可启动 syslinux USB

我们使用 Centos 8 机器为我们的产品创建 syslinux 可启动 USB 安装程序。创建的 USB 现在仅支持具有 BIOS(或打开 CSM 模式)的目标计算机,但我们需要更新它以支持 UEFI。

syslinux.org 上的说明非常稀疏,几天的搜索也没有成功。

尝试在 HP EliteDesk 上启动始终会导致“找不到 BootDevice”。 USB 启动已在机器的 BIOS 中启用。

我们正在做什么

  1. USB分区
  2. 复制 syslinux 文件
  3. 复制syslinux.cfg
  4. 运行syslinux命令进行安装

关于我做错了什么的任何提示,或者可能是关于如何执行此操作的更好的一组说明的指针?

分割

(parted) mkpart  
Partition name?  []? EFI 
File system type?  [ext2]? fat32 
Start? 512MB 
End? 1024MB 
(parted) set 1 esp 
New state?  [on]/off? on 
(parted) mkpart 
Partition name?  []? Installer 
File system type?  [ext2]? fat32 
Start? 1024MB End? 100% 
(parted) p 
Model: Generic Flash Disk (scsi) 
Disk /dev/sdc: 8053MB 
Sector size (logical/physical): 512B/512B 
Partition Table: gpt Disk Flags:

Number  Start   End     Size    File system  Name       Flags
1      512MB   1024MB  513MB   fat32        EFI        boot, esp
2      1024MB  8052MB  7028MB  fat32        Installer

复制文件

复制后,EFI分区包含:

# find /mnt/usb
/mnt/usb
/mnt/usb/efi
/mnt/usb/efi/boot
/mnt/usb/efi/boot/ldlinux.e64
/mnt/usb/efi/boot/syslinux.efi
/mnt/usb/efi/boot/libcom32.c32
/mnt/usb/efi/boot/vesamenu.c32
/mnt/usb/efi/boot/libutil.c32
/mnt/usb/efi/boot/menu.c32

安装系统Linux

# umount /mnt/usb
# syslinux -d /efi/boot --install /dev/sdc1

编辑我

我尝试根据建议更改文件名电信公司但引导加载程序没有启动。 (在 HP EliteDesk 800 和工业主板上进行了尝试)。

HP机器提示“BootDevice not found”,工业主板直接进入BIOS。

为了进行测试,我们只是想让引导加载程序被识别。

BIOS 配置:CSM 关闭,引导设备设置为“UEFI:KIOXIA 1”。

parted /dev/sdb p
Model: KIOXIA TransMemory (scsi)
Disk /dev/sdb: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End     Size   File system  Name  Flags
 1      512MB  1024MB  513MB  fat32        EFI   boot, esp

USB 包含:

mount /dev/sdb1 /mnt/usb
[root@bluebox /]# cd /mnt/usb
[root@bluebox usb]# find .
.
./efi
./efi/boot
./efi/boot/bootx86.efi
./efi/boot/ldlinux.e64
./efi/boot/libcom32.c32
./efi/boot/libutil.c32
./efi/boot/menu.c32
./efi/boot/syslinux.cfg
./efi/boot/vesamenu.c32
[root@bluebox usb]# cd /
[root@bluebox /]# umount /mnt/usb
[root@bluebox /]# syslinux -d /efi/boot --install /dev/sdb1
[root@bluebox /]# echo $?
0

编辑二 - 解决方案

来自的建议电信公司非常接近。将路径重命名为后大写字母syslinux 现在加载。

具体来说,在 USB 上/efi/boot/bootx86.efi必须/EFI/BOOT/BOOTx86.EFI

参考链接

答案1

在可移动媒体上,x86_64 架构的 UEFI 启动文件名应为\efi\boot\bootx64.efi.

所以在你的情况下:

mv /mnt/usb/efi/boot/syslinux.efi /mnt/usb/efi/boot/bootx64.efi

尽管 UEFI 规范规定名称应不区分大小写,但已知某些 UEFI 实现在此处存在错误。因此,如果此路径不起作用,您可能必须尝试大写版本 ( /mnt/usb/EFI/BOOT/BOOTx64.EFI),看看是否会更好。

请注意,如果启用安全启动,固件会将为引导加载程序加载的文件分配的所有内存标记为处理器不可执行,除非该文件是具有有效安全启动签名的 Windows 样式 PE+ 二进制文件。据我所知,Syslinux 的ldlinux.e64和文件可能无法满足该要求。*.c32

看来 Syslinux 项目根本不支持安全启动,因此您的启动媒体只能在禁用安全启动的情况下使用。

相关内容