diff --git a/packages/tools/grub/config/grub-postinstall.cfg b/packages/tools/grub/config/grub-postinstall.cfg new file mode 100644 index 0000000000..08429f7dc5 --- /dev/null +++ b/packages/tools/grub/config/grub-postinstall.cfg @@ -0,0 +1,8 @@ +GRUB_SAVEDEFAULT=true +set timeout="0" +set default="0" + +menuentry "LibreELEC"{ + search --set -f /KERNEL + linux /KERNEL boot=LABEL=System disk=LABEL=Storage quiet +} diff --git a/packages/tools/grub/config/grub.cfg b/packages/tools/grub/config/grub.cfg new file mode 100644 index 0000000000..e85f819b19 --- /dev/null +++ b/packages/tools/grub/config/grub.cfg @@ -0,0 +1,21 @@ +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 +} diff --git a/packages/tools/grub/package.mk b/packages/tools/grub/package.mk new file mode 100755 index 0000000000..bc5440e2c4 --- /dev/null +++ b/packages/tools/grub/package.mk @@ -0,0 +1,71 @@ +################################################################################ +# 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 . +################################################################################ + +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 gettext gzio part_gpt \ + 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 +} diff --git a/packages/tools/installer/package.mk b/packages/tools/installer/package.mk index 0e7d54116f..5b7242afe0 100644 --- a/packages/tools/installer/package.mk +++ b/packages/tools/installer/package.mk @@ -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" diff --git a/packages/tools/installer/scripts/installer b/packages/tools/installer/scripts/installer index 4858d4bd9c..7c4a0c0ed0 100755 --- a/packages/tools/installer/scripts/installer +++ b/packages/tools/installer/scripts/installer @@ -275,7 +275,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 - fi + cp /usr/share/grub/bootia32.efi $TMPDIR/part1/EFI/BOOT + cp /usr/share/grub/grub.cfg $TMPDIR/part1/EFI/BOOT + fi sync # umount system partition, remove mountpoint diff --git a/scripts/mkimage b/scripts/mkimage index 6ff5b5e367..804606edb0 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -163,6 +163,8 @@ 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 $TOOLCHAIN/share/grub/grub.cfg ::/EFI/BOOT mcopy "$LE_TMP"/syslinux.cfg ::/EFI/BOOT elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then # create bootloader configuration