Bean wrote:
On Wed, Jun 4, 2008 at 7:01 PM, Isaac Dupree
<[EMAIL PROTECTED]> wrote:
how do you apply this patch? With `patch -p1` I'm getting:
2 out of 4 hunks FAILED -- saving rejects to file
loader/i386/efi/linux.c.rej
any more infos needed?
There maybe some code mixups, try this one:
nope, against latest CVS:
> patch -p1 <../grubinitrd2.patch
patching file loader/i386/efi/linux.c
Hunk #1 FAILED at 601.
Hunk #2 FAILED at 612.
2 out of 4 hunks FAILED -- saving rejects to file
loader/i386/efi/linux.c.rej
BTW, are you using a customized kernel ? Some people reports that efi
booting don't work. They have 32-bit firmware just like yours, but
hangs even without the initrd.
Well, I'll see what happens. (Ubuntu kernel is very customized by the
Ubuntu devs.) I have a theory that the console display doesn't work so
I need to get feedback some other way (X? Sound? File modification?
Visibility on network (plug into ethernet first)?) to see if linux has
booted. Also once I have got this patch tried, I'll try adding your
other patch(es) for x86-64 and see if a 64-bit EFI image makes any
difference (although I doubt it will work any *better*, and possibly
worse. but who knows.)
Does grub2 "multiboot"-ing itself, work yet? (just so we could test that
too under EFI)
diff --git a/loader/i386/efi/linux.c b/loader/i386/efi/linux.c
index ee3fb99..5ace7c0 100644
--- a/loader/i386/efi/linux.c
+++ b/loader/i386/efi/linux.c
@@ -601,7 +601,7 @@ grub_rescue_cmd_initrd (int argc, char *argv[])
lh = (struct linux_kernel_header *) real_mode_mem;
- addr_max = grub_cpu_to_le32 (lh->initrd_addr_max);
+ addr_max = (grub_cpu_to_le32 (lh->initrd_addr_max) << 10);
if (linux_mem_size != 0 && linux_mem_size < addr_max)
addr_max = linux_mem_size;
@@ -612,7 +612,8 @@ grub_rescue_cmd_initrd (int argc, char *argv[])
addr_max -= 0x10000;
/* Usually, the compression ratio is about 50%. */
- addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12);
+ addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12)
+ + page_align (size);
/* Find the highest address to put the initrd. */
mmap_size = find_mmap_size ();
@@ -625,8 +626,6 @@ grub_rescue_cmd_initrd (int argc, char *argv[])
desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
{
if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
- && desc->physical_start >= addr_min
- && desc->physical_start + size < addr_max
&& desc->num_pages >= initrd_pages)
{
grub_efi_physical_address_t physical_end;
@@ -635,6 +634,9 @@ grub_rescue_cmd_initrd (int argc, char *argv[])
if (physical_end > addr_max)
physical_end = addr_max;
+ if (physical_end < addr_min)
+ continue;
+
if (physical_end > addr)
addr = physical_end - page_align (size);
}
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel