Merge pull request #2061 from maideii/libreelec-8.2

added EFI 32bit support via GRUB2
This commit is contained in:
MilhouseVH 2017-10-12 23:05:17 +01:00 committed by GitHub
commit 41dd8f9534
5 changed files with 126 additions and 3 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
;;
@ -700,7 +708,7 @@
}
# Make last bootloader label (installer, live, run etc.) as the new default
update_syslinux() {
update_bootmenu() {
local crnt_default
if [ -n "$SYSLINUX_DEFAULT" -a -f /flash/syslinux.cfg ]; then
@ -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() {
@ -1038,7 +1060,7 @@
load_modules \
check_disks \
mount_flash \
update_syslinux \
update_bootmenu \
load_splash \
mount_storage \
check_update \

69
packages/tools/grub/package.mk Executable file
View File

@ -0,0 +1,69 @@
################################################################################
# This file is part of LibreELEC - https://libreelec.tv
# Copyright (C) 2016-present Team LibreELEC
#
# LibreELEC is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# LibreELEC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LibreELEC. If not, see <http://www.gnu.org/licenses/>.
################################################################################
PKG_NAME="grub"
PKG_VERSION="2.02"
PKG_ARCH="x86_64"
PKG_LICENSE="GPLv3"
PKG_SITE="https://www.gnu.org/software/grub/index.html"
PKG_URL="http://git.savannah.gnu.org/cgit/grub.git/snapshot/$PKG_NAME-$PKG_VERSION.tar.gz"
PKG_DEPENDS_TARGET="toolchain flex freetype:host"
PKG_SECTION="tools"
PKG_SHORTDESC="GNU GRUB is a Multiboot boot loader."
PKG_LONGDESC="GNU GRUB is a Multiboot boot loader that was derived from GRUB, the GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn"
PKG_IS_ADDON="no"
PKG_AUTORECONF="no"
PKG_CONFIGURE_OPTS_TARGET="--target=i386-pc-linux \
--disable-nls \
--with-platform=efi"
unset CFLAGS
unset CPPFLAGS
unset CXXFLAGS
unset LDFLAGS
pre_configure_target() {
unset CPP
strip_lto
cd $PKG_BUILD
./autogen.sh
}
make_target() {
make CC=$CC \
AR=$AR \
RANLIB=$RANLIB \
CFLAGS="-I$SYSROOT_PREFIX/usr/include -fomit-frame-pointer -D_FILE_OFFSET_BITS=64" \
LDFLAGS="-L$SYSROOT_PREFIX/usr/lib"
}
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 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
mkdir -p $TOOLCHAIN/share/grub
cp -P $PKG_BUILD/grub-core/bootia32.efi $TOOLCHAIN/share/grub
}

View File

@ -22,7 +22,7 @@ PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="http://libreelec.tv/"
PKG_URL=""
PKG_DEPENDS_TARGET="toolchain busybox newt parted e2fsprogs syslinux"
PKG_DEPENDS_TARGET="toolchain busybox newt parted e2fsprogs syslinux grub"
PKG_SECTION="tools"
PKG_SHORTDESC="installer: LibreELEC.tv Install manager"
PKG_LONGDESC="LibreELEC.tv Install manager to install the system on any disk"

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,6 +282,8 @@ 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
fi
sync

View File

@ -152,7 +152,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..."
@ -168,7 +186,9 @@ EOF
mmd EFI EFI/BOOT
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 "$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..."
@ -304,9 +324,12 @@ fi # bootloader
# 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 "/set default=/s/\"Installer\"/\"Run\"/" "$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..."