Allow specifying the BIOS drive number. Removed the hd drive type.
hd essentially wired the FreeBSD drive number to 0 without changing the BIOS drive number. Now the numbers can be specified independently. Replaced the BOOT_HD compile time flag with with BOOT_HD_BIAS. Defining the new flag as 1 should give the same behaviour as defining the old flag as anything. I haven't tested defining these flags.
This commit is contained in:
parent
242c09c05e
commit
0166c5c6b4
@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.37 1996/02/03 21:12:27 joerg Exp $
|
||||
# $Id: Makefile,v 1.38 1996/03/08 06:29:05 bde Exp $
|
||||
#
|
||||
|
||||
PROG= boot
|
||||
@ -20,10 +20,12 @@ CFLAGS+= -DBOOTSEG=${BOOTSEG} -DBOOTSTACK=${BOOTSTACK}
|
||||
# PROBE_KEYBOARD is defined).
|
||||
#CFLAGS+= -DFORCE_COMCONSOLE
|
||||
|
||||
# Assume hd(*,a) instead of wd(*,a) if the boot seems to happen from
|
||||
# a hard disk.
|
||||
# This can be useful for people booting in a mixed IDE/SCSI environment.
|
||||
#CFLAGS+= -DBOOT_HD
|
||||
# Bias the conversion from the BIOS drive number to the FreeBSD unit number
|
||||
# for hard disks to save typing. E.g., BOOT_HD_BIAS=1 makes BIOS drive 1
|
||||
# correspond to 1:sd(0,a) instead of 1:sd(1,a).
|
||||
# This may be useful for people booting in a mixed IDE/SCSI environment
|
||||
# (set BOOT_HD_BIAS to the number of IDE drives).
|
||||
#CFLAGS+= -DBOOT_HD_BIAS=1
|
||||
|
||||
CLEANFILES+= boot.nohdr boot.strip boot1 boot2 sizetest
|
||||
DPADD= ${LIBC}
|
||||
|
@ -102,16 +102,19 @@ boot some other partition, possibly on the second drive, as root.
|
||||
|
||||
|
||||
##########################################################################
|
||||
In the case you have two drives the same type (both scsi or bith IDE/ESDI),
|
||||
wd(0,a)xxx
|
||||
will boot xxx from drive 0, a partition.
|
||||
wd(1,a)xxx
|
||||
will boot xxx from drive 1, a partition.
|
||||
In the case you have several drives the same type (all scsi or all IDE/ESDI),
|
||||
wd(0,a)xxx
|
||||
will boot xxx from drive 0, a partition.
|
||||
wd(1,a)xxx
|
||||
will boot xxx from drive 1, a partition.
|
||||
|
||||
similarly for sd.
|
||||
similarly for sd and for higher drive numbers (if the BIOS supports them).
|
||||
|
||||
if you have one wd drive and one scsi drive, then you MUST
|
||||
use device 'hd'
|
||||
if you have one or more wd drives and one or more scsi drives, then you
|
||||
MUST specify the BIOS drive number for booting the scsi drives:
|
||||
2:sd(0,a)xxx
|
||||
will boot xxx from scsi drive 0, a partition, provided `2' is the correct
|
||||
BIOS drive number for sd0.
|
||||
|
||||
otherwise the following will happen:
|
||||
|
||||
@ -119,10 +122,6 @@ with wd0 and sd0, you specify sd1 or wd1 to indicate the 2nd drive.
|
||||
it boots the kernel correctly, then tells the kernel to use sd1 as root.
|
||||
you however may not have an sd1, and problems arise.
|
||||
|
||||
hd is special in that the kernel is always told to use unit 0,
|
||||
The correct TYPE of device will be specified too, so the kernel
|
||||
will be told either sd0 or wd0.
|
||||
|
||||
Whether sd or wd is specified to the kernel is read from the disklabel,
|
||||
so ensure that all SCSI disks have type SCSI in their disklabel or the
|
||||
boot code will assume they are ESDI or IDE. (Remember, because it is
|
||||
@ -149,4 +148,4 @@ Before you do this ensure you have a booting floppy with correct
|
||||
disktab and bootblock files on it so that if it doesn't work, you can
|
||||
re-disklabel from the floppy.
|
||||
|
||||
$Id: README.386BSD,v 1.2 1993/10/16 19:11:25 rgrimes Exp $
|
||||
$Id: README.386BSD,v 1.3 1995/02/16 12:02:08 jkh Exp $
|
||||
|
@ -76,9 +76,9 @@ To boot FreeBSD in serial console mode, you must do the following:
|
||||
No keyboard found.
|
||||
|
||||
>> FreeBSD BOOT @ 0x10000: 640/7168 k of memory
|
||||
Use hd(1,a)/kernel to boot sd0 when wd0 is also installed.
|
||||
Usage: [[[fd(0,a)]/kernel][-s][-r][-a][-c][-d][-b][-v][-h]]
|
||||
Use ? for file list or simply press Return for defaults
|
||||
Usage: [[[0:][fd](0,a)]/kernel][-abcCdhrsv]
|
||||
Use 1:sd(0,a)kernel to boot sd0 if it is BIOS drive 1
|
||||
Use ? for file list or press Enter for defaults
|
||||
Boot:
|
||||
|
||||
This is identical to the prompt that normally appears on the VGA console,
|
||||
@ -152,4 +152,4 @@ CAVEATS:
|
||||
from the new kernel.
|
||||
|
||||
|
||||
$Id: README.serial,v 1.2 1995/02/16 07:37:35 wpaul Exp $
|
||||
$Id: README.serial,v 1.3 1995/04/20 23:15:07 joerg Exp $
|
||||
|
@ -24,7 +24,7 @@
|
||||
* the rights to redistribute these changes.
|
||||
*
|
||||
* from: Mach, [92/04/03 16:51:14 rvb]
|
||||
* $Id: boot.c,v 1.46 1995/07/22 22:32:49 joerg Exp $
|
||||
* $Id: boot.c,v 1.47 1996/03/08 06:29:06 bde Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -100,29 +100,38 @@ boot(int drive)
|
||||
|
||||
gateA20();
|
||||
|
||||
|
||||
/***************************************************************\
|
||||
* As a default set it to the first partition of the boot *
|
||||
* floppy or hard drive *
|
||||
* Define BOOT_HT to boot sd0 when wd0 is also installed *
|
||||
\***************************************************************/
|
||||
part = 0;
|
||||
/*
|
||||
* The default boot device is the first partition in the
|
||||
* compatibility slice on the boot drive.
|
||||
*/
|
||||
dosdev = drive;
|
||||
maj = 2;
|
||||
unit = drive & 0x7f;
|
||||
#ifdef BOOT_HD
|
||||
maj = (drive&0x80 ? 1 : 2); /* a good first bet */
|
||||
#else
|
||||
maj = (drive&0x80 ? 0 : 2); /* a good first bet */
|
||||
#ifdef dontneed
|
||||
slice = 0;
|
||||
part = 0;
|
||||
#endif
|
||||
if (drive & 0x80) {
|
||||
/*
|
||||
* Hard drive. Adjust. Guess that the FreeBSD unit number
|
||||
* is the BIOS drive number biased by BOOT_HD_BIAS,
|
||||
*/
|
||||
maj = 0;
|
||||
#if BOOT_HD_BIAS > 0
|
||||
if (BOOT_HD_BIAS <= unit)
|
||||
unit -= BOOT_HD_BIAS;
|
||||
#endif
|
||||
}
|
||||
|
||||
loadstart:
|
||||
/* print this all each time.. (saves space to do so) */
|
||||
/* If we have looped, use the previous entries as defaults */
|
||||
printf("\n>> FreeBSD BOOT @ 0x%x: %d/%d k of memory\n"
|
||||
"Use hd(1,a)/kernel to boot sd0 when wd0 is also installed.\n"
|
||||
"Usage: [[%s(%d,a)]%s][-abcCdhrsv]\n"
|
||||
"Usage: [[[%d:][%s](%d,a)]%s][-abcCdhrsv]\n"
|
||||
"Use 1:sd(0,a)kernel to boot sd0 if it is BIOS drive 1\n"
|
||||
"Use ? for file list or press Enter for defaults\n\nBoot: ",
|
||||
ouraddr, bootinfo.bi_basemem, bootinfo.bi_extmem,
|
||||
devs[maj], unit, name);
|
||||
dosdev & 0x7f, devs[maj], unit, name);
|
||||
|
||||
name = dflname; /* re-initialize in case of loop */
|
||||
loadflags &= RB_SERIAL; /* clear all, but leave serial console */
|
||||
@ -166,7 +175,8 @@ loadprog(void)
|
||||
*/
|
||||
startaddr = head.a_entry & 0x00FFFFFF;
|
||||
addr = startaddr;
|
||||
printf("Booting %s(%d,%c)%s @ 0x%x\n"
|
||||
printf("Booting %d:%s(%d,%c)%s @ 0x%x\n"
|
||||
, dosdev & 0x7f
|
||||
, devs[maj]
|
||||
, unit
|
||||
, 'a'+part
|
||||
|
@ -24,7 +24,7 @@
|
||||
* the rights to redistribute these changes.
|
||||
*
|
||||
* from: Mach, Revision 2.2 92/04/04 11:36:34 rpd
|
||||
* $Id: sys.c,v 1.9 1995/05/30 07:58:34 rgrimes Exp $
|
||||
* $Id: sys.c,v 1.10 1995/06/25 14:02:55 joerg Exp $
|
||||
*/
|
||||
|
||||
#include "boot.h"
|
||||
@ -38,6 +38,8 @@
|
||||
char buf[BUFSIZE], fsbuf[SBSIZE], iobuf[MAXBSIZE];
|
||||
#endif
|
||||
|
||||
static char biosdrivedigit;
|
||||
|
||||
#define BUFSIZE 8192
|
||||
#define MAPBUFSIZE BUFSIZE
|
||||
char buf[BUFSIZE], fsbuf[BUFSIZE], iobuf[BUFSIZE];
|
||||
@ -164,7 +166,8 @@ int
|
||||
openrd(void)
|
||||
{
|
||||
char **devp, *cp = name;
|
||||
int ret;
|
||||
int biosdrive, ret;
|
||||
|
||||
/*******************************************************\
|
||||
* If bracket given look for preceding device name *
|
||||
\*******************************************************/
|
||||
@ -176,6 +179,16 @@ openrd(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Look for a BIOS drive number (a leading digit followed
|
||||
* by a colon).
|
||||
*/
|
||||
if (*(name + 1) == ':' && *name >= '0' && *name <= '9') {
|
||||
biosdrivedigit = *name;
|
||||
name += 2;
|
||||
} else
|
||||
biosdrivedigit = '\0';
|
||||
|
||||
if (cp++ != name)
|
||||
{
|
||||
for (devp = devs; *devp; devp++)
|
||||
@ -210,25 +223,33 @@ openrd(void)
|
||||
if (!*cp)
|
||||
return 1;
|
||||
}
|
||||
if (biosdrivedigit != '\0')
|
||||
biosdrive = biosdrivedigit - '0';
|
||||
else {
|
||||
biosdrive = unit;
|
||||
#if BOOT_HD_BIAS > 0
|
||||
/* XXX */
|
||||
if (maj == 4)
|
||||
biosdrive += BOOT_HD_BIAS;
|
||||
#endif
|
||||
}
|
||||
switch(maj)
|
||||
{
|
||||
case 1:
|
||||
dosdev = unit | 0x80;
|
||||
unit = 0;
|
||||
break;
|
||||
case 0:
|
||||
case 4:
|
||||
dosdev = unit | 0x80;
|
||||
dosdev = biosdrive | 0x80;
|
||||
break;
|
||||
case 2:
|
||||
dosdev = unit;
|
||||
dosdev = biosdrive;
|
||||
break;
|
||||
case 3:
|
||||
printf("Wangtek unsupported\n");
|
||||
default:
|
||||
printf("Unknown device\n");
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
printf("dosdev = %x, biosdrive = %d, unit = %d, maj = %d\n",
|
||||
dosdev, biosdrive, unit, maj);
|
||||
inode.i_dev = dosdev;
|
||||
|
||||
/***********************************************\
|
||||
* Now we know the disk unit and part, *
|
||||
* Load disk info, (open the device) *
|
||||
|
@ -24,7 +24,7 @@
|
||||
* the rights to redistribute these changes.
|
||||
*
|
||||
* from: Mach, Revision 2.2 92/04/04 11:36:43 rpd
|
||||
* $Id: table.c,v 1.8 1995/06/25 14:02:57 joerg Exp $
|
||||
* $Id: table.c,v 1.9 1996/03/08 05:15:54 bde Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -136,7 +136,7 @@ struct pseudo_desc Idtr_real = { 0x400 - 1, 0x0, 0x0 };
|
||||
* All initialized data is defined in one file to reduce space wastage from
|
||||
* fragmentation.
|
||||
*/
|
||||
char *devs[] = { "wd", "hd", "fd", "wt", "sd", 0 };
|
||||
char *devs[] = { "wd", "dk", "fd", "wt", "sd", 0 };
|
||||
char dflname[] = "/kernel";
|
||||
char *name = dflname;
|
||||
unsigned long tw_chars = 0x5C2D2F7C; /* "\-/|" */
|
||||
|
Loading…
Reference in New Issue
Block a user