[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [1753] 2008-07-30 Robert Millan <address@hidden>,
Robert Millan <=