[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[1752] 2008-07-30 Robert Millan <address@hidden>
From: |
Robert Millan |
Subject: |
[1752] 2008-07-30 Robert Millan <address@hidden> |
Date: |
Wed, 30 Jul 2008 10:42:12 +0000 |
Revision: 1752
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1752
Author: robertmh
Date: 2008-07-30 10:42:11 +0000 (Wed, 30 Jul 2008)
Log Message:
-----------
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.
* kern/i386/linuxbios/init.c (make_install_device): Remove function.
(grub_machine_set_prefix): Use `grub_prefix' to set the `prefix'
environment variable instead of dummy make_install_device().
* kern/i386/ieee1275/startup.S: Include `<grub/machine/kernel.h>'.
(start): Insert a data section, with `grub_prefix' variable.
* kern/i386/linuxbios/startup.S: Likewise.
* include/grub/powerpc/ieee1275/kernel.h [!ASM_FILE] (grub_prefix):
New variable reference.
* include/grub/i386/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_PREFIX):
New macro. Defines offset of `grub_prefix' within startup.S (relative
to `start').
(GRUB_KERNEL_MACHINE_DATA_END): New macro. Defines the end of data
section within startup.S (relative to `start').
* include/grub/i386/coreboot/kernel.h: Likewise.
* util/elf/grub-mkimage.c (add_segments): Receive `prefix' parameter.
Overwrite grub_prefix with its contents, at the beginning of the
first segment.
(main): Understand -p|--prefix.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/include/grub/i386/coreboot/kernel.h
trunk/grub2/include/grub/i386/ieee1275/kernel.h
trunk/grub2/include/grub/powerpc/ieee1275/kernel.h
trunk/grub2/kern/i386/ieee1275/startup.S
trunk/grub2/kern/i386/linuxbios/init.c
trunk/grub2/kern/i386/linuxbios/startup.S
trunk/grub2/kern/ieee1275/init.c
trunk/grub2/util/elf/grub-mkimage.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2008-07-30 00:21:35 UTC (rev 1751)
+++ trunk/grub2/ChangeLog 2008-07-30 10:42:11 UTC (rev 1752)
@@ -1,5 +1,32 @@
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.
+ * kern/i386/linuxbios/init.c (make_install_device): Remove function.
+ (grub_machine_set_prefix): Use `grub_prefix' to set the `prefix'
+ environment variable instead of dummy make_install_device().
+
+ * kern/i386/ieee1275/startup.S: Include `<grub/machine/kernel.h>'.
+ (start): Insert a data section, with `grub_prefix' variable.
+ * kern/i386/linuxbios/startup.S: Likewise.
+
+ * include/grub/powerpc/ieee1275/kernel.h [!ASM_FILE] (grub_prefix):
+ New variable reference.
+ * include/grub/i386/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_PREFIX):
+ New macro. Defines offset of `grub_prefix' within startup.S (relative
+ to `start').
+ (GRUB_KERNEL_MACHINE_DATA_END): New macro. Defines the end of data
+ section within startup.S (relative to `start').
+ * include/grub/i386/coreboot/kernel.h: Likewise.
+
+ * util/elf/grub-mkimage.c (add_segments): Receive `prefix' parameter.
+ Overwrite grub_prefix with its contents, at the beginning of the
+ first segment.
+ (main): Understand -p|--prefix.
+
+2008-07-30 Robert Millan <address@hidden>
+
* util/grub.d/10_hurd.in: Source ${libdir}/grub/update-grub_lib.
2008-07-30 Robert Millan <address@hidden>
Modified: trunk/grub2/include/grub/i386/coreboot/kernel.h
===================================================================
--- trunk/grub2/include/grub/i386/coreboot/kernel.h 2008-07-30 00:21:35 UTC
(rev 1751)
+++ trunk/grub2/include/grub/i386/coreboot/kernel.h 2008-07-30 10:42:11 UTC
(rev 1752)
@@ -26,4 +26,11 @@
/* Non-zero value is only needed for some IEEE-1275 platforms. */
#define GRUB_MOD_GAP 0
+#ifndef ASM_FILE
+extern char grub_prefix[];
+#endif
+
+#define GRUB_KERNEL_MACHINE_PREFIX 0x2
+#define GRUB_KERNEL_MACHINE_DATA_END 0x42
+
#endif /* ! GRUB_KERNEL_MACHINE_HEADER */
Modified: trunk/grub2/include/grub/i386/ieee1275/kernel.h
===================================================================
--- trunk/grub2/include/grub/i386/ieee1275/kernel.h 2008-07-30 00:21:35 UTC
(rev 1751)
+++ trunk/grub2/include/grub/i386/ieee1275/kernel.h 2008-07-30 10:42:11 UTC
(rev 1752)
@@ -1 +1,4 @@
#include <grub/powerpc/ieee1275/kernel.h>
+
+#define GRUB_KERNEL_MACHINE_PREFIX 0x2
+#define GRUB_KERNEL_MACHINE_DATA_END 0x42
Modified: trunk/grub2/include/grub/powerpc/ieee1275/kernel.h
===================================================================
--- trunk/grub2/include/grub/powerpc/ieee1275/kernel.h 2008-07-30 00:21:35 UTC
(rev 1751)
+++ trunk/grub2/include/grub/powerpc/ieee1275/kernel.h 2008-07-30 10:42:11 UTC
(rev 1752)
@@ -28,7 +28,15 @@
rewrite grub-mkimage to generate valid ELF files. */
#define GRUB_MOD_GAP 0x8000
+#ifndef ASM_FILE
+
void EXPORT_FUNC (grub_reboot) (void);
void EXPORT_FUNC (grub_halt) (void);
+/* The prefix which points to the directory where GRUB modules and its
+ configuration file are located. */
+extern char grub_prefix[];
+
+#endif
+
#endif /* ! GRUB_KERNEL_MACHINE_HEADER */
Modified: trunk/grub2/kern/i386/ieee1275/startup.S
===================================================================
--- trunk/grub2/kern/i386/ieee1275/startup.S 2008-07-30 00:21:35 UTC (rev
1751)
+++ trunk/grub2/kern/i386/ieee1275/startup.S 2008-07-30 10:42:11 UTC (rev
1752)
@@ -19,6 +19,7 @@
#define ASM_FILE 1
#include <grub/symbol.h>
+#include <grub/machine/kernel.h>
#include <grub/machine/memory.h>
#include <grub/cpu/linux.h>
#include <multiboot.h>
@@ -38,6 +39,24 @@
start:
_start:
+ jmp codestart
+
+ /*
+ * This is a special data area at a fixed offset from the beginning.
+ */
+
+ . = EXT_C(start) + GRUB_KERNEL_MACHINE_PREFIX
+
+VARIABLE(grub_prefix)
+ /* to be filled by grub-mkimage */
+
+ /*
+ * Leave some breathing room for the prefix.
+ */
+
+ . = EXT_C(start) + GRUB_KERNEL_MACHINE_DATA_END
+
+codestart:
movl %eax, EXT_C(grub_ieee1275_entry_fn)
jmp EXT_C(grub_main)
Modified: trunk/grub2/kern/i386/linuxbios/init.c
===================================================================
--- trunk/grub2/kern/i386/linuxbios/init.c 2008-07-30 00:21:35 UTC (rev
1751)
+++ trunk/grub2/kern/i386/linuxbios/init.c 2008-07-30 10:42:11 UTC (rev
1752)
@@ -78,12 +78,6 @@
{
}
-static char *
-make_install_device (void)
-{
- return NULL;
-}
-
void
grub_machine_init (void)
{
@@ -155,7 +149,7 @@
grub_machine_set_prefix (void)
{
/* Initialize the prefix. */
- grub_env_set ("prefix", make_install_device ());
+ grub_env_set ("prefix", grub_prefix);
}
void
Modified: trunk/grub2/kern/i386/linuxbios/startup.S
===================================================================
--- trunk/grub2/kern/i386/linuxbios/startup.S 2008-07-30 00:21:35 UTC (rev
1751)
+++ trunk/grub2/kern/i386/linuxbios/startup.S 2008-07-30 10:42:11 UTC (rev
1752)
@@ -19,6 +19,7 @@
#define ASM_FILE 1
#include <grub/symbol.h>
+#include <grub/machine/kernel.h>
#include <grub/machine/memory.h>
#include <grub/cpu/linux.h>
#include <multiboot.h>
@@ -35,7 +36,25 @@
.file "startup.S"
.text
.globl start, _start
+start:
+_start:
+ jmp codestart
+ /*
+ * This is a special data area at a fixed offset from the beginning.
+ */
+
+ . = EXT_C(start) + GRUB_KERNEL_MACHINE_PREFIX
+
+VARIABLE(grub_prefix)
+ /* to be filled by grub-mkimage */
+
+ /*
+ * Leave some breathing room for the prefix.
+ */
+
+ . = EXT_C(start) + GRUB_KERNEL_MACHINE_DATA_END
+
#if 0
/*
* Support for booting GRUB from a Multiboot boot loader (e.g. GRUB itself).
@@ -49,8 +68,7 @@
.long -0x1BADB002
#endif
-start:
-_start:
+codestart:
/* initialize the stack */
movl $GRUB_MEMORY_MACHINE_PROT_STACK, %esp
Modified: trunk/grub2/kern/ieee1275/init.c
===================================================================
--- trunk/grub2/kern/ieee1275/init.c 2008-07-30 00:21:35 UTC (rev 1751)
+++ trunk/grub2/kern/ieee1275/init.c 2008-07-30 10:42:11 UTC (rev 1752)
@@ -84,6 +84,13 @@
/* We already set prefix in grub_machine_init(). */
return;
+ if (grub_prefix[0])
+ {
+ grub_env_set ("prefix", grub_prefix);
+ /* Prefix is hardcoded in the core image. */
+ return;
+ }
+
if (grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", &bootpath,
sizeof (bootpath), 0))
{
Modified: trunk/grub2/util/elf/grub-mkimage.c
===================================================================
--- trunk/grub2/util/elf/grub-mkimage.c 2008-07-30 00:21:35 UTC (rev 1751)
+++ trunk/grub2/util/elf/grub-mkimage.c 2008-07-30 10:42:11 UTC (rev 1752)
@@ -158,7 +158,7 @@
}
void
-add_segments (char *dir, FILE *out, int chrp, char *mods[])
+add_segments (char *dir, char *prefix, FILE *out, int chrp, char *mods[])
{
Elf32_Ehdr ehdr;
Elf32_Phdr *phdrs = NULL;
@@ -166,7 +166,7 @@
FILE *in;
char *kernel_path;
grub_addr_t grub_end = 0;
- off_t offset;
+ off_t offset, first_segment;
int i, phdr_size;
/* Read ELF header. */
@@ -192,6 +192,8 @@
phdrs = xmalloc (phdr_size);
offset += ALIGN_UP (phdr_size, GRUB_TARGET_SIZEOF_LONG);
+ first_segment = offset;
+
/* Copy all existing segments. */
for (i = 0; i < grub_target_to_host16 (ehdr.e_phnum); i++)
{
@@ -272,6 +274,13 @@
/* Write ELF header. */
grub_util_write_image_at (&ehdr, sizeof (ehdr), 0, out);
+ if (prefix)
+ {
+ if (GRUB_KERNEL_MACHINE_PREFIX + strlen (prefix) + 1 >
GRUB_KERNEL_MACHINE_DATA_END)
+ grub_util_error ("prefix too long");
+ grub_util_write_image_at (prefix, strlen (prefix) + 1, first_segment +
GRUB_KERNEL_MACHINE_PREFIX, out);
+ }
+
free (phdrs);
free (kernel_path);
}
@@ -279,6 +288,7 @@
static struct option options[] =
{
{"directory", required_argument, 0, 'd'},
+ {"prefix", required_argument, 0, 'p'},
{"output", required_argument, 0, 'o'},
{"help", no_argument, 0, 'h'},
{"note", no_argument, 0, 'n'},
@@ -299,6 +309,7 @@
Make a bootable image of GRUB.\n\
\n\
-d, --directory=DIR use images and modules under DIR [default=%s]\n\
+-p, --prefix=DIR set grub_prefix directory\n\
-o, --output=FILE output a generated image to FILE\n\
-h, --help display this message and exit\n\
-n, --note add NOTE segment for CHRP Open Firmware\n\
@@ -317,13 +328,14 @@
FILE *fp;
char *output = NULL;
char *dir = NULL;
+ char *prefix = NULL;
int chrp = 0;
progname = "grub-mkimage";
while (1)
{
- int c = getopt_long (argc, argv, "d:o:hVvn", options, 0);
+ int c = getopt_long (argc, argv, "d:p:o:hVvn", options, 0);
if (c == -1)
break;
@@ -334,6 +346,11 @@
free (dir);
dir = xstrdup (optarg);
break;
+ case 'p':
+ if (prefix)
+ free (prefix);
+ prefix = xstrdup (optarg);
+ break;
case 'h':
usage (0);
break;
@@ -364,7 +381,7 @@
if (! fp)
grub_util_error ("cannot open %s", output);
- add_segments (dir ? : GRUB_LIBDIR, fp, chrp, argv + optind);
+ add_segments (dir ? : GRUB_LIBDIR, prefix, fp, chrp, argv + optind);
fclose (fp);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [1752] 2008-07-30 Robert Millan <address@hidden>,
Robert Millan <=