commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[1753] 2008-07-30 Robert Millan <address@hidden>


From: Robert Millan
Subject: [1753] 2008-07-30 Robert Millan <address@hidden>
Date: Wed, 30 Jul 2008 10:44:38 +0000

Revision: 1753
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1753
Author:   robertmh
Date:     2008-07-30 10:44:38 +0000 (Wed, 30 Jul 2008)

Log Message:
-----------
2008-07-30  Robert Millan  <address@hidden>

        * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_DATA_END):
        Increase from 0x50 to 0x60.
        * util/i386/pc/grub-install.in: Detect cross-disk installs, and
        use UUIDs to identify the root drive for them.  If that's not
        possible, abort.
        * util/i386/pc/grub-setup.c (setup): Do not special-case, or even
        check, for cross-disk installs.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/include/grub/i386/pc/kernel.h
    trunk/grub2/util/i386/pc/grub-install.in
    trunk/grub2/util/i386/pc/grub-setup.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-07-30 10:42:11 UTC (rev 1752)
+++ trunk/grub2/ChangeLog       2008-07-30 10:44:38 UTC (rev 1753)
@@ -1,5 +1,15 @@
 2008-07-30  Robert Millan  <address@hidden>
 
+       * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_DATA_END):
+       Increase from 0x50 to 0x60.
+       * util/i386/pc/grub-install.in: Detect cross-disk installs, and
+       use UUIDs to identify the root drive for them.  If that's not
+       possible, abort.
+       * util/i386/pc/grub-setup.c (setup): Do not special-case, or even
+       check, for cross-disk installs.
+
+2008-07-30  Robert Millan  <address@hidden>
+
        * kern/ieee1275/init.c (grub_machine_set_prefix): If `grub_prefix'
        is non-empty, use it to set the `prefix' environment variable instead
        of the usual approach.

Modified: trunk/grub2/include/grub/i386/pc/kernel.h
===================================================================
--- trunk/grub2/include/grub/i386/pc/kernel.h   2008-07-30 10:42:11 UTC (rev 
1752)
+++ trunk/grub2/include/grub/i386/pc/kernel.h   2008-07-30 10:44:38 UTC (rev 
1753)
@@ -41,7 +41,7 @@
 #define GRUB_KERNEL_MACHINE_PREFIX             0x20
 
 /* End of the data section. */
-#define GRUB_KERNEL_MACHINE_DATA_END           0x50
+#define GRUB_KERNEL_MACHINE_DATA_END           0x60
 
 /* The size of the first region which won't be compressed.  */
 #if defined(ENABLE_LZO)

Modified: trunk/grub2/util/i386/pc/grub-install.in
===================================================================
--- trunk/grub2/util/i386/pc/grub-install.in    2008-07-30 10:42:11 UTC (rev 
1752)
+++ trunk/grub2/util/i386/pc/grub-install.in    2008-07-30 10:44:38 UTC (rev 
1753)
@@ -233,15 +233,34 @@
 # Device abstraction module, if any (lvm, raid).
 devabstraction_module=`$grub_probe --target=abstraction --device 
${grub_device}`
 
+# The order in this list is critical.  Be careful when modifying it.
+modules="$modules $fs_module $partmap_module biosdisk $devabstraction_module"
+
+prefix_drive=
 if [ "x${devabstraction_module}" = "x" ] ; then
-    prefix_drive=
+    if echo "${install_device}" | grep -qx "(.*)" ; then
+      install_drive="${install_device}"
+    else
+      install_drive="`$grub_probe --target=drive --device ${install_device}`"
+    fi
+    grub_drive="`$grub_probe --target=drive --device ${grub_device}`"
+
+    # Strip partition number
+    install_drive="`echo ${install_drive} | sed -e s/,[0-9]*//g`"
+    grub_drive="`echo ${grub_drive} | sed -e s/,[0-9]*//g`"
+    if [ "x${grub_drive}" != "x${install_drive}" ] ; then
+        uuid="`$grub_probe --target=fs_uuid --device ${grub_device}`"
+        if [ "x${uuid}" = "x" ] ; then
+          echo "You attempted a cross-disk install, but the filesystem 
containing ${grubdir} does not support UUIDs." 1>&2
+          exit 1
+        fi
+        prefix_drive="(UUID=${uuid})"
+        modules="$modules fs_uuid"
+    fi
 else
     prefix_drive=`$grub_probe --target=drive --device ${grub_device}`
 fi
 
-# The order in this list is critical.  Be careful when modifying it.
-modules="$modules $fs_module $partmap_module biosdisk $devabstraction_module"
-
 grub_prefix="${prefix_drive}`make_system_path_relative_to_its_root 
${grubdir}`" || exit 1
 
 $grub_mkimage --output=${grubdir}/core.img --prefix=${grub_prefix}/ $modules 
|| exit 1

Modified: trunk/grub2/util/i386/pc/grub-setup.c
===================================================================
--- trunk/grub2/util/i386/pc/grub-setup.c       2008-07-30 10:42:11 UTC (rev 
1752)
+++ trunk/grub2/util/i386/pc/grub-setup.c       2008-07-30 10:44:38 UTC (rev 
1753)
@@ -339,18 +339,12 @@
          if (grub_disk_write (dest_dev->disk, embed_region.start, 0, 
core_size, core_img))
            grub_util_error ("%s", grub_errmsg);
 
-         /* The boot image and the core image are on the same drive,
-            so there is no need to specify the boot drive explicitly.  */
-         *boot_drive = 0xff;
+         /* FIXME: can this be skipped?  */
+         *boot_drive = 0xFF;
+         *root_drive = 0xFF;
+
          *kernel_sector = grub_cpu_to_le64 (embed_region.start);
 
-          /* If the root device is different from the destination device,
-             it is necessary to embed the root drive explicitly.  */
-          if (root_dev->disk->id != dest_dev->disk->id)
-            *root_drive = (grub_uint8_t) root_dev->disk->id;
-          else
-            *root_drive = 0xFF;
-
          /* Write the boot image onto the disk.  */
          if (grub_disk_write (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE,
                               boot_img))
@@ -480,15 +474,8 @@
   
   *kernel_sector = grub_cpu_to_le64 (first_sector);
 
-  /* If the destination device is different from the root device,
-     it is necessary to embed the boot drive explicitly.  */
-  if (root_dev->disk->id != dest_dev->disk->id)
-    *boot_drive = (grub_uint8_t) root_dev->disk->id;
-  else
-    *boot_drive = 0xFF;
-
-  /* When the core image is not embedded, the root device always follows
-     the boot device.  */
+  /* FIXME: can this be skipped?  */
+  *boot_drive = 0xFF;
   *root_drive = 0xFF;
 
   *install_dos_part = grub_cpu_to_le32 (dos_part);






reply via email to

[Prev in Thread] Current Thread [Next in Thread]