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 notfound"라는 메시지가 표시되고 산업용 마더보드가 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

편집 2 - 솔루션

다음의 제안통신회사아주 근접한. 경로 이름을 바꾼 후대문자이제 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 프로젝트는 보안 부팅을 전혀 지원하지 않는 것으로 나타나므로 보안 부팅이 비활성화된 상태에서만 부팅 미디어를 사용할 수 있습니다.

관련 정보