Date: Wed, 17 Mar 1999 18:55:44 +0200 (SAT) From: Robert Nordier <rnordier@nordier.com> To: sos@freebsd.dk (Søren Schmidt) Cc: current@FreeBSD.ORG Subject: Re: How to add a new bootdevice to the new boot code ??? Message-ID: <199903171655.SAA00910@ceia.nordier.com> In-Reply-To: <199903171338.OAA26021@freebsd.dk> from =?ISO-8859-1?Q?S=F8ren_Schmidt?= at "Mar 17, 99 02:38:17 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
> > Incidentally, while I'm in there and thinking about it, I'd quite
> > like to fix the boot code to boot from LS-120 drives at the same
> > time. So if anyone has one of these, and wouldn't mind spending
> > some time running a few bits of test code, I'd appreciate it.
>
> I have a ZIP if that can help you ??
Thanks. AFAIK, the essential difference is that the LS-120 needs
to be treated (in the boot code) like a floppy, whereas the ZIP
should be treated like a hard disk. But we need to accommodate
both, so I'd be glad if you'd test the changes, once I've done
them.
> > #ifdef FORCE_FOO
> > if (foo == 0)
> > foo = 30;
> > #endif
>
> Well, that breaks somewhere else, as the mount code is clever enough
> to look at the name of the driver in this case "ad" which doesn't
> match the specified #0 ie "wd".
> I kindof tried this by having my driver put itself in both the
> wd & ad majors in the table, but that doesn't work, because the mount
> stuff gets confused on the root name somehow, and fails to mount
> root because the names dont match...
The arguments passed from the boot code to the kernel are
howto, bootdev, res1, res2, res3, bootinfop
where
"howto" is an int containing RB_* bitflags (sys/reboot.h) which
represent the boot options like -c, -v, etc.
"bootdev" is an int put together using the MAKEBOOTDEV macro
(sys/reboot.h) from the major#, unit#, slice#, and partition#
of the boot device.
"res1" through "res3" are reserved/ignored.
"bootinfop" is a pointer to a bootinfo structure
(machine/bootinfo.h) which contains an assortments of parameters,
but none relating directly to the boot device driver (bi_bios_dev
is for /boot/loader's benefit).
So the *only* relevant info passed by the boot code is the major#.
And if we force a change in the major# (for the sake of discussion,
in the section of src/sys/i386/i386/locore.s that already has
compatibility code for dealing with legacy bootblocks -- though
I'm not saying that is the best place for it), we've done all we
*can* do in the boot code, within the framework as it exists.
So whether we add {"da", 30} to a lookup table in boot2, or use the
FORCE_FOO approach, the results will be identical.
> At any rate, any solution that makes it possible to boot with
> a new driver without me having to call it "wd" something all
> over the place is acceptable to me...
Anyway, I take a look at both approaches, probably later today,
and send you some diffs, hopefully relating to each way of doing
things.
--
Robert Nordier
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?199903171655.SAA00910>
