From a399e8f4ddb6416d9a4ccf9a7efc67d8d3316dee Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Tue, 29 Jan 2013 05:41:07 +0000 Subject: [PATCH] Output a menu entry for firmware setup on UEFI FastBoot systems. --- Makefile.util.def | 6 ++ debian/changelog | 1 + debian/patches/series | 1 + debian/patches/uefi_firmware_setup.patch | 84 ++++++++++++++++++++++++ po/POTFILES-shell.in | 1 + util/grub.d/30_uefi-firmware.in | 46 +++++++++++++ 6 files changed, 139 insertions(+) create mode 100644 debian/patches/uefi_firmware_setup.patch create mode 100644 util/grub.d/30_uefi-firmware.in diff --git a/Makefile.util.def b/Makefile.util.def index 91d937fd7..0afbda269 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -455,6 +455,12 @@ script = { installdir = grubconf; }; +script = { + name = '30_uefi-firmware'; + common = util/grub.d/30_uefi-firmware.in; + installdir = grubconf; +}; + script = { name = '40_custom'; common = util/grub.d/40_custom.in; diff --git a/debian/changelog b/debian/changelog index bc8be14be..f675e79ac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ grub2 (2.00-13) UNRELEASED; urgency=low alternative as the fallback background if GRUB_DISTRIBUTOR is "Ubuntu". * Merge from Ubuntu: - source_grub2.py: Use attach_default_grub from apport's hookutils. + - Output a menu entry for firmware setup on UEFI FastBoot systems. -- Colin Watson Mon, 28 Jan 2013 11:08:07 +0000 diff --git a/debian/patches/series b/debian/patches/series index 0d3848b16..10fc33341 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -34,3 +34,4 @@ no_insmod_on_sb.patch default_grub_d.patch blacklist_1440x900x32.patch kfreebsd_9.1.patch +uefi_firmware_setup.patch diff --git a/debian/patches/uefi_firmware_setup.patch b/debian/patches/uefi_firmware_setup.patch new file mode 100644 index 000000000..cfe322b99 --- /dev/null +++ b/debian/patches/uefi_firmware_setup.patch @@ -0,0 +1,84 @@ +Description: Output a menu entry for firmware setup on UEFI FastBoot systems +Author: Steve Langasek +Forwarded: no + +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -456,6 +456,12 @@ + }; + + script = { ++ name = '30_uefi-firmware'; ++ common = util/grub.d/30_uefi-firmware.in; ++ installdir = grubconf; ++}; ++ ++script = { + name = '40_custom'; + common = util/grub.d/40_custom.in; + installdir = grubconf; +Index: b/po/POTFILES-shell.in +=================================================================== +--- a/po/POTFILES-shell.in ++++ b/po/POTFILES-shell.in +@@ -7,6 +7,7 @@ + util/grub.d/10_windows.in + util/grub.d/20_linux_xen.in + util/grub.d/30_os-prober.in ++util/grub.d/30_uefi-firmware.in + util/grub.d/40_custom.in + util/grub.d/41_custom.in + util/grub-install.in +Index: b/util/grub.d/30_uefi-firmware.in +=================================================================== +--- /dev/null ++++ b/util/grub.d/30_uefi-firmware.in +@@ -0,0 +1,46 @@ ++#! /bin/sh ++set -e ++ ++# grub-mkconfig helper script. ++# Copyright (C) 2012 Free Software Foundation, Inc. ++# ++# GRUB 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 3 of the License, or ++# (at your option) any later version. ++# ++# GRUB 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 GRUB. If not, see . ++ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++export TEXTDOMAIN=@PACKAGE@ ++export TEXTDOMAINDIR="@localedir@" ++ ++. "@datadir@/@PACKAGE@/grub-mkconfig_lib" ++ ++efi_vars_dir=/sys/firmware/efi/vars ++EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c ++OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data" ++ ++if [ -e "$OsIndications" ] && \ ++ [ "$(( $(printf %x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then ++ LABEL="System setup" ++ ++ gettext_printf "Adding boot menu entry for EFI firmware configuration\n" >&2 ++ ++ onstr="$(gettext_printf "(on %s)" "${DEVICE}")" ++ ++ cat << EOF ++menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' { ++ fwsetup ++} ++EOF ++fi diff --git a/po/POTFILES-shell.in b/po/POTFILES-shell.in index 46c589f03..3f09a3e53 100644 --- a/po/POTFILES-shell.in +++ b/po/POTFILES-shell.in @@ -7,6 +7,7 @@ util/grub.d/10_netbsd.in util/grub.d/10_windows.in util/grub.d/20_linux_xen.in util/grub.d/30_os-prober.in +util/grub.d/30_uefi-firmware.in util/grub.d/40_custom.in util/grub.d/41_custom.in util/grub-install.in diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in new file mode 100644 index 000000000..0f49bfc07 --- /dev/null +++ b/util/grub.d/30_uefi-firmware.in @@ -0,0 +1,46 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2012 Free Software Foundation, Inc. +# +# GRUB 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 3 of the License, or +# (at your option) any later version. +# +# GRUB 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 GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "@datadir@/@PACKAGE@/grub-mkconfig_lib" + +efi_vars_dir=/sys/firmware/efi/vars +EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c +OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data" + +if [ -e "$OsIndications" ] && \ + [ "$(( $(printf %x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then + LABEL="System setup" + + gettext_printf "Adding boot menu entry for EFI firmware configuration\n" >&2 + + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + + cat << EOF +menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' { + fwsetup +} +EOF +fi