5 Star 0 Fork 16

OpenCloudOS Stream/grub2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0044-The-grub-can-be-installed-with-removable-option-to-s.patch 3.96 KB
一键复制 编辑 原始数据 按行查看 历史
nilusyi 提交于 2024-04-07 16:45 . update patches
From 753f78079e52ac03626cf7b58480f69bdf8fd8f7 Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang@suse.com>
Date: Mon, 1 Apr 2024 16:21:03 +0800
Subject: [PATCH 044/272] The grub can be installed with removable option to
support booting from removable media with standard UEFI default file path of
the form: \EFI\BOOT\BOOT{machine type short-name}.EFI
It does not make use of distributor directory, which becomes a problem for UEFI
Xen installation as it requires that directory to be present for storing xen
stuff like chainloaded hypervisor, xen kernel and so on. Moreover it makes bad
assumption that hypervisor will be chainloaded by grub under the same
directory, which is also not always true.
This patch fixes the problem by ensuring the directory available to Xen
installation if any Xen hypervisor found and independent to grub boot path
$cmdpath to work.
---
util/grub.d/20_linux_xen.in | 62 +++++++++++++++++++++----------------
1 file changed, 35 insertions(+), 27 deletions(-)
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index 7641f8b27..63a8dbf4b 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -113,32 +113,6 @@ esac
title_correction_code=
-if [ -d /sys/firmware/efi ]; then
- is_efi=true
- err_msg=""
- efi_dir="/boot/efi/efi/${os}"
- grub_dir=/boot/@PACKAGE@
- xen_dir=/usr/share/efi/$machine
- [ -d $xen_dir ] || xen_dir=/usr/lib64/efi
- for d in $grub_dir $efi_dir $xen_dir; do
- [ ! -d "$d" ] || continue
- err_msg="${err_msg}$ME: Essential directory '$d' not found!\n"
- done
- if ! [ -d "$efi_dir" -a -d "$grub_dir" -a -d "$xen_dir" ]; then
- err_msg="${err_msg}$ME: XEN configuration skipped!\n"
- else
- rm -f $grub_dir/xen*.cfg
- if [ -s $efi_dir/grub.xen-files ]; then
- for f in $(sort $efi_dir/grub.xen-files| uniq); do
- rm -f $efi_dir/$f
- done
- : > $efi_dir/grub.xen-files
- fi
- fi
-else
- is_efi=false
-fi
-
grub2_unquote ()
{
awk '
@@ -264,10 +238,15 @@ linux_entry_xsm ()
kernel=${basename} root=${linux_root_device_thisversion} ${args_unq}
ramdisk=${initrd_real}
EOF
+ if [ -z "${prepare_efi_cache}" ]; then
+ grub_device_efi="`${grub_probe} --target=device /boot/efi`"
+ prepare_efi_cache="$(prepare_grub_to_access_device ${grub_device_efi} | grub_add_tab)"
+ fi
+ printf '%s\n' "${prepare_efi_cache}" | sed "s/^/$submenu_indentation/"
message="$(gettext_printf "Loading Xen %s with Linux %s ..." ${xen_version} ${version})"
sed "s/^/$submenu_indentation/" <<-EOF
echo '$(echo "$message" | grub_quote)'
- chainloader \$cmdpath/${xen_basename} ${xen_basename} ${SUSE_CMDLINE_XENEFI} $section
+ chainloader ${rel_efi_dir}/${xen_basename} ${xen_basename} ${SUSE_CMDLINE_XENEFI} $section
}
EOF
for f in ${grub_dir}/$xen_cfg ${xen_dir}/${xen_basename} ${dirname}/${basename} ${dirname}/${initrd_real}; do
@@ -363,6 +342,7 @@ else
done
fi
prepare_boot_cache=
+prepare_efi_cache=
boot_device_id=
title_correction_code=
@@ -432,6 +412,34 @@ fi
is_top_level=true
+if [ -d /sys/firmware/efi ] && [ "x${xen_list}" != "x" ]; then
+ is_efi=true
+ err_msg=""
+ efi_dir="/boot/efi/efi/${os}"
+ grub_dir=/boot/grub2
+ xen_dir=/usr/share/efi/$machine
+ [ -d $xen_dir ] || xen_dir=/usr/lib64/efi
+ for d in $grub_dir $xen_dir; do
+ [ ! -d "$d" ] || continue
+ err_msg="${err_msg}$ME: Essential directory '$d' not found!\n"
+ done
+ if ! [ -d "$grub_dir" -a -d "$xen_dir" ]; then
+ err_msg="${err_msg}$ME: XEN configuration skipped!\n"
+ else
+ mkdir -p $efi_dir
+ rel_efi_dir=`make_system_path_relative_to_its_root $efi_dir`
+ rm -f $grub_dir/xen*.cfg
+ if [ -s $efi_dir/grub.xen-files ]; then
+ for f in $(sort $efi_dir/grub.xen-files| uniq); do
+ rm -f $efi_dir/$f
+ done
+ : > $efi_dir/grub.xen-files
+ fi
+ fi
+else
+ is_efi=false
+fi
+
for current_xen in ${reverse_sorted_xen_list}; do
xen_basename=`basename ${current_xen}`
xen_dirname=`dirname ${current_xen}`
--
2.41.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/opencloudos-stream/grub2.git
git@gitee.com:opencloudos-stream/grub2.git
opencloudos-stream
grub2
grub2
master

搜索帮助