Grub 메뉴에 사용자 정의 .efi 추가

Grub 메뉴에 사용자 정의 .efi 추가

베어메탈 프로그래밍을 배우고 간단한 탁구 게임을 만들었습니다.

내 Linux는 /dev/sda 드라이브에 있습니다. pong의 .efi 파일을 /dev/sdb 드라이브에 배치한 다음 해당 드라이브에 efi/boot/bootx64.efi를 배치했습니다.

올바른 부팅 장치를 선택하여 이에 액세스하고 탁구를 칠 수 있습니다(부팅 시 del을 눌러 부팅 메뉴로 이동합니다. grub에서 부팅할 첫 번째 드라이브를 선택하면 Linux를 선택합니다. 두 번째 드라이브 선택을 선택하면 , 내 탁구 게임이 필요해요)

이제 /dev/sda에서 부팅하고, grub을 보고, linux 또는 pong을 선택할 수 있도록 이 부팅 옵션을 grub에 알리려면 어떻게 해야 합니까?

update-grub탁구 게임을 감지하지 않습니다. (단, /dev/sdc에서 Windows 부트로더를 감지합니다.)

답변1

Grub 구성을 수정해야 합니다. /boot/grub/grub.conf로 이동합니다.

/dev/hdc의 Windows 부분을 찾아 /dev/hdb와 같이 진행합니다.

# You should have already something like
title Windows         
set root=(hd2,0)         
chainloader +1

# Add 
title Game         
set root=(hd1,0)         
chainloader +1

root사용할 드라이브와 드라이브의 파티션을 grub에게 알려 줍니다 .

chainloadergrub에게 드라이브의 실제 MBR로 직접 이동하도록 지시 합니다 . BIOS 로더를 사용하여 드라이브에서 부팅할 수 있으므로 MBR이 올바르게 설정된 것입니다.

자세한 내용은:https://www.gnu.org/software/grub/manual/grub/grub.html

답변2

기존 grub 파일에서 영감을 얻어 /boot/grub/grub.cfg항목을 만들었습니다. 결과는 다음과 같습니다.

menuentry 'Pong' $menuentry_id_option 'play pong' {
    insmod part_gpt
    insmod ntfs
    search --no-floppy --fs-uuid --set=root 7a844a6a-9734-49a4-881d-662251c39cc3
    chainloader /my/custom/path/Pong.efi
}

여기서 part_gpt와 는 ntfs각각 파티션 테이블 유형과 파일 형식입니다. search주어진 UUID를 가진 드라이브를 찾습니다. chainloader해당 드라이브에서 부팅할 .efi 파일을 선택합니다 .

grub.cfg마지막 으로 /etc/grub.d/40_custom유사한 프로그램이 update_grub이 구성을 유지 하도록 이 항목을 추가했습니다 . (참고: Linux Mint 21에서)

관련 정보