"Daniel C. Sobral" <d...@newsguy.com> wrote: >Well, kind of. You "hard code" the name wd2 in your kernel >configuration file. [...] Ie, s/wd2/wd1/ > in your kernel configuration file (and rebuild :). It was wd0 (the generic). Making it wd2 didn't help.
Mark Blackman <t...@rcru.rl.ac.uk> wrote: >FWIW, I've done it under 2.2.7 by > >1) installing booteasy on both wd0 *AND* wd2 >2) altering the boot.config to > 1:wd(2,a)kernel This works for an a.out 3.0 kernel, but the old bootloader can't handle ELF kernels, so this isn't a usable solution. >3) compiling above kernel with > config kernel root on wd2 This made no difference. Since typing on a keyboard is easier than opening the box, I wrote the following kludge. It builds a bitmap of IDE devices as it probes them and then counts active IDE devices to work out the actual unit number. Index: i386/autoconf.c =================================================================== RCS file: /home/CVSROOT/./src/sys/i386/i386/autoconf.c,v retrieving revision 1.110 diff -u -r1.110 autoconf.c --- autoconf.c 1998/10/26 07:05:34 1.110 +++ autoconf.c 1999/01/21 23:18:18 @@ -433,6 +433,10 @@ #define FDMAJOR 2 #define FDUNITSHIFT 6 +/* KLUDGE for bios handling of multiple devices */ +#define WDMAJOR 0 +int wd_mask = 0; /* mask of WD devices found during probe */ + /* * Attempt to find the device from which we were booted. * If we can do so, and not instructed not to do so, @@ -467,6 +471,18 @@ slice = COMPATIBILITY_SLICE; part = RAW_PART; mindev = unit << FDUNITSHIFT; + } else if (majdev == WDMAJOR) { + /* + * XXX kludge to handle holes in numbering + */ + for (part = 0, mindev = unit; part < 32 && mindev >= 0; part++) + if (wd_mask & (1 << part)) + mindev--; + if (mindev == -1) + unit = part - 1; + + part = B_PARTITION(bootdev); + mindev = dkmakeminor(unit, slice, part); } else { part = B_PARTITION(bootdev); mindev = dkmakeminor(unit, slice, part); Index: isa/wd.c =================================================================== RCS file: /home/CVSROOT/./src/sys/i386/isa/wd.c,v retrieving revision 1.186 diff -u -r1.186 wd.c --- wd.c 1999/01/17 05:46:24 1.186 +++ wd.c 1999/01/21 23:18:18 @@ -223,6 +223,8 @@ static struct buf rwdbuf[NWD]; /* buffers for raw IO */ #endif +extern int wd_mask; /* This is a KLUDGE */ + static int wdprobe(struct isa_device *dvp); static int wdattach(struct isa_device *dvp); static void wdustart(struct disk *du); @@ -551,6 +553,8 @@ DEVSTAT_NO_ORDERED_TAGS, DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_IDE); + /* KLUDGE: mark drive as present */ + wd_mask |= 1 << lunit; } else { free(du, M_TEMP); wddrives[lunit] = NULL; ------------- This successfully allows me to boot from wd2. I agree that it doesn't address the general problem (in particular, it can't handle the case where the BIOS doesn't see a device that the kernel probe does see, and doesn't support SCSI). Peter -- Peter Jeremy (VK2PJ) peter.jer...@alcatel.com.au Alcatel Australia Limited 41 Mandible St Phone: +61 2 9690 5019 ALEXANDRIA NSW 2015 Fax: +61 2 9690 5982 To Unsubscribe: send mail to majord...@freebsd.org with "unsubscribe freebsd-current" in the body of the message