Skip to contentSkip to conversation

auto-load all partmaps in images generated by grub-mkrescue

PATCH In review Robert Millan 1 participant 2 messages Mar 18, 2008 – Apr 13, 2008 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 auto-load all partmaps in images generated by grub-mkrescue

See subject :-)

Signature · 5 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)

* gendistlist.sh (EXTRA_DISTFILES): Add `genpartmaplist.sh'.
* genmk.rb (partmap): New variable.
(CLEANFILES, PARTMAPFILES): Add #{partmap}. (#{partmap}): New target rule.
* genpartmaplist.sh: New file.
* Makefile.in (pkglib_DATA): Add partmap.lst. (partmap.lst): New target rule.
* util/i386/pc/grub-mkrescue.in: Generate grub.cfg that loads needed modules (including all partition maps), instead of preloading them.

gendistlist.sh renamed from grub2/gendistlist.sh +2 -2
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/gendistlist.sh ./gendistlist.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 2005  Free Software Foundation, Inc.
+# Copyright (C) 2005, 2008  Free Software Foundation, Inc.
 #
 # This gendistlist.sh is free software; the author
 # gives unlimited permission to copy and/or distribute it,
@@ -16,7 +16,7 @@
 EXTRA_DISTFILES="AUTHORS COPYING ChangeLog DISTLIST INSTALL NEWS README \
 	THANKS TODO Makefile.in aclocal.m4 autogen.sh config.guess \
 	config.h.in config.sub configure configure.ac gencmdlist.sh \
-	gendistlist.sh genfslist.sh genkernsyms.sh genmk.rb \
+	gendistlist.sh genfslist.sh genpartmaplist.sh genkernsyms.sh genmk.rb \
 	genmodsrc.sh gensymlist.sh install-sh mkinstalldirs stamp-h.in"
 
 DISTDIRS="boot commands conf disk font fs hello include io kern loader \
genmk.rb renamed from grub2/genmk.rb +8 -1
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/genmk.rb ./genmk.rb
@@ -141,6 +141,7 @@ endif
       fake_obj = File.basename(src).suffix('o')
       command = 'cmd-' + obj.suffix('lst')
       fs = 'fs-' + obj.suffix('lst')
+      partmap = 'partmap-' + obj.suffix('lst')
       dep = deps[i]
       flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end
       extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end
@@ -150,9 +151,10 @@ endif
 	$(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -MD -c -o $@ $<
 -include #{dep}
 
-CLEANFILES += #{command} #{fs}
+CLEANFILES += #{command} #{fs} #{partmap}
 COMMANDFILES += #{command}
 FSFILES += #{fs}
+PARTMAPFILES += #{partmap}
 
 #{command}: #{src} $(#{src}_DEPENDENCIES) gencmdlist.sh
 	set -e; \
@@ -164,6 +166,11 @@ FSFILES += #{fs}
 	  $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
 	  | sh $(srcdir)/genfslist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
 
+#{partmap}: #{src} $(#{src}_DEPENDENCIES) genpartmaplist.sh
+	set -e; \
+	  $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
+	  | sh $(srcdir)/genpartmaplist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
+
 
 "
     end.join('')
genpartmaplist.sh renamed from grub2/genpartmaplist.sh +21 -0
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/genpartmaplist.sh ./genpartmaplist.sh
@@ -0,0 +1,21 @@
+#! /bin/sh
+#
+# Copyright (C) 2005, 2008  Free Software Foundation, Inc.
+#
+# This script is free software; the author
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Read source code from stdin and detect partmap names.
+
+module=$1
+
+# For now, this emits only a module name, if the module registers a partition map.
+if grep -v "^#" | grep '^ *grub_partition_map_register' >/dev/null 2>&1; then
+    echo $module
+fi
Makefile.in renamed from grub2/Makefile.in +4 -1
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/Makefile.in ./Makefile.in
@@ -123,7 +123,7 @@ include $(srcdir)/conf/$(target_cpu)-$(p
 ### General targets.
 
 CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA)
-pkglib_DATA += moddep.lst command.lst fs.lst
+pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst
 moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk
 	cat $(DEFSYMFILES) /dev/null \
 	  | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \
@@ -135,6 +135,9 @@ command.lst: $(COMMANDFILES)
 fs.lst: $(FSFILES)
 	cat $^ /dev/null | sort > $@
 
+partmap.lst: $(PARTMAPFILES)
+	cat $^ /dev/null | sort > $@
+
 ifeq (, $(UNIFONT_HEX))
 else
 pkgdata_DATA += unicode.pff ascii.pff
util/i386/pc/grub-mkrescue.in renamed from grub2/util/i386/pc/grub-mkrescue.in +7 -2
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/util/i386/pc/grub-mkrescue.in ./util/i386/pc/grub-mkrescue.in
@@ -109,6 +109,11 @@ cp ${input_dir}/*.mod \
   ${input_dir}/command.lst ${input_dir}/moddep.lst ${input_dir}/fs.lst \
   ${aux_dir}/boot/grub/
 
+modules="biosdisk `cat ${input_dir}/partmap.lst` ${modules}"
+for i in ${modules} ; do
+  echo "insmod $i"
+done > ${aux_dir}/boot/grub/grub.cfg
+
 if test "x$overlay" = x ; then : ; else
   cp -dpR ${overlay}/* ${aux_dir}/
 fi
@@ -121,7 +126,7 @@ if [ "x${image_type}" = "xfloppy" ] ; th
 
   # build core.img
   core_img=`mktemp`
-  ${grub_mkimage} -d ${input_dir}/ -m ${memdisk_img} -o ${core_img} memdisk cpio biosdisk ${modules}
+  ${grub_mkimage} -d ${input_dir}/ -m ${memdisk_img} -o ${core_img} memdisk cpio
   rm -f ${memdisk_img}
 
   # build floppy image
@@ -130,7 +135,7 @@ if [ "x${image_type}" = "xfloppy" ] ; th
 else
   # build core.img
   core_img=`mktemp`
-  ${grub_mkimage} -d ${input_dir}/ -o ${core_img} biosdisk iso9660 ${modules}
+  ${grub_mkimage} -d ${input_dir}/ -o ${core_img} biosdisk iso9660
 
   # build grub_eltorito image
   cat ${input_dir}/cdboot.img ${core_img} > ${aux_dir}/boot/grub/grub_eltorito
#1 lore raw

Committed.

Quoted 161 lines · Robert Millan

See subject :-)

Signature · 18 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)


	* gendistlist.sh (EXTRA_DISTFILES): Add `genpartmaplist.sh'.
	* genmk.rb (partmap): New variable.
	(CLEANFILES, PARTMAPFILES): Add #{partmap}.
	(#{partmap}): New target rule.
	* genpartmaplist.sh: New file.
	* Makefile.in (pkglib_DATA): Add partmap.lst.
	(partmap.lst): New target rule.
	* util/i386/pc/grub-mkrescue.in: Generate grub.cfg that loads needed
	modules (including all partition maps), instead of preloading them.

diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/gendistlist.sh ./gendistlist.sh
gendistlist.sh renamed from grub2/gendistlist.sh +2 -2
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 2005  Free Software Foundation, Inc.
+# Copyright (C) 2005, 2008  Free Software Foundation, Inc.
 #
 # This gendistlist.sh is free software; the author
 # gives unlimited permission to copy and/or distribute it,
@@ -16,7 +16,7 @@
 EXTRA_DISTFILES="AUTHORS COPYING ChangeLog DISTLIST INSTALL NEWS README \
 	THANKS TODO Makefile.in aclocal.m4 autogen.sh config.guess \
 	config.h.in config.sub configure configure.ac gencmdlist.sh \
-	gendistlist.sh genfslist.sh genkernsyms.sh genmk.rb \
+	gendistlist.sh genfslist.sh genpartmaplist.sh genkernsyms.sh genmk.rb \
 	genmodsrc.sh gensymlist.sh install-sh mkinstalldirs stamp-h.in"
 
 DISTDIRS="boot commands conf disk font fs hello include io kern loader \

diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/genmk.rb ./genmk.rb

genmk.rb renamed from grub2/genmk.rb +8 -1
@@ -141,6 +141,7 @@ endif
       fake_obj = File.basename(src).suffix('o')
       command = 'cmd-' + obj.suffix('lst')
       fs = 'fs-' + obj.suffix('lst')
+      partmap = 'partmap-' + obj.suffix('lst')
       dep = deps[i]
       flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end
       extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end
@@ -150,9 +151,10 @@ endif
 	$(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -MD -c -o $@ $<
 -include #{dep}
 
-CLEANFILES += #{command} #{fs}
+CLEANFILES += #{command} #{fs} #{partmap}
 COMMANDFILES += #{command}
 FSFILES += #{fs}
+PARTMAPFILES += #{partmap}
 
 #{command}: #{src} $(#{src}_DEPENDENCIES) gencmdlist.sh
 	set -e; \
@@ -164,6 +166,11 @@ FSFILES += #{fs}
 	  $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
 	  | sh $(srcdir)/genfslist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
 
+#{partmap}: #{src} $(#{src}_DEPENDENCIES) genpartmaplist.sh
+	set -e; \
+	  $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
+	  | sh $(srcdir)/genpartmaplist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1)
+
 
 "
     end.join('')

diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/genpartmaplist.sh ./genpartmaplist.sh

genpartmaplist.sh renamed from grub2/genpartmaplist.sh +21 -0
@@ -0,0 +1,21 @@
+#! /bin/sh
+#
+# Copyright (C) 2005, 2008  Free Software Foundation, Inc.
+#
+# This script is free software; the author
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Read source code from stdin and detect partmap names.
+
+module=$1
+
+# For now, this emits only a module name, if the module registers a partition map.
+if grep -v "^#" | grep '^ *grub_partition_map_register' >/dev/null 2>&1; then
+    echo $module
+fi

diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/Makefile.in ./Makefile.in

Makefile.in renamed from grub2/Makefile.in +4 -1
@@ -123,7 +123,7 @@ include $(srcdir)/conf/$(target_cpu)-$(p
 ### General targets.
 
 CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA)
-pkglib_DATA += moddep.lst command.lst fs.lst
+pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst
 moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk
 	cat $(DEFSYMFILES) /dev/null \
 	  | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \
@@ -135,6 +135,9 @@ command.lst: $(COMMANDFILES)
 fs.lst: $(FSFILES)
 	cat $^ /dev/null | sort > $@
 
+partmap.lst: $(PARTMAPFILES)
+	cat $^ /dev/null | sort > $@
+
 ifeq (, $(UNIFONT_HEX))
 else
 pkgdata_DATA += unicode.pff ascii.pff

diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -Nurp ../grub2/util/i386/pc/grub-mkrescue.in ./util/i386/pc/grub-mkrescue.in

util/i386/pc/grub-mkrescue.in renamed from grub2/util/i386/pc/grub-mkrescue.in +7 -2
@@ -109,6 +109,11 @@ cp ${input_dir}/*.mod \
   ${input_dir}/command.lst ${input_dir}/moddep.lst ${input_dir}/fs.lst \
   ${aux_dir}/boot/grub/
 
+modules="biosdisk `cat ${input_dir}/partmap.lst` ${modules}"
+for i in ${modules} ; do
+  echo "insmod $i"
+done > ${aux_dir}/boot/grub/grub.cfg
+
 if test "x$overlay" = x ; then : ; else
   cp -dpR ${overlay}/* ${aux_dir}/
 fi
@@ -121,7 +126,7 @@ if [ "x${image_type}" = "xfloppy" ] ; th
 
   # build core.img
   core_img=`mktemp`
-  ${grub_mkimage} -d ${input_dir}/ -m ${memdisk_img} -o ${core_img} memdisk cpio biosdisk ${modules}
+  ${grub_mkimage} -d ${input_dir}/ -m ${memdisk_img} -o ${core_img} memdisk cpio
   rm -f ${memdisk_img}
 
   # build floppy image
@@ -130,7 +135,7 @@ if [ "x${image_type}" = "xfloppy" ] ; th
 else
   # build core.img
   core_img=`mktemp`
-  ${grub_mkimage} -d ${input_dir}/ -o ${core_img} biosdisk iso9660 ${modules}
+  ${grub_mkimage} -d ${input_dir}/ -o ${core_img} biosdisk iso9660
 
   # build grub_eltorito image
   cat ${input_dir}/cdboot.img ${core_img} > ${aux_dir}/boot/grub/grub_eltorito

_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel

Signature · 5 lines
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)