1 Star 0 Fork 99

src-NestOS/grub2

forked from src-openEuler/grub2 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0202-10_linux.in-Merge-logic-from-10_linux_bls-and-drop-t.patch 21.25 KB
一键复制 编辑 原始数据 按行查看 历史
hanzj0122_admin 提交于 2020-07-29 20:47 . update to 2.04
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
From 25d1ed30a9330c8b3d84fdc3e0812ef5d1db5238 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Tue, 31 Mar 2020 12:35:42 +0200
Subject: [PATCH 202/220] 10_linux.in: Merge logic from 10_linux_bls and drop
that script
There's a 10_linux_bls snippet that's used in ppc64le machines to generate
a set of menuentry commands by parsing BLS configs in /boot/loader/entries.
This was made because on PowerNV ppc64le machines that boot using the OPAL
firmware, there could be an old version of the Petitboot bootloader that
doesn't have support to parse BLS snippets.
But there is no need to have a separate GRUB script for that and the logic
could just be part of the usual 10_linux snippet.
Also the BLS files could be used directly if the bootloader has support to
parse them, which is the case for GRUB that's used in ppc64le OF or if the
Petitboot used in ppc64le OPAL machines is version 1.8.0 or newer.
So only generate the menuentry commands from the BLS snippets in the case
of OPAL machines with an old Petitboot version.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---
Makefile.util.def | 7 -
util/grub.d/10_linux.in | 97 ++++++++-
util/grub.d/10_linux_bls.in | 470 --------------------------------------------
3 files changed, 96 insertions(+), 478 deletions(-)
delete mode 100644 util/grub.d/10_linux_bls.in
diff --git a/Makefile.util.def b/Makefile.util.def
index 1fa92ca..f3a6996 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -518,13 +518,6 @@ script = {
};
script = {
- name = '10_linux_bls';
- common = util/grub.d/10_linux_bls.in;
- installdir = grubconf;
- condition = COND_HOST_LINUX;
-};
-
-script = {
name = '10_reset_boot_success';
common = util/grub.d/10_reset_boot_success.in;
installdir = grubconf;
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index b70dca2..c72cc32 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -84,18 +84,86 @@ esac
populate_header_warn()
{
+if [ "x${BLS_POPULATE_MENU}" = "xtrue" ]; then
+ bls_parser="10_linux script"
+else
+ bls_parser="blscfg command"
+fi
cat <<EOF
# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
-# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
+# The $bls_parser parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.
EOF
}
+read_config()
+{
+ config_file=${1}
+ title=""
+ initrd=""
+ options=""
+ linux=""
+ grub_arg=""
+
+ while read -r line
+ do
+ record=$(echo ${line} | cut -f 1 -d ' ')
+ value=$(echo ${line} | cut -s -f2- -d ' ')
+ case "${record}" in
+ "title")
+ title=${value}
+ ;;
+ "initrd")
+ initrd=${value}
+ ;;
+ "linux")
+ linux=${value}
+ ;;
+ "options")
+ options=${value}
+ ;;
+ "grub_arg")
+ grub_arg=${value}
+ ;;
+ esac
+ done < ${config_file}
+}
+
+populate_menu()
+{
+ blsdir="/boot/loader/entries"
+ local -a files
+ local IFS=$'\n'
+ gettext_printf "Generating boot entries from BLS files...\n" >&2
+
+ files=($(for bls in ${blsdir}/*.conf ; do
+ if ! [[ -e "${bls}" ]] ; then
+ continue
+ fi
+ bls="${bls%.conf}"
+ bls="${bls##*/}"
+ echo "${bls}"
+ done | ${kernel_sort} | tac)) || :
+
+ for bls in "${files[@]}" ; do
+ read_config "${blsdir}/${bls}.conf"
+
+ menu="${menu}menuentry '${title}' ${grub_arg} --id=${bls} {\n"
+ menu="${menu}\t linux ${linux} ${options}\n"
+ if [ -n "${initrd}" ] ; then
+ menu="${menu}\t initrd ${boot_prefix}${initrd}\n"
+ fi
+ menu="${menu}}\n\n"
+ done
+ # The printf command seems to be more reliable across shells for special character (\n, \t) evaluation
+ printf "$menu"
+}
+
if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
if [ x$dirname = x/ ]; then
if [ -z "${prepare_root_cache}" ]; then
@@ -115,6 +183,26 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
prepare_grub_to_access_device_with_variable boot ${boot_device}
fi
+ arch="$(uname -m)"
+ if [ "x${arch}" = "xppc64le" ] && [ -d /sys/firmware/opal ]; then
+
+ petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot"
+
+ if test -e ${petitboot_path}; then
+ read -a petitboot_version < ${petitboot_path}
+ petitboot_version="$(echo ${petitboot_version//v})"
+ major_version="$(echo ${petitboot_version} | cut -d . -f1)"
+ minor_version="$(echo ${petitboot_version} | cut -d . -f2)"
+
+ if test -z ${petitboot_version} || test ${major_version} -lt 1 || \
+ test ${major_version} -eq 1 -a ${minor_version} -lt 8; then
+ BLS_POPULATE_MENU="true"
+ fi
+ else
+ BLS_POPULATE_MENU="true"
+ fi
+ fi
+
populate_header_warn
cat << EOF
@@ -129,10 +217,17 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
if [ -z "\${kernelopts}" ]; then
set kernelopts="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
fi
+EOF
+
+ if [ "x${BLS_POPULATE_MENU}" = "xtrue" ]; then
+ populate_menu
+ else
+ cat << EOF
insmod blscfg
blscfg
EOF
+ fi
if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
blsdir="/boot/loader/entries"
diff --git a/util/grub.d/10_linux_bls.in b/util/grub.d/10_linux_bls.in
deleted file mode 100644
index 68fbedf..0000000
--- a/util/grub.d/10_linux_bls.in
+++ /dev/null
@@ -1,470 +0,0 @@
-#! /bin/sh
-set -e
-
-# grub-mkconfig helper script.
-# Copyright (C) 2006,2007,2008,2009,2010 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 <http://www.gnu.org/licenses/>.
-
-prefix="@prefix@"
-exec_prefix="@exec_prefix@"
-datarootdir="@datarootdir@"
-
-. "$pkgdatadir/grub-mkconfig_lib"
-
-export TEXTDOMAIN=@PACKAGE@
-export TEXTDOMAINDIR="@localedir@"
-
-CLASS="--class gnu-linux --class gnu --class os --unrestricted"
-
-if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
- OS="$(eval $(grep PRETTY_NAME /etc/os-release) ; echo ${PRETTY_NAME})"
- CLASS="--class $(eval $(grep '^ID_LIKE=\|^ID=' /etc/os-release) ; [ -n "${ID_LIKE}" ] && echo ${ID_LIKE} || echo ${ID}) ${CLASS}"
-else
- OS="${GRUB_DISTRIBUTOR}"
- CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
-fi
-
-# loop-AES arranges things so that /dev/loop/X can be our root device, but
-# the initrds that Linux uses don't like that.
-case ${GRUB_DEVICE} in
- /dev/loop/*|/dev/loop[0-9])
- GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
- ;;
-esac
-
-# Default to disabling partition uuid support to maintian compatibility with
-# older kernels.
-GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}
-
-# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
-# and mounting btrfs requires user space scanning, so force UUID in this case.
-if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
- || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
- && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
- || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
- && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
- || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
- LINUX_ROOT_DEVICE=${GRUB_DEVICE}
-elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
- || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
- LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
-else
- LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
-fi
-
-case x"$GRUB_FS" in
- xbtrfs)
- if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
- GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
- else
- rootsubvol="`make_system_path_relative_to_its_root /`"
- rootsubvol="${rootsubvol#/}"
- if [ "x${rootsubvol}" != x ]; then
- GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
- fi
- fi;;
- xzfs)
- rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
- bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
- LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
- ;;
-esac
-
-mktitle ()
-{
- local title_type
- local version
- local OS_NAME
- local OS_VERS
-
- title_type=$1 && shift
- version=$1 && shift
-
- OS_NAME="$(eval $(grep ^NAME= /etc/os-release) ; echo ${NAME})"
- OS_VERS="$(eval $(grep ^VERSION= /etc/os-release) ; echo ${VERSION})"
-
- case $title_type in
- recovery)
- title=$(printf '%s (%s) %s (recovery mode)' \
- "${OS_NAME}" "${version}" "${OS_VERS}")
- ;;
- *)
- title=$(printf '%s (%s) %s' \
- "${OS_NAME}" "${version}" "${OS_VERS}")
- ;;
- esac
- echo -n ${title}
-}
-
-title_correction_code=
-
-populate_header_warn()
-{
-cat <<EOF
-
-# This section was generated by a script. Do not modify the generated file - all changes
-# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
-
-EOF
-}
-
-read_config()
-{
- config_file=${1}
- title=""
- initrd=""
- options=""
- linux=""
- grub_arg=""
-
- while read -r line
- do
- record=$(echo ${line} | cut -f 1 -d ' ')
- value=$(echo ${line} | cut -s -f2- -d ' ')
- case "${record}" in
- "title")
- title=${value}
- ;;
- "initrd")
- initrd=${value}
- ;;
- "linux")
- linux=${value}
- ;;
- "options")
- options=${value}
- ;;
- "grub_arg")
- grub_arg=${value}
- ;;
- esac
- done < ${config_file}
-}
-
-populate_menu()
-{
- blsdir="/boot/loader/entries"
- local -a files
- local IFS=$'\n'
- gettext_printf "Generating boot entries from BLS files...\n" >&2
-
- files=($(for bls in ${blsdir}/*.conf ; do
- if ! [[ -e "${bls}" ]] ; then
- continue
- fi
- bls="${bls%.conf}"
- bls="${bls##*/}"
- echo "${bls}"
- done | ${kernel_sort} | tac)) || :
-
- for bls in "${files[@]}" ; do
- read_config "${blsdir}/${bls}.conf"
-
- menu="${menu}menuentry '${title}' ${grub_arg} --id=${bls} {\n"
- menu="${menu}\t linux ${linux} ${options}\n"
- if [ -n "${initrd}" ] ; then
- menu="${menu}\t initrd ${boot_prefix}${initrd}\n"
- fi
- menu="${menu}}\n\n"
- done
- # The printf command seems to be more reliable across shells for special character (\n, \t) evaluation
- printf "$menu"
-}
-
-linux_entry ()
-{
- os="$1"
- version="$2"
- type="$3"
- isdebug="$4"
- args="$5"
-
- if [ -z "$boot_device_id" ]; then
- boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
- fi
-
- if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
- if [ x$dirname = x/ ]; then
- if [ -z "${prepare_root_cache}" ]; then
- prepare_grub_to_access_device ${GRUB_DEVICE}
- fi
- else
- if [ -z "${prepare_boot_cache}" ]; then
- prepare_grub_to_access_device ${GRUB_DEVICE_BOOT}
- fi
- fi
-
- if [ -d /sys/firmware/efi ]; then
- bootefi_device="`${grub_probe} --target=device /boot/efi/`"
- prepare_grub_to_access_device_with_variable boot ${bootefi_device}
- else
- boot_device="`${grub_probe} --target=device /boot/`"
- prepare_grub_to_access_device_with_variable boot ${boot_device}
- fi
-
- populate_header_warn
- populate_menu
-
- if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
- blsdir="/boot/loader/entries"
- [ -d "${blsdir}" ] && GRUB_BLS_FS="$(${grub_probe} --target=fs ${blsdir})"
- if [ "x${GRUB_BLS_FS}" = "xbtrfs" ] || [ "x${GRUB_BLS_FS}" = "xzfs" ]; then
- blsdir=$(make_system_path_relative_to_its_root "${blsdir}")
- if [ "x${blsdir}" != "x/loader/entries" ] && [ "x${blsdir}" != "x/boot/loader/entries" ]; then
- ${grub_editenv} - set blsdir="${blsdir}"
- fi
- fi
-
- ${grub_editenv} - set kernelopts="root=${linux_root_device_thisversion} ro ${args}"
- if [ -n "${GRUB_EARLY_INITRD_LINUX_CUSTOM}" ]; then
- ${grub_editenv} - set early_initrd="${GRUB_EARLY_INITRD_LINUX_CUSTOM}"
- fi
- fi
-
- exit 0
- fi
-
- if [ x$type != xsimple ] ; then
- title=$(mktitle "$type" "$version")
- if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
- replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
- quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
- title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
- fi
- if [ x$isdebug = xdebug ]; then
- title="$title${GRUB_LINUX_DEBUG_TITLE_POSTFIX}"
- fi
- echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
- else
- echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
- fi
- if [ x$type != xrecovery ] ; then
- save_default_entry | grub_add_tab
- fi
-
- # Use ELILO's generic "efifb" when it's known to be available.
- # FIXME: We need an interface to select vesafb in case efifb can't be used.
- if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
- echo " load_video" | sed "s/^/$submenu_indentation/"
- if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \
- && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then
- echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/"
- fi
- else
- if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
- echo " load_video" | sed "s/^/$submenu_indentation/"
- fi
- echo " set gfxpayload=$GRUB_GFXPAYLOAD_LINUX" | sed "s/^/$submenu_indentation/"
- fi
-
- echo " insmod gzio" | sed "s/^/$submenu_indentation/"
-
- if [ x$dirname = x/ ]; then
- if [ -z "${prepare_root_cache}" ]; then
- prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
- fi
- printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
- else
- if [ -z "${prepare_boot_cache}" ]; then
- prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
- fi
- printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
- fi
- sed "s/^/$submenu_indentation/" << EOF
- linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
-EOF
- if test -n "${initrd}" ; then
- initrd_path=
- for i in ${initrd}; do
- initrd_path="${initrd_path} ${rel_dirname}/${i}"
- done
- sed "s/^/$submenu_indentation/" << EOF
- initrd $(echo $initrd_path)
-EOF
- fi
- if test -n "${fdt}" ; then
- sed "s/^/$submenu_indentation/" << EOF
- devicetree ${rel_dirname}/${fdt}
-EOF
- fi
- sed "s/^/$submenu_indentation/" << EOF
-}
-EOF
-}
-
-machine=`uname -m`
-case "x$machine" in
- xi?86 | xx86_64)
- list=
- for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
- done ;;
- *)
- list=
- for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
- done ;;
-esac
-
-if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
- for i in /boot/ostree/*/vmlinuz-* ; do
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
- done
-fi
-
-case "$machine" in
- i?86) GENKERNEL_ARCH="x86" ;;
- mips|mips64) GENKERNEL_ARCH="mips" ;;
- mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
- arm*) GENKERNEL_ARCH="arm" ;;
- *) GENKERNEL_ARCH="$machine" ;;
-esac
-
-prepare_boot_cache=
-prepare_root_cache=
-boot_device_id=
-title_correction_code=
-
-# Extra indentation to add to menu entries in a submenu. We're not in a submenu
-# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
-submenu_indentation=""
-
-is_top_level=true
-while [ "x$list" != "x" ] ; do
- linux=`version_find_latest $list`
- if [ "x${GRUB_ENABLE_BLSCFG}" != "xtrue" ]; then
- gettext_printf "Found linux image: %s\n" "$linux" >&2
- fi
-
- basename=`basename $linux`
- dirname=`dirname $linux`
- rel_dirname=`make_system_path_relative_to_its_root $dirname`
- version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
- alt_version=`echo $version | sed -e "s,\.old$,,g"`
- linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
-
- initrd_early=
- for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
- ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
- if test -e "${dirname}/${i}" ; then
- initrd_early="${initrd_early} ${i}"
- fi
- done
-
- initrd_real=
- for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
- "initrd-${version}" "initramfs-${version}.img" \
- "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
- "initrd-${alt_version}" "initramfs-${alt_version}.img" \
- "initramfs-genkernel-${version}" \
- "initramfs-genkernel-${alt_version}" \
- "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
- "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
- if test -e "${dirname}/${i}" ; then
- initrd_real="${i}"
- break
- fi
- done
-
- initrd=
- if test -n "${initrd_early}" || test -n "${initrd_real}"; then
- initrd="${initrd_early} ${initrd_real}"
-
- initrd_display=
- for i in ${initrd}; do
- initrd_display="${initrd_display} ${dirname}/${i}"
- done
- if [ "x${GRUB_ENABLE_BLSCFG}" != "xtrue" ]; then
- gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
- fi
- fi
-
- fdt=
- for i in "dtb-${version}" "dtb-${alt_version}"; do
- if test -f "${dirname}/${i}/${GRUB_DEFAULT_DTB}" ; then
- fdt="${i}/${GRUB_DEFAULT_DTB}"
- break
- fi
- done
-
- config=
- for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
- if test -e "${i}" ; then
- config="${i}"
- break
- fi
- done
-
- initramfs=
- if test -n "${config}" ; then
- initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
- fi
-
- if test -z "${initramfs}" && test -z "${initrd_real}" ; then
- # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's
- # no initrd or builtin initramfs, it can't work here.
- if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
- || [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then
-
- linux_root_device_thisversion=${GRUB_DEVICE}
- else
- linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
- fi
- fi
-
- if [ "x${GRUB_DISABLE_SUBMENU}" = "xyes" ] || [ "x${GRUB_DISABLE_SUBMENU}" = "xy" ]; then
- GRUB_DISABLE_SUBMENU="true"
- fi
-
- if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
- linux_entry "${OS}" "${version}" simple standard \
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
- if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
- linux_entry "${OS}" "${version}" simple debug \
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
- fi
-
- submenu_indentation="$grub_tab"
-
- if [ -z "$boot_device_id" ]; then
- boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
- fi
- # TRANSLATORS: %s is replaced with an OS name
- echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
- is_top_level=false
- fi
-
- linux_entry "${OS}" "${version}" advanced standard \
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
- if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
- linux_entry "${OS}" "${version}" advanced debug \
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
- fi
-
- if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
- linux_entry "${OS}" "${version}" recovery standard \
- "single ${GRUB_CMDLINE_LINUX}"
- fi
-
- list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
-done
-
-# If at least one kernel was found, then we need to
-# add a closing '}' for the submenu command.
-if [ x"$is_top_level" != xtrue ]; then
- echo '}'
-fi
-
-echo "$title_correction_code"
--
1.8.3.1
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-nest-os/grub2.git
git@gitee.com:src-nest-os/grub2.git
src-nest-os
grub2
grub2
master

搜索帮助