+2012-01-23 Paulo de Rezende Pinatti <ppinatti@linux.vnet.ibm.com>
+2012-01-23 Vladimir Serbinenko <phcoder@gmail.com>
+2012-01-23 pfsmorigo
+
+ * util/grub-install.in: Support dd'in into PreP partition.
+ * util/grub-probe.c (probe): Support discovering partition type.
+ (main): Support -t msdos_parttype.
+
2012-01-23 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/normal/crypto.c (grub_crypto_autoload): Prevent
fi
if ! ([ "${target_cpu}-${platform}" = "i386-pc" ] \
- || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
+ || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] \
+ || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]); then
install_device=
fi
# 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}-${platform}" = "powerpc-ieee1275" ] \
+ && [ -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}" status=noxfer || {
+ 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:"
PRINT_BAREMETAL_HINT,
PRINT_EFI_HINT,
PRINT_ARC_HINT,
- PRINT_COMPATIBILITY_HINT
+ PRINT_COMPATIBILITY_HINT,
+ PRINT_MSDOS_PARTTYPE
};
static int print = PRINT_FS;
goto end;
}
+ if (print == PRINT_MSDOS_PARTTYPE)
+ {
+ if (dev->disk->partition
+ && 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));
\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\
print = PRINT_ABSTRACTION;
else if (!strcmp (optarg, "cryptodisk_uuid"))
print = PRINT_CRYPTODISK_UUID;
+ else if (!strcmp (optarg, "msdos_parttype"))
+ print = PRINT_MSDOS_PARTTYPE;
else if (!strcmp (optarg, "hints_string"))
print = PRINT_HINT_STR;
else if (!strcmp (optarg, "bios_hints"))