Use ofpathname in grub-setup on sparc

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-04-18 14:02:13 +02:00
parent a9e6ff28d2
commit 6e86896ed8
8 changed files with 26 additions and 29 deletions

View file

@ -25,6 +25,13 @@ kernel_img_CFLAGS = $(COMMON_CFLAGS)
kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x200000,-Bstatic kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x200000,-Bstatic
# Utilities.
sbin_UTILITIES = grub-ofpathname
# For grub-ofpathname.
grub_ofpathname_SOURCES = util/ieee1275/grub-ofpathname.c \
util/ieee1275/ofpath.c util/misc.c gnulib/progname.c
# Scripts. # Scripts.
sbin_SCRIPTS = grub-install sbin_SCRIPTS = grub-install
bin_SCRIPTS = grub-mkrescue bin_SCRIPTS = grub-mkrescue

View file

@ -50,6 +50,7 @@ grub_mkimage_SOURCES = util/grub-mkrawimage.c util/misc.c \
# For grub-setup. # For grub-setup.
util/sparc64/ieee1275/grub-setup.c_DEPENDENCIES = grub_setup_init.h util/sparc64/ieee1275/grub-setup.c_DEPENDENCIES = grub_setup_init.h
grub_setup_SOURCES = util/sparc64/ieee1275/grub-setup.c util/hostdisk.c \ grub_setup_SOURCES = util/sparc64/ieee1275/grub-setup.c util/hostdisk.c \
util/ieee1275/ofpath.c \
util/misc.c util/getroot.c kern/device.c kern/disk.c \ util/misc.c util/getroot.c kern/device.c kern/disk.c \
kern/err.c kern/misc.c kern/parser.c kern/partition.c \ kern/err.c kern/misc.c kern/parser.c kern/partition.c \
kern/file.c kern/fs.c kern/env.c kern/list.c \ kern/file.c kern/fs.c kern/env.c kern/list.c \

View file

@ -20,8 +20,11 @@
#ifndef GRUB_BIOSDISK_MACHINE_UTIL_HEADER #ifndef GRUB_BIOSDISK_MACHINE_UTIL_HEADER
#define GRUB_BIOSDISK_MACHINE_UTIL_HEADER 1 #define GRUB_BIOSDISK_MACHINE_UTIL_HEADER 1
#include <grub/disk.h>
void grub_util_biosdisk_init (const char *dev_map); void grub_util_biosdisk_init (const char *dev_map);
void grub_util_biosdisk_fini (void); void grub_util_biosdisk_fini (void);
char *grub_util_biosdisk_get_grub_dev (const char *os_dev); char *grub_util_biosdisk_get_grub_dev (const char *os_dev);
const char *grub_util_biosdisk_get_osdev (grub_disk_t disk);
#endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */ #endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */

View file

@ -1,6 +1,6 @@
#ifndef GRUB_OFPATH_MACHINE_UTIL_HEADER #ifndef GRUB_OFPATH_MACHINE_UTIL_HEADER
#define GRUB_OFPATH_MACHINE_UTIL_HEADER 1 #define GRUB_OFPATH_MACHINE_UTIL_HEADER 1
char *grub_util_devname_to_ofpath (char *devname); char *grub_util_devname_to_ofpath (const char *devname);
#endif /* ! GRUB_OFPATH_MACHINE_UTIL_HEADER */ #endif /* ! GRUB_OFPATH_MACHINE_UTIL_HEADER */

View file

@ -1352,3 +1352,9 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
return make_device_name (drive, -1, -1); return make_device_name (drive, -1, -1);
#endif #endif
} }
const char *
grub_util_biosdisk_get_osdev (grub_disk_t disk)
{
return map[disk->id].device;
}

View file

@ -368,7 +368,7 @@ strip_trailing_digits (const char *p)
} }
char * char *
grub_util_devname_to_ofpath (char *devname) grub_util_devname_to_ofpath (const char *devname)
{ {
char *name_buf, *device, *devnode, *devicenode, *ofpath; char *name_buf, *device, *devnode, *devicenode, *ofpath;

View file

@ -35,6 +35,7 @@
#include <grub/term.h> #include <grub/term.h>
#include <grub/util/raid.h> #include <grub/util/raid.h>
#include <grub/util/lvm.h> #include <grub/util/lvm.h>
#include <grub/util/ofpath.h>
#include <grub_setup_init.h> #include <grub_setup_init.h>
@ -103,28 +104,6 @@ grub_refresh (void)
fflush (stdout); fflush (stdout);
} }
static char *compute_dest_ofpath (const char *dest)
{
int len = strlen (dest);
char *res, *p, c;
res = xmalloc (len);
p = res;
while ((c = *dest++) != '\0')
{
if (c == '\\' && *dest == ',')
{
*p++ = ',';
dest++;
}
else
*p++ = c;
}
*p++ = '\0';
return res;
}
static void static void
setup (const char *prefix, const char *dir, setup (const char *prefix, const char *dir,
const char *boot_file, const char *core_file, const char *boot_file, const char *core_file,
@ -195,8 +174,6 @@ setup (const char *prefix, const char *dir,
last_length = length; last_length = length;
} }
dest_ofpath = compute_dest_ofpath (dest);
/* Read the boot image by the OS service. */ /* Read the boot image by the OS service. */
boot_path = grub_util_get_path (dir, boot_file); boot_path = grub_util_get_path (dir, boot_file);
boot_size = grub_util_get_image_size (boot_path); boot_size = grub_util_get_image_size (boot_path);
@ -229,8 +206,7 @@ setup (const char *prefix, const char *dir,
+ GRUB_DISK_SECTOR_SIZE + GRUB_DISK_SECTOR_SIZE
- sizeof (*block)); - sizeof (*block));
grub_util_info ("root is `%s', dest is `%s', and dest_ofpath is `%s'", grub_util_info ("root is `%s', dest is `%s'", root, dest);
root, dest, dest_ofpath);
/* Open the root device and the destination device. */ /* Open the root device and the destination device. */
grub_util_info ("Opening root"); grub_util_info ("Opening root");
@ -243,6 +219,11 @@ setup (const char *prefix, const char *dir,
if (! dest_dev) if (! dest_dev)
grub_util_error ("%s", grub_errmsg); grub_util_error ("%s", grub_errmsg);
dest_ofpath
= grub_util_devname_to_ofpath (grub_util_biosdisk_get_osdev (dest_dev->disk));
grub_util_info ("dest_ofpath is `%s'", dest_ofpath);
grub_util_info ("setting the root device to `%s'", root); grub_util_info ("setting the root device to `%s'", root);
if (grub_env_set ("root", root) != GRUB_ERR_NONE) if (grub_env_set ("root", root) != GRUB_ERR_NONE)
grub_util_error ("%s", grub_errmsg); grub_util_error ("%s", grub_errmsg);
@ -449,7 +430,6 @@ init_info (struct grub_setup_info *gp)
gp->dev_map = NULL; gp->dev_map = NULL;
gp->root_dev = NULL; gp->root_dev = NULL;
gp->prefix = NULL; gp->prefix = NULL;
gp->dest_dev = NULL;
} }
static int static int