grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Grub2 can not detect usb disk


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: Grub2 can not detect usb disk
Date: Thu, 30 Jun 2011 15:44:16 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110626 Iceowl/1.0b2 Icedove/3.1.11

On 30.06.2011 04:38, Cui Lei wrote:
> 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 :
>
.config from coreboot would be useful as well
> /*************************************************************************************************************/
> === 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.98
>>>> As 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
>>
>>
>> _______________________________________________
>> 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


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]