syslinux UEFI启动:根据硬件标识符自动选择启动选项

syslinux UEFI启动:根据硬件标识符自动选择启动选项

我从 USB 介质启动,并且使用 syslinux EFI 启动。

我在两台不同的笔记本电脑上启动相同的媒体,并且 syslinux.cfg 中有 2 个菜单选项,每台笔记本电脑一个。

目前,我必须为每台笔记本电脑手动选择正确的菜单选项。

有没有某种方法可以自动执行此操作,并syslinux自动识别正在启动的笔记本电脑?也许基于一些唯一的硬件标识符?

我怎么能这样做呢?

这是我的EFI/BOOT/syslinux.cfg

DEFAULT menu.c32
PROMPT 0
MENU TITLE UEFI boot menu
MENU AUTOBOOT Booting AAA in # seconds

LABEL AAA
MENU LABEL AAA
KERNEL menu.c32
APPEND /AAA/menu

LABEL BBB
MENU LABEL BBB
KERNEL menu.c32
APPEND /BBB/menu

文件/AAA/menu/BBB/menu然后为每台笔记本电脑提供正确的启动选项。

所以基本上,我需要在笔记本电脑 A 上自动启动/AAA/menu,在笔记本电脑 B 上/BBB/menu

答案1

根据我在 arch wiki 上读到的内容:关联

我认为这是可能的,但很困难,使用包extlinux自带的syslinux,并链加载两次 syslinux。但我还没有测试过。

如果您必须为两台以上不同的计算机执行此操作,则工作量很大。因为您将需要 10 台不同的计算机,USB 驱动器上有 10 个不同的分区,每个分区都有内核和 initrd 的副本,以及一些 syslinux 文件。

每台笔记本电脑都必须具有 esp 启动分区:/dev/sda1或相同的/dev/sdaX.如果不是,这个方法就行不通。

以下是继续的方法:

1. 在笔记本A上安装extlinux:

在笔记本电脑 A 上,假设 esp 启动分区为 /dev/sda1:

mkdir ./mntefi
sudo mount /dev/sda1 ./mntefi
sudo mkdir ./mntefi/boot
sudo mkdir ./mntefi/boot/syslinux

# install extlinux:
sudo extlinux -i ./mntefi/boot/syslinux/ 

# copy *.c32 files:
sudo cp /usr/lib/syslinux/bios/*.c32 ./mntefi/boot/syslinux

创建文件./mntefi/boot/syslinux/syslinux.cfg

TIMEOUT 0

UI menu.c32

LABEL MAIN
    COM32 chain.c32
    APPEND hd1 3

该文件将链接到 USB 驱动器上的第三个分区(如果笔记本电脑 A 只有一个内部驱动器,则为 hd1),其中将包含笔记本电脑 A 的 syslinux.cfg。

2. 在 USB 驱动器上创建分区 3 (/dev/sdb3):

分区可以很小,只需要包含 syslinux 和内核以及 initrd 即可。

3. 在 USB 驱动器的分区 3 上安装 extlinux:

mkdir ./mnt3
sudo mount /dev/sdb3 ./mnt3
sudo mkdir ./mnt3/boot
sudo mkdir ./mnt3/boot/syslinux

# install extlinux:
sudo extlinux -i ./mnt3/boot/syslinux/ 

# copy *.c32 files:
sudo cp /usr/lib/syslinux/bios/*.c32 ./mnt3/boot/syslinux

创建文件./mnt3/boot/syslinux/syslinux.cfg

DEFAULT menu.c32
PROMPT 0
MENU TITLE UEFI boot menu
MENU AUTOBOOT Booting AAA in # seconds

LABEL AAA
MENU LABEL AAA
KERNEL menu.c32
APPEND /AAA/menu

该文件将显示笔记本电脑 A 的菜单,菜单文件位于分区 3 的目录中/AAA

在菜单文件中,内核必须具有以下参数:root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw,以及 USB 驱动器上安装 linux 的分区的 UUID。

4. USB 驱动器的主 syslinux.cfg:

在安装 Linux 系统的 USB 驱动器上,假设在分区 /dev/sda2 上,创建一个文件EFI/BOOT/syslinux.cfg

TIMEOUT 0

UI menu.c32

LABEL MAIN
    COM32 chain.c32
    APPEND hd0 1

该文件将链接在笔记本电脑内部驱动器的 esp 启动分区上,假设它是笔记本电脑内部驱动器上的第一个分区。

它将始终链接在笔记本电脑内部驱动器的第一个分区上找到的 syslinux。

但也许 syslinux 从它启动的驱动器开始对驱动器进行编号,如果是这样,那么它需要附加hd1 1而不是hd0 1

5. 对每台笔记本电脑重复步骤 1、2 和 3。

请注意,在步骤 1 中,syslinux.cfg 必须链接到步骤 2 中创建的新分区。

相关内容