added EFI 32bit support via GRUB2-expanded all the config with variables

This commit is contained in:
maideii 2017-10-10 11:31:49 +08:00
parent ccf8fddc1e
commit c268754d0d
6 changed files with 55 additions and 37 deletions

View File

@ -53,6 +53,7 @@
RUN_FSCK="yes"
RUN_FSCK_DISKS=""
SYSLINUX_DEFAULT=""
GRUB_DEFAULT=""
NBD_DEVS="0"
FLASH_FREE_MIN="5"
@ -153,6 +154,13 @@
portable)
SYSLINUX_DEFAULT="run"
;;
grub_live)
LIVE=yes
GRUB_DEFAULT="\"Live\""
;;
grub_portable)
GRUB_DEFAULT="\"Run\""
;;
overlay)
OVERLAY=yes
;;
@ -716,6 +724,20 @@
fi
fi
fi
if [ -n "$GRUB_DEFAULT" -a -f /flash/grub.cfg ]; then
if grep -q "^menuentry $GRUB_DEFAULT" /flash/grub.cfg; then
crnt_default="$(awk '/^set default/ {print substr($2,9,19)}' /flash/grub.cfg)"
if [ ! "$crnt_default" = "$GRUB_DEFAULT" ]; then
progress "Updating /flash/grub.cfg [$crnt_default -> $GRUB_DEFAULT]"
mount -o remount,rw /flash
sed -i "s/^set default=.*/set default=$GRUB_DEFAULT/" /flash/grub.cfg
[ -f /flash/EFI/BOOT/grub.cfg ] && cp /flash/grub.cfg /flash/EFI/BOOT/grub.cfg
mount -o remount,ro /flash
fi
fi
fi
}
check_out_of_space() {

View File

@ -1,8 +0,0 @@
GRUB_SAVEDEFAULT=true
set timeout="0"
set default="0"
menuentry "LibreELEC"{
search --set -f /KERNEL
linux /KERNEL boot=LABEL=System disk=LABEL=Storage quiet
}

View File

@ -1,21 +0,0 @@
set timeout="5"
set default="3"
menuentry "LibreELEC Boot Menu"{
set
}
menuentry ' '{
set
}
menuentry "1. Installer"{
search --set -f /KERNEL
linux /KERNEL boot=LABEL=LIBREELEC installer quiet tty vga=current
}
menuentry "2. Live"{
search --set -f /KERNEL
linux /KERNEL boot=LABEL=LIBREELEC live quiet tty vga=current
}
menuentry "3. Portable"{
search --set -f /KERNEL
linux /KERNEL boot=LABEL=LIBREELEC disk=UUID=132e735c-fc99-4639-8138-c8db4f7698b5 portable quiet
}

View File

@ -58,14 +58,12 @@ makeinstall_target() {
cd $PKG_BUILD/grub-core
$PKG_BUILD/grub-mkimage -d . -o bootia32.efi -O i386-efi -p /EFI/BOOT \
boot chain configfile ext2 fat linux search \
efi_gop efi_uga gettext gzio part_gpt \
loadenv loadbios memrw
efi_gop efi_uga part_gpt gzio \
gettext loadenv loadbios memrw
mkdir -p $INSTALL/usr/share/grub
cp -P $PKG_BUILD/grub-core/bootia32.efi $INSTALL/usr/share/grub
cp -P $PKG_DIR/config/grub-postinstall.cfg $INSTALL/usr/share/grub/grub.cfg
mkdir -p $TOOLCHAIN/share/grub
cp -P $PKG_BUILD/grub-core/bootia32.efi $TOOLCHAIN/share/grub
cp -P $PKG_DIR/config/grub.cfg $TOOLCHAIN/share/grub
}

View File

@ -268,6 +268,13 @@ do_install_quick() {
echo "LABEL linux" >> $TMPDIR/part1/extlinux.conf
echo " KERNEL /KERNEL" >> $TMPDIR/part1/extlinux.conf
echo " APPEND boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE $EXTLINUX_PARAMETERS quiet" >> $TMPDIR/part1/extlinux.conf
echo "set timeout=\"0\"" > $TMPDIR/part1/grub.cfg
echo "set default=\"LibreELEC\"" >> $TMPDIR/part1/grub.cfg
echo "" >> $TMPDIR/part1/grub.cfg
echo "menuentry \"LibreELEC\" {" >> $TMPDIR/part1/grub.cfg
echo " search --set -f /KERNEL" >> $TMPDIR/part1/grub.cfg
echo " linux /KERNEL boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE quiet" >> $TMPDIR/part1/grub.cfg
echo "}" >> $TMPDIR/part1/grub.cfg
# uefi boot / hybrid mode
if [ "$UEFI" = "1" ]; then
mv $TMPDIR/part1/extlinux.conf $TMPDIR/part1/syslinux.cfg
@ -275,9 +282,9 @@ do_install_quick() {
cp $TMPDIR/part1/syslinux.cfg $TMPDIR/part1/EFI/BOOT
cp /usr/share/syslinux/bootx64.efi $TMPDIR/part1/EFI/BOOT
cp /usr/share/syslinux/ldlinux.e64 $TMPDIR/part1/EFI/BOOT
cp $TMPDIR/part1/grub.cfg $TMPDIR/part1/EFI/BOOT
cp /usr/share/grub/bootia32.efi $TMPDIR/part1/EFI/BOOT
cp /usr/share/grub/grub.cfg $TMPDIR/part1/EFI/BOOT
fi
fi
sync
# umount system partition, remove mountpoint

View File

@ -147,7 +147,25 @@ LABEL run
APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE portable quiet
EOF
cat << EOF > "$LE_TMP"/grub.cfg
set timeout="25"
set default="Installer"
menuentry "Installer" {
search --set -f /KERNEL
linux /KERNEL boot=UUID=$UUID_SYSTEM installer quiet tty vga=current
}
menuentry "Live" {
search --set -f /KERNEL
linux /KERNEL boot=UUID=$UUID_SYSTEM grub_live quiet tty vga=current
}
menuentry "Run" {
search --set -f /KERNEL
linux /KERNEL boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE grub_portable quiet
}
EOF
mcopy "$LE_TMP/syslinux.cfg" ::
mcopy "$LE_TMP/grub.cfg" ::
# install extlinux
echo "image: installing extlinux to part1..."
@ -164,8 +182,8 @@ EOF
mcopy $TOOLCHAIN/share/syslinux/bootx64.efi ::/EFI/BOOT
mcopy $TOOLCHAIN/share/syslinux/ldlinux.e64 ::/EFI/BOOT
mcopy $TOOLCHAIN/share/grub/bootia32.efi ::/EFI/BOOT
mcopy $TOOLCHAIN/share/grub/grub.cfg ::/EFI/BOOT
mcopy "$LE_TMP"/syslinux.cfg ::/EFI/BOOT
mcopy "$LE_TMP"/grub.cfg ::/EFI/BOOT
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
# create bootloader configuration
echo "image: creating bootloader configuration..."
@ -300,10 +318,12 @@ fi # bootloader
dd if="$DISK" of="${DISK/img/tmp}" bs=1M >"$SAVE_ERROR" 2>&1 || show_error
# change syslinux default to 'run'
echo "image: modifying fs on part1 for open virtual appliance..."
sed -i "/DEFAULT/ s/installer/run/" "$LE_TMP"/syslinux.cfg
sed -i "/DEFAULT/ s/installer/run/" "$LE_TMP"/syslinux.cfg "$LE_TMP"/grub.cfg
# FIXME: an unalias should work here, but it does not; call mcopy directly
$TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/syslinux.cfg ::/EFI/BOOT
$TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/syslinux.cfg ::
$TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/grub.cfg ::/EFI/BOOT
$TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/grub.cfg ::
sync
# merge modified part1 back to tmp disk image
echo "image: merging part1 back to open virtual appliance..."