grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] Create floppy emulation boot CD with grub-mkimage


From: Bean
Subject: Re: [PATCH] Create floppy emulation boot CD with grub-mkimage
Date: Sun, 10 Feb 2008 01:15:27 +0800

On Feb 10, 2008 12:53 AM, Christian Franke <address@hidden> wrote:
> Bean wrote:
> >> ...
> >>
> >>> Now the CD boots, but the result is interesting:
> >>>
> >>> Real PC: escape to rescue mode, root=hd31, no (cd0) device, no modules.
> >>>
> >>> VMWare: same.
> >>>
> >>> VirtualPC: escape to rescue mode, root=cd15, (cd0) exists, normal mode
> >>> can be started manually.
> >>>
> >>> VirtualBox: Works as expected.
> >>>
> >
> > For VirtualPC, try the following patch:
> >
> > diff --git a/kern/i386/pc/init.c b/kern/i386/pc/init.c
> > index 7237492..5eb5484 100644
> > --- a/kern/i386/pc/init.c
> > +++ b/kern/i386/pc/init.c
> > @@ -77,9 +77,9 @@ make_install_device (void)
> >        if (grub_root_drive == 0xFF)
> >          grub_root_drive = grub_boot_drive;
> >
> > -      if (grub_root_drive >= GRUB_BIOSDISK_MACHINE_CDROM_START)
> > -        grub_sprintf (dev, "(cd%u",
> > -                   grub_root_drive - GRUB_BIOSDISK_MACHINE_CDROM_START);
> > +      if ((grub_root_drive >= GRUB_BIOSDISK_MACHINE_CDROM_START) &&
> > +          (grub_root_drive < GRUB_BIOSDISK_MACHINE_CDROM_END))
> > +     grub_strcpy (dev, "(cd0)");
> >        else
> >          grub_sprintf (dev, "(%cd%u",
> >                     (grub_root_drive & 0x80) ? 'h' : 'f',
> >
> >
>
> Thanks. This works, after changing "(cd0)" to "(cd0" :-)
>
>
> > For Real PC, you should be able to fix it by setting
> > GRUB_BIOSDISK_MACHINE_CDROM_START to 0x9F in
> > /include/grub/i386/pc/biosdisk.h, but i don't recommend using it as
> > default value.
> >
> >
>
> With this change, the rescue CD works also on the real PC (Asus MB with
> Phoenix Award BIOS) and VMware.
>
> I have added this to get diagnostic output of boot/root_drive:
>
> --- grub2.orig/kern/i386/pc/init.c    2008-02-03 20:29:53.125000000 +0100
> +++ grub2/kern/i386/pc/init.c    2008-02-09 17:01:17.093750000 +0100
> @@ -247,6 +247,12 @@
>  void
>  grub_machine_set_prefix (void)
>  {
> +  char val[20];
> +  grub_sprintf (val, "0x%02x", grub_boot_drive);
> +  grub_env_set ("drive_boot", val);
> +  grub_sprintf (val, "0x%02x", grub_root_drive);
> +  grub_env_set ("drive_root", val);
> +
>    /* Initialize the prefix.  */
>    grub_env_set ("prefix", make_install_device ());
>  }
>
>
> Results:
>
> PC: grub_boot_drive=0x9f, but INT13 Extensions reported for 0x9f
>
> VMware: grub_boot_drive=0x9f
>
> VirtualPC: grub_boot_drive=0xef
>
> VirtualBox: grub_boot_drive=0xe0
>
> GRUB_MOD_INIT(biosdisk) detects INT13 Extensions for 0x9f on the real
> PC, therefore "(cd0)" does not appear in "ls" output.
> Nevertheless, access to (cd0) and everthing else works as expected due
> to the default setting of
> biosdisk.c::cd_start = 0x9f.
>
> But this won't work with any other setting of
> GRUB_BIOSDISK_MACHINE_CDROM_START.
>
>
> Conclusions:
> - I like standards, because there are so many to choose from :-)
> - We probably should discuss boot CD drive detection in a new thread.
> - A floppy emulation rescue CD as a last resort makes sense ;-)
>
> Christian

I don't know which drive to start scanning for cdrom. 0x9F means at
most 31 hard drives, i think it's fine for the most time.

-- 
Bean




reply via email to

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