베어메탈 프로그래밍을 배우고 간단한 탁구 게임을 만들었습니다.
내 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에게 알려 줍니다 .
chainloader
grub에게 드라이브의 실제 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에서)