새로운 부트로더를 구축하려고 하는데 안타깝게도 해당 주제에 대해 아는 바가 많지 않습니다. 나는 다음의 지침을 따르고 있습니다.PXE를 통해 UEFI 시스템으로 설치 프로그램을 부팅하는 중 문제 발생.
나는 먼저 다음을 실행합니다.
grub-mknetdir --net-directory=/srv/tftp/ --subdir=/boot/grub
Netboot directory for x86_64-efi created. Configure your DHCP server to point to /srv/tftp/boot/grub/x86_64-efi/core.efi
이것이 작동하는 것 같아서 다음 명령으로 넘어갔습니다.
root@vogon:~# grub-mkimage -O x86_64-efi /srv/tftp/boot/grub/x86_64-efi/core.efi --prefix='tftp,192.168.50.9)/boot/grub' efinet tftp
grub-mkimage: error: cannot open `/srv/tftp/boot/grub/x86_64-efi/core.efi.mod': No such file or directory.
다음 .mod
파일을 볼 수 있습니다 /srv/tftp/boot/grub/x86_64-efi/
.
root@vogon:~# file /srv/tftp/boot/grub/x86_64-efi/*
/srv/tftp/boot/grub/x86_64-efi/acpi.mod: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
/srv/tftp/boot/grub/x86_64-efi/adler32.mod: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
/srv/tftp/boot/grub/x86_64-efi/affs.mod: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
/srv/tftp/boot/grub/x86_64-efi/afs.mod: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
...
둘 efinet.mod
다 tftp.mod
존재하지만 core.efi.mod
물론 존재하지 않습니다. 이 core.efi
파일은 다음과 다릅니다 .mod
.
root@vogon:~# file /srv/tftp/boot/grub/x86_64-efi/core.efi
/srv/tftp/boot/grub/x86_64-efi/core.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
이 문제를 어떻게 해결할 수 있나요?
답변1
일반적으로 이러한 명령은 표준 tftp 디렉터리에 호스팅되는 BIOS 및 uefi에 대한 부팅 이미지를 생성해야 합니다.
apt-get install grub-pc-bin grub-efi-amd64-bin
mkdir -p /srv/tftp
grub-mknetdir --net-directory /srv/tftp/
verbose 플래그를 사용하면 grub-mkimage
사용 중인 명령을 볼 수 있습니다 grub-mknetdir
.
# grub-mknetdir --net-directory /srv/tftp/ -v
...
grub-mknetdir: info: grub-mkimage --directory '/usr/lib/grub/i386-pc' --prefix '/boot/grub' --output '/srv/tftp/boot/grub/i386-pc/core.0' --dtb '' --format 'i386-pc-pxe' --compression 'auto' 'tftp' 'pxe'
...
grub-mknetdir: info: grub-mkimage --directory '/usr/lib/grub/x86_64-efi' --prefix '/boot/grub' --output '/srv/tftp/boot/grub/x86_64-efi/core.efi' --dtb '' --format 'x86_64-efi' --compression 'auto' 'tftp' 'efinet'
이러한 명령을 사용자 정의에 간단히 적용할 수 있습니다.
grub-mkimage --directory '/usr/lib/grub/x86_64-efi' --prefix '(tftp,192.168.50.9)/boot/grub' --output './core.efi' --format 'x86_64-efi' --compression 'auto' 'tftp' 'efinet'
답변2
root@vogon:~# grub-mkimage -O x86_64-efi /srv/tftp/boot/grub/x86_64-efi/core.efi --prefix='tftp,192.168.50.9)/boot/grub' efinet tftp
이 옵션을 놓쳤습니다 -o
.
노력하는 대신세워핵심 이미지 /srv/tftp/boot/grub/x86_64-efi/core.efi
분명히 원하는 대로 이 명령은 옵션이 아닌 모든 인수가 GRUB 모듈 이름이라고 가정하므로 접미사를 추가 .mod
하고 .../core.efi.mod
이를 GRUB 이미지에 병합하여 기본적으로 표준 출력으로 출력합니다.
다음으로 변경해 보세요.
grub-mkimage -O x86_64-efi -o /srv/tftp/boot/grub/x86_64-efi/core.efi --prefix='tftp,192.168.50.9)/boot/grub' efinet tftp
문제가 발생하는 경우 적어도 GRUB의 오류 메시지가 표시되도록 UEFI 디스플레이 드라이버 모듈을 포함할 efi_gop
수도 있습니다.efi_uga