On Feb 10, 2008 12:53 AM, Christian Franke <[EMAIL PROTECTED]> 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 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel