[Top][All Lists]
[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
Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Robert Millan, 2008/02/08
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Christian Franke, 2008/02/08
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Christian Franke, 2008/02/09
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Robert Millan, 2008/02/09
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Pavel Roskin, 2008/02/09
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Christian Franke, 2008/02/10
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Robert Millan, 2008/02/10
- Re: [PATCH] Create floppy emulation boot CD with grub-mkimage, Christian Franke, 2008/02/15