|
From: | Cui Lei |
Subject: | Re: Grub2 can not detect usb disk |
Date: | Thu, 30 Jun 2011 10:38:29 +0800 |
User-agent: | Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20110627 Thunderbird/5.0 |
I have found the the last version which can boot my machine, it is
the r2348. The r2349 can not boot it. So I checked out the changelog from 2348 to 2349 : /*************************************************************************************************************/ === modified file 'ChangeLog' --- ChangeLog 2010-05-01 12:06:53 +0000 +++ ChangeLog 2010-05-01 12:32:48 +0000 @@ -1,5 +1,20 @@ 2010-05-01 Vladimir Serbinenko <address@hidden> + Use LBIO on coreboot. + + * conf/i386-coreboot.rmk (kernel_img_SOURCES): Change + kern/i386/multiboot_mmap.c to kern/i386/coreboot/mmap.c. + * include/grub/i386/coreboot/memory.h (GRUB_LINUXBIOS_MEMBER_LINK): + New declaration. + * kern/i386/coreboot/init.c (grub_machine_init): Don't call + grub_machine_mmap_init on coreboot. + * kern/i386/coreboot/mmap.c (grub_linuxbios_table_iterate): Handle + GRUB_LINUXBIOS_MEMBER_LINK. + (grub_machine_mmap_iterate): Fix declaration. + * kern/i386/coreboot/startup.S: Don't save mbi location on coreboot. + +2010-05-01 Vladimir Serbinenko <address@hidden> + Split coreboot and multiboot ports. * conf/i386-multiboot.rmk: New file. === modified file 'conf/i386-coreboot.rmk' --- conf/i386-coreboot.rmk 2010-04-10 23:14:31 +0000 +++ conf/i386-coreboot.rmk 2010-05-01 12:32:48 +0000 @@ -10,7 +10,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \ kern/i386/misc.S \ kern/i386/coreboot/init.c \ - kern/i386/multiboot_mmap.c \ + kern/i386/coreboot/mmap.c \ kern/i386/halt.c \ kern/main.c kern/device.c \ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ === modified file 'include/grub/i386/coreboot/memory.h' --- include/grub/i386/coreboot/memory.h 2008-11-20 20:30:24 +0000 +++ include/grub/i386/coreboot/memory.h 2010-05-01 12:32:48 +0000 @@ -44,8 +44,9 @@ struct grub_linuxbios_table_item { -#define GRUB_LINUXBIOS_MEMBER_UNUSED 0 -#define GRUB_LINUXBIOS_MEMBER_MEMORY 1 +#define GRUB_LINUXBIOS_MEMBER_UNUSED 0x00 +#define GRUB_LINUXBIOS_MEMBER_MEMORY 0x01 +#define GRUB_LINUXBIOS_MEMBER_LINK 0x11 grub_uint32_t tag; grub_uint32_t size; }; === modified file 'kern/i386/coreboot/init.c' --- kern/i386/coreboot/init.c 2010-02-06 23:52:31 +0000 +++ kern/i386/coreboot/init.c 2010-05-01 12:32:48 +0000 @@ -117,7 +117,9 @@ return 0; } +#ifdef GRUB_MACHINE_MULTIBOOT grub_machine_mmap_init (); +#endif grub_machine_mmap_iterate (heap_init); grub_tsc_init (); === modified file 'kern/i386/coreboot/mmap.c' --- kern/i386/coreboot/mmap.c 2008-08-17 16:32:18 +0000 +++ kern/i386/coreboot/mmap.c 2010-05-01 12:32:48 +0000 @@ -57,13 +57,23 @@ (long) table_header->size); for (; table_item->size; table_item = (grub_linuxbios_table_item_t) ((long) table_item + (long) table_item->size)) - if (hook (table_item)) - return 1; + { + if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK + && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1))) + { + table_header = (grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1); + goto signature_found; + } + if (hook (table_item)) + return 1; + } return 0; } -void +grub_err_t grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t)) { mem_region_t mem_region; === modified file 'kern/i386/coreboot/startup.S' --- kern/i386/coreboot/startup.S 2009-12-24 14:09:06 +0000 +++ kern/i386/coreboot/startup.S 2010-05-01 12:32:48 +0000 @@ -66,10 +66,12 @@ .long -0x1BADB002 - MULTIBOOT_MEMORY_INFO codestart: +#ifdef GRUB_MACHINE_MULTIBOOT cmpl $MULTIBOOT_BOOTLOADER_MAGIC, %eax jne 0f movl %ebx, EXT_C(startup_multiboot_info) 0: +#endif /* initialize the stack */ movl $GRUB_MEMORY_MACHINE_PROT_STACK, %esp /***********************************************************************************************************************/ I guess it may be because the file "kern/i386/coreboot/mmap.c", but it has too much diffs with the multiboot_mmap.c and I am not familiar with the mmap at all, so I don't know how to found out the causes. Rock. On 28.06.2011 12:02, Cui Lei wrote:Sorry , I don't know what the meaning of the "bisect" and how to do? Could you tell me some message in detail ?You take a revision which doesn't work (1.99rc2 = r3229) and a working one (1.98 = r2249). Then you try a revision in the middle, e.g. r2749. If it works the error is in the range 2749..3229, otherwise in 2249..2749, then you try a revision inside this range and in 10 steps you'll have the exact revision which causes your problem.Thanks a lot. BRs, Rock.On 28.06.2011 10:45, Rock Cui wrote:I had tried to use the grub1.99rc2 as a payload of coreboot at the beginning, but it can not boot my machine,Could you try to bisect? Recent bzr worked fine in qemu+coreboot. Your machine may present some special aspect and bisect is probably the fastest way in your case.so I changed to 1.98As I said USB support in 1.98 wasn't good enough. Basically it worked only in qemu., then booting succeed. I want to insmod the uhci.mod and usbms.mod to support USB, but they are not exit in my build folder. If I run "configure" with "--with-platform=pc", they will be there, but with "--with-platform=coreboot", I can not found them. I don't know what should I do to get them for i386-coreboot, so I use the two modules which were built with "--with-platform=pc" in my payload.elf.USB modules weren't enabled in 1.98 on coreboot.Surprising, they can be insmoded and run in the grub-shell , but unfortunately, I got those logs, they can not work.it's already surprising they didn't crash GRUB altogether. _______________________________________________ Grub-devel mailing list address@hidden https://lists.gnu.org/mailman/listinfo/grub-devel_______________________________________________ Grub-devel mailing list address@hidden https://lists.gnu.org/mailman/listinfo/grub-devel |
[Prev in Thread] | Current Thread | [Next in Thread] |