I have been trying to get windows and OS X to boot on my Mac Book Pro
(booting grub2 natively -- no chainloading) but have been unable to get it
to boot chainloaded objects. I haven't really been able to troubleshoot it
yet. I am using a CVS build, but it is about 5 weeks old now. I just haven't
had a chance to troubleshoot this any further because I have been busy
moving, so take this for what it is worth.

James

On Sat, Nov 8, 2008 at 12:26 PM, Viswesh S <[EMAIL PROTECTED]> wrote:

> Hi,
>
>
>
> ----- Original Message ----
> > From: Viswesh S <[EMAIL PROTECTED]>
> > To: The development of GRUB 2 <grub-devel@gnu.org>
> > Sent: Tuesday, 14 October, 2008 5:04:53 PM
> > Subject: Re: Windows,grub and grub2
> >
> > Hi,
> >
> >
> >
> > ----- Original Message ----
> > > From: Bean
> > > To: The development of GRUB 2
> > > Sent: Monday, 29 September, 2008 4:20:57 PM
> > > Subject: Re: Windows,grub and grub2
> > >
> > > On Mon, Sep 29, 2008 at 1:18 PM, Viswesh S wrote:
> > > > Hi,
> > > >
> > > >
> > > >
> > > > ----- Original Message ----
> > > >> From: Bean
> > > >> To: The development of GRUB 2
> > > >> Sent: Tuesday, 23 September, 2008 7:20:49 PM
> > > >> Subject: Re: Windows,grub and grub2
> > > >>
> > > >> On Tue, Sep 23, 2008 at 4:23 PM, Viswesh S wrote:
> > > >> >
> > > >> >
> > > >> >
> > > >> >
> > > >> > ----- Original Message ----
> > > >> >> From: Bean
> > > >> >> To: The development of GRUB 2
> > > >> >> Sent: Monday, 22 September, 2008 9:10:26 AM
> > > >> >> Subject: Re: Windows,grub and grub2
> > > >> >>
> > > >> >> On Tue, Sep 9, 2008 at 2:00 PM, Viswesh S wrote:
> > > >> >> > Below is the dump of screen output while chainloading the
> ntfsnew
> > file.
> > > >> >> > ***************************************
> > > >> >> > DI=CFF0 SI=07EE BP=1FF0 SP=1FE8 BX=0000 DX=0000 CX=0000 AX=0000
> > > >> >> > CS=0000 SS=0000 DS=0000 ES=0000 FG=0246 IP=7C57
> > > >> >> >
> > > >> >> > DI=7FF0 SI=07EE BP=1FF0 SP=7BF4 BX=55AA DX=0000 CX=0000 AX=0100
> > CX=07C0
> > > >> >> > DS=07C0 ES=0000 FG=0007 IP=0082
> > > >> >> > ******************************************
> > > >> >> > Could you please let me know the way to disassemble the binary
> file
> > > without
> > > >> >> > any header.The way in which you decoded the boot record.
> > > >> >> >
> > > >> >> > Also one more thing to let you know is that,
> > > >> >> >
> > > >> >> > with the grub-1.96 ( without the chainloader patch of
> > disk->dev->read()
> > > ) ,
> > > >> >> > with windows2003 in partition 1 and linux in partition 3, when
> we
> > > >> chainload,
> > > >> >> > if we look at the partition table passed to another bootloader
> ie
> > > location
> > > >> >> > 0x7be - we can see that it is junk, but the surprising point is
> that,
> > in
> > > >> >> > this case as I have mentioned in my first mail, windows boots
> up from
> > > >> >> > grub2.So it is that the partition table is not required for the
> > > chainloader
> > > >> >> > thing and just the boot record is sufficient
> > > >> >>
> > > >> >> Hi,
> > > >> >>
> > > >> >> Oh, sorry for another long delay. I disassemble the file with
> ida,
> > > >> >> which is an amazing tool. I don't know if there is open source
> > > >> >> alternative, please let me know if you find one.
> > > >> >>
> > > >> >> The output from ida is in masm format, I modify it a bit so that
> it
> > > >> >> can be compiled using nasm. Please note that nasm doesn't
> generate the
> > > >> >> same binary file as original one, but you can get an idea what it
> > > >> >> does.
> > > >> >>
> > > >> >> From the output, the program fails at the second int 13 call, int
> > > >> >> 13/ah = 48h. Although I notice that DL=0, which is not supposed
> to
> > > >> >> happen. Perhaps you can add a grub_printf in
> grub_chainloader_boot to
> > > >> >> show the value of boot drive:
> > > >> >>
> > > >> >> static grub_err_t
> > > >> >> grub_chainloader_boot (void)
> > > >> >> {
> > > >> >>  grub_printf ("boot_drive=%d\n", boot_drive);
> > > >> >>  grub_chainloader_real_boot (boot_drive, boot_part_addr);
> > > >> >>
> > > >> >>  /* Never reach here.  */
> > > >> >>  return GRUB_ERR_NONE;
> > > >> >> }
> > > >> >>
> > > >> >> --
> > > >> >> Bean
> > > >> >>
> > > >> >>
> > > >> >
> > > >> > Hi,
> > > >> >
> > > >> > The value of boot drive is 0x80.
> > > >> >
> > > >> > This was the same value in disk->drive also.
> > > >>
> > > >> Hi,
> > > >>
> > > >> Interesting, perhaps %dx is changed somewhere. Please try the
> > > >> following patch, it dumps the value of %dx just before jumping to
> the
> > > >> boot sector.
> > > >>
> > > >> --
> > > >> Bean
> > > >
> > > > The patch works and now Windows is booting perfectly fine from Grub2.
> > > >
> > > > I will go through the assembly and try to understand what
> modifications you
> > > have done.So there is a problem in Grub2 code, which needs to be fixed
> ?
> > > >
> > > > Till this point, I was chainloading grub from Grub2 and then
> chainloading
> > > Windows2008 from it.
> > > >
> > > > Thanks for the consistent help till this point and for the future
> also.
> > >
> > > Hi,
> > >
> > > That's strange, the patch doesn't do anything except output the value
> of dx:
> > >
> > >    /* set up to pass boot drive */
> > >    popl    %edx
> > > +    movl    %edx, %edi
> > >
> > >    /* ESI must point to a partition table entry */
> > >    popl    %esi
> > >
> > >    call    prot_to_real
> > >    .code16
> > > +
> > > +    push    %dx
> > > +    call    hex_out
> > > +    push    %di
> > > +    call    hex_out
> > > +
> > >    ljmp    $0, $GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR
> > > +
> > > +hex_out:
> > > +    pushw    %bp
> > > +    movw    %sp, %bp
> > > +    pushaw
> > > +    movb    $0xE, %ah
> > > +    movw    $7, %bx
> > > +    movw    $4, %cx
> > > +    movw    4(%bp), %dx
> > > +1:
> > > +    rol    $4, %dx
> > > +    movb    %dl, %al
> > > +    andb    $0xF, %al
> > > +    cmpb    $10, %al
> > > +    jb    2f
> > > +    subb    $('0'-'A'+10), %al
> > > +2:
> > > +    addb    $'0', %al
> > > +    int    $0x10
> > > +    loop    1b
> > > +    movb    $' ', %al
> > > +    int    $0x10
> > > +    popaw
> > > +    popw    %bp
> > > +    ret    $2
> > >    .code32
> > >
> > > #include "../loader.S"
> > >
> > > Perhaps you can try:
> > >
> > > 1, %edi is used as backup register in case %edx is changed by
> > > prot_to_real, you can remove "movl %edx, %edi", "push %di", "call
> > > hex_out" and see if it still works.
> > >
> > > 2, It's possible that the bug is position related, replace "push %dx",
> > > "call hex_out" with equal number of nop and see what happens.
> > >
> > > --
> > > Bean
> > >
> >
> > We can remove the patch completely, without putting nop also, but just
> comment
> > out the following code
> >
> > /*
> >     xorl    %eax, %eax
> >     call    EXT_C(grub_gate_a20)
> > */
> >
> > This is the only difference and when I comment out this, Windows boots up
> from
> > Grub2.
> >
> > Regards,
> > Viswesh
> >
> >
>
> So is this a bug in grub2 ?
>
> Can you people confirm this ?
>
> Viswesh
>
>
>
>      Add more friends to your messenger and enjoy! Go to
> http://messenger.yahoo.com/invite/
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to