Date: Fri, 13 Aug 1999 22:02:58 -0700 From: Mike Smith <mike@smith.net.au> To: Tom Bartol <bartol@salk.edu> Cc: Mike Smith <mike@smith.net.au>, "David E. Cross" <crossd@cs.rpi.edu>, current@FreeBSD.ORG Subject: Re: yet more TP 600E fun... Message-ID: <199908140502.WAA00524@dingo.cdrom.com> In-Reply-To: Your message of "Fri, 13 Aug 1999 21:25:45 PDT." <Pine.BSF.4.10.9908132120530.51300-100000@eccles.salk.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
> > I'd be more than happy to do the pestering if some one could write down > a detailed description of exactly how the TP's BIOS is non-compliant. > I don't know enough about the boot process and BIOS to write such a > description. It's expected that the BIOS numbers disk units sequentially; floppies from 0 upwards, fixed-disk devices from 0x80 upwards. The loader searches upwards from 0 and from 0x80 until it fails to find a unit and stops there. It doesn't search all of the unit numbers because many BIOS implementations seem to wrap, eg. you may find that unit 0x90 is the same as unit 0x80. You can't be sure about where the wrap point will be, either. Normally, when you're booting an El Torito image, the virtual floppy is substituted for drive 0 (ie. you can't get at the real first floppy drive). I can see why IBM would move it elsewhere, but 0x8b is just about the most stupid place they could have put it. This is the code (in /sys/boot/i386/libi386/biosdisk.c) that probes for BIOS disk units. You try replacing the 'break' with 'continue' and see if it finds a device at 0x8b. If it does, let me know and I'll send you some more complete patches that will always probe the claimed boot device. static int bd_init(void) { int base, unit; /* sequence 0, 0x80 */ for (base = 0; base <= 0x80; base += 0x80) { for (unit = base; (nbdinfo < MAXBDDEV); unit++) { bdinfo[nbdinfo].bd_unit = unit; bdinfo[nbdinfo].bd_flags = (unit < 0x80) ? BD_FLOPPY : 0; /* XXX add EDD probes */ if (!bd_int13probe(&bdinfo[nbdinfo])) break; /* XXX we need "disk aliases" to make this simpler */ printf("BIOS drive %c: is disk%d\n", (unit < 0x80) ? ('A' + unit) : ('C' + unit - 0x80), nbdinfo); nbdinfo++; } } return(0); } > Tom > > > On Fri, 13 Aug 1999, Mike Smith wrote: > > > > I attempt to boot a CD off of the TP600E and I get the following errors: > > > > > > "Can't work out which disk we are booting from." > > > "Guessed BIOS device 0x8b not found by probes, defaulting to disk0:" > > > > > > Then whenever it attmpts to access "disk0:" it goes to the floppy drive. > > > > > > Suggestions? > > > > Known weirdness in the TP's BIOS not handled properly by the > > bootloader. I don't have immediate plans to do anything about this; > > you could try hacking the loader to accept the 0x8b value and see if > > that actually works. Or you could pester IBM to DTRT. > > > > -- > > \\ The mind's the standard \\ Mike Smith > > \\ of the man. \\ msmith@freebsd.org > > \\ -- Joseph Merrick \\ msmith@cdrom.com > > > > > > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > > with "unsubscribe freebsd-current" in the body of the message > > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-current" in the body of the message > -- \\ The mind's the standard \\ Mike Smith \\ of the man. \\ msmith@freebsd.org \\ -- Joseph Merrick \\ msmith@cdrom.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199908140502.WAA00524>