Hi all,
This patch adds an option to store all modules inside the core. This
approach follows the suggestion from:
http://lists.gnu.org/archive/html/grub-devel/2012-10/msg00053.html
It works this way:
grub rescue> set
prefix=(mduuid/f897565f27383014091630e267aa4720)/grub
root=mduuid/f897565f27383014091630e267aa4720
grub rescue> set root=memdisk
grub rescue> set prefix=($root)/
grub rescue> ls /
powerpc-ieee1275/
grub rescue> insmod normal
grub rescue> normal
GNU GRUB version 2.00
Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists possible
device or file completions.
grub>
Tks!
--
Paulo Flabiano Smorigo
Software Engineer
Linux Technology Center - IBM Systems & Technology Group
=== modified file 'ChangeLog'
--- ChangeLog 2013-02-06 16:37:29 +0000
+++ ChangeLog 2013-02-06 22:08:33 +0000
@@ -1,3 +1,7 @@
+2013-02-06 Paulo Flabiano Smorigo <pfsmor...@br.ibm.com>
+
+ * util/grub-install.in: New option --memdisk.
+
2013-02-06 Vladimir Serbinenko <phco...@gmail.com>
* grub-core/commands/lsacpi.c: Fix types on 64-bit platform.
=== modified file 'util/grub-install.in'
--- util/grub-install.in 2013-01-27 15:17:21 +0000
+++ util/grub-install.in 2013-02-06 22:08:48 +0000
@@ -50,6 +50,8 @@
bootdir=
grubdir="`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'`"
modules=
+memdisk=no
+memdisk_img=
install_device=
force_lba=
@@ -110,6 +112,7 @@
print_option_help "--removable" "$(gettext "the installation device is removable. This option is only available on EFI.")"
print_option_help "--bootloader-id=$(gettext "ID")" "$(gettext "the ID of bootloader. This option is only available on EFI.")"
print_option_help "--efi-directory=$(gettext "DIR")" "$(gettext "use DIR as the EFI System Partition root.")"
+ print_option_help "--memdisk" "$(gettext "include all modules in memdisk.")"
echo
gettext "INSTALL_DEVICE must be system device filename.";echo
echo
@@ -240,6 +243,9 @@
--no-nvram)
update_nvram=no ;;
+ --memdisk)
+ memdisk=yes ;;
+
# This is an undocumented feature...
--debug)
debug=yes ;;
@@ -558,6 +564,22 @@
exit 1
fi
+if test $memdisk = yes; then
+ memdisk_dir="`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
+
+ mkdir -p "${memdisk_dir}"/"${grub_modinfo_target_cpu}-${grub_modinfo_platform}"
+
+ for file in "${source_dir}"/*.mod "${source_dir}"/*.lst; do
+ cp -f "$file" "${memdisk_dir}"/"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" || exit 1
+ done
+
+ memdisk_img=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
+ (cd "${memdisk_dir}"; tar -cf - *) > "${memdisk_img}"
+ rm -rf "${memdisk_dir}"
+
+ modules="$modules memdisk tar"
+fi
+
# Write device to a variable so we don't have to traverse /dev every time.
grub_device="`"$grub_probe" --device-map="${device_map}" --target=device "${grubdir}"`" || exit 1
@@ -710,11 +732,15 @@
*) imgext=img ;;
esac
-if [ x"$config_opt_file" = x ]; then
- "$grub_mkimage" -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
-else
- "$grub_mkimage" -c "${config_opt_file}" -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
-fi
+additional_options=
+if [ x"$config_opt_file" != x ]; then
+ additional_options="-c \"${config_opt_file}\""
+fi
+if [ x"$memdisk_img" != x ]; then
+ additional_options="${additional_options} -m ${memdisk_img}"
+fi
+
+"$grub_mkimage" ${additional_options} -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
# Backward-compatibility kludges
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "mipsel-loongson" ]; then
@@ -723,13 +749,12 @@
cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${grubdir}/grub"
elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-efi" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "x86_64-efi" ]; then
- if [ x"$config_opt_file" = x ]; then
- "$grub_mkimage" -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/grub.efi" --prefix="" $modules || exit 1
- else
- "$grub_mkimage" -c "${config_opt_file}" -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/grub.efi" --prefix="" $modules || exit 1
- fi
+ "$grub_mkimage" ${additional_options} -d "${source_dir}" -O "${mkimage_target}" --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/grub.efi" --prefix="" $modules || exit 1
fi
+if [ x"$memdisk_img" != x ]; then
+ rm -f "${memdisk_img}"
+fi
# Perform the grub_modinfo_platform-dependent install
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel