LINUX.ORG.RU

Hybrid ISO. grub-mkimage. Grub: out of range pointer

 ,


0

1

Пилю свою ОС с нескучными обоями спасательный Live-CD на основе Ubuntu c дополнительным специфическим софтом. Ранее сделал Live-CD на основе live-build, который сам кривой как сабля, поддержка его заброшена (но вроде бы кто-то взялся за него снова) и не собирает hybrid образы для загрузки и Legacy, и EFI.

Решил сделать свой bash-скрипт для сборки hybrid iso. Образ собирается, в VMWare в Legacy-режиме вроде бы грузится. В EFI-режиме возникла проблема с запуском Grub2 загрузчика.

Функция сборки fat-раздела с загрузчиком

CHROOT="chroot64"
ARCH="amd64"
ARCHG="x86_64-efi"
BINARY="binary64"

...............................
makegrub()
{
mkdir -p $BINARY/EFI/BOOT
#mkdir -p $BINARY/boot/grub

cat > $BINARY/EFI/BOOT/grub.cfg << EOF
set timeout=5
set color_highlight=black/light-magenta
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry 'Boot rescue system' {
    set gfxpayload=keep
    linux /live/vmlinuz boot=casper
    initrd /live/initrd
}
EOF
#    root (hd0)/live/filesystem.squashfs

# https://askubuntu.com/questions/91484/how-to-boot-ubuntu-from-efi-uefi

GRUB_MODULES="fat iso9660 part_gpt part_msdos ntfs ext2 exfat btrfs hfsplus udf
 font gettext gzio
 normal boot linux linux16 configfile loopback chain
 efifwsetup efi_gop efi_uga
 ls help echo elf search search_label search_fs_uuid search_fs_file
 test all_video loadenv
 gfxterm gfxterm_background gfxterm_menu"

#GRUB_MODULES="linux part_gpt ext2 normal gfxterm gfxterm_background gfxterm_menu test all_video loadenv fat"

grub-mkimage -o $BINARY/EFI/BOOT/bootx64.efi -p /EFI/BOOT -O $ARCHG  --verbose -c $BINARY/EFI/BOOT/grub.cfg  $GRUB_MODULES
#grub-mkstandalone -o $BINARY/EFI/BOOT/bootx64.efi -O $ARCHG --verbose.

#cp -r /usr/lib/grub/$ARCHG  $BINARY/EFI/BOOT

#rm -f $BINARY/EFI/BOOT/bootx64.efi; cp ./2/bootx64.efi $BINARY/EFI/BOOT
#rm -f $BINARY/EFI/BOOT/bootx64.efi; cp ./2/grubx64.efi $BINARY/EFI/BOOT/bootx64.efi

mkdir -p ./tmp
dd if=/dev/zero of=./efi.img bs=512 count=16384
mkfs.fat ./efi.img
mount ./efi.img ./tmp
cp -r $BINARY/EFI ./tmp
sync
umount ./tmp
rm -rf ./tmp
mv -f efi.img $BINARY

}

В итоге, при загрузке этого grub-а выводится

out of range pointer 0x48fb894800000000
Aborted. Press any key to exit.

... и вываливается в EFI shell.

Если подсунуть в качестве /EFI/BOOT/bootx64.efi загрузчик из ubuntu-mate-16.10-desktop-amd64.iso, переименовав из grubx64.efi, то появляется меню и ядро грузится (выпадая в итоге в panic, но это отдельная история).

Если подсунуть результат grub-mkstandalone (использует grub-mkimage и те же модули и ядро grub), то он тоже запускается.

Явно, что проблема в сборке grub-mkimage, образ получается немного меньше ubunt-овского. По всем описаниям, модулей для сборки указывается не так уж много, и то, что я видел и по логике должно быть я добавил - fat, part_msdos и т.д.

Кто-нибудь сталкивался с такой проблемой? Какие-то более информативные отладочные сообщения в grub можно включить?

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.