Hi,

This patch will enable the install and run of Grub 2 in the PReP partition for PowerPC machines. This procedure will only be used if a install_device argument is used with grub-install, otherwise it will be installed by the old way.

Best Regards

--
Paulo de Rezende Pinatti
Staff Software Engineer, LTC Brazil

=== modified file 'util/grub-install.in'
--- util/grub-install.in        2011-11-05 11:15:07 +0000
+++ util/grub-install.in        2011-11-11 00:06:00 +0000
@@ -273,8 +273,7 @@
     exit 1
 fi
 
-if ! ([ "${target_cpu}-${platform}" = "i386-pc" ] \
-    || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
+if ! ([ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${platform}" = 
"ieee1275" ]); then
     install_device=
 fi
 
@@ -643,6 +642,28 @@
 
         # Point boot-device at the new grub install
        boot_device="$ofpath:$partno,"`"$grub_mkrelpath" 
"${grubdir}/core.${imgext}" | sed 's,/,\\\\,g'`
+
+    # If a install device is defined, copy the core.elf to PReP partition. 
+    if [ "${target_cpu}" = "powerpc" ] && [ -n "${install_device}" ]; then
+        if [ "$(${grub_probe} -m ${device_map} -d ${install_device} -t 
msdos_parttype)" != "41" ]; then
+            echo "The chosen partition is not a PReP partition."
+            exit 1
+        fi
+
+        if [ "$(file -s ${install_device} -b | awk '{ print $1 }')" = ELF ] || 
[ $(cmp /dev/zero ${install_device} &>/dev/null) ]; then
+            # Change boot device to the harddisk root
+            boot_device="$ofpath"
+            dd if=${grubdir}/core.${imgext} of=${install_device} 2>/dev/null 
|| {
+            echo "Failed to copy Grub to the PReP partition."
+            exit 1
+            }
+        else
+            echo "The PReP partition is not empty. If you are sure you want to 
use it, run dd to clear it:"
+            echo "  dd if=/dev/zero of=${install_device}"
+            exit 1
+        fi
+    fi
+
        "$nvsetenv" boot-device "$boot_device" || {
            echo "$nvsetenv failed."
            echo "You will have to set boot-device manually.  At the Open 
Firmware prompt, type:"

=== modified file 'util/grub-probe.c'
--- util/grub-probe.c   2011-11-08 11:38:30 +0000
+++ util/grub-probe.c   2011-11-11 00:02:52 +0000
@@ -55,7 +55,8 @@
   PRINT_DEVICE,
   PRINT_PARTMAP,
   PRINT_ABSTRACTION,
-  PRINT_CRYPTODISK_UUID
+  PRINT_CRYPTODISK_UUID,
+  PRINT_MSDOS_PARTTYPE
 };
 
 int print = PRINT_FS;
@@ -231,6 +232,20 @@
       goto end;
     }
 
+  if (print == PRINT_MSDOS_PARTTYPE)
+    {
+      if (dev->disk->partition == NULL)
+        {
+          grub_util_info ("no partition map found for %s", dev->disk->name);
+        }
+
+      if (strcmp(dev->disk->partition->partmap->name, "msdos") == 0)
+        printf ("%02x", dev->disk->partition->msdostype);
+
+      printf ("\n");
+      goto end;
+    }
+
   fs = grub_fs_probe (dev);
   if (! fs)
     grub_util_error ("%s", grub_errmsg);
@@ -296,7 +311,7 @@
 \n\
   -d, --device              given argument is a system device, not a path\n\
   -m, --device-map=FILE     use FILE as the device map [default=%s]\n\
-  -t, 
--target=(fs|fs_uuid|fs_label|drive|device|partmap|abstraction|cryptodisk_uuid)\n\
+  -t, 
--target=(fs|fs_uuid|fs_label|drive|device|partmap|abstraction|cryptodisk_uuid|msdos_parttype)\n\
                             print filesystem module, GRUB drive, system 
device, partition map module, abstraction module or CRYPTO UUID [default=fs]\n\
   -h, --help                display this message and exit\n\
   -V, --version             print version information and exit\n\
@@ -357,6 +372,8 @@
              print = PRINT_ABSTRACTION;
            else if (!strcmp (optarg, "cryptodisk_uuid"))
              print = PRINT_CRYPTODISK_UUID;
+           else if (!strcmp (optarg, "msdos_parttype"))
+             print = PRINT_MSDOS_PARTTYPE;
            else
              usage (1);
            break;

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to