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: Christian Franke
Subject: Re: [PATCH] Create floppy emulation boot CD with grub-mkimage
Date: Sat, 09 Feb 2008 17:53:12 +0100
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071128 SeaMonkey/1.1.7

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





reply via email to

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