Date: Fri, 8 Mar 2002 02:00:09 -0800 From: Luigi Rizzo <rizzo@icir.org> To: arch@FreeBSD.ORG Subject: Proposed patch: kern.bootdev* sysctl variables Message-ID: <20020308020009.A6535@iguana.icir.org>
next in thread | raw e-mail | index | archive | help
Any objection to the following patch to i386/i386/autoconf.c to let userland apps know [an approximation of] the name of the device the kernel was booted from ? The main use would be for startup scripts, such as /etc/rc, which could this way differentiate their behaviour based on the returned result. (I know it can be perfected by not assuming that any hard disk is /dev/ad, but you get the idea...) cheers luigi Index: autoconf.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/autoconf.c,v retrieving revision 1.146.2.2 diff -u -r1.146.2.2 autoconf.c --- autoconf.c 7 Jun 2001 06:05:58 -0000 1.146.2.2 +++ autoconf.c 8 Mar 2002 09:32:36 -0000 @@ -66,6 +66,7 @@ #include <sys/malloc.h> #include <sys/mount.h> #include <sys/cons.h> +#include <sys/sysctl.h> #include <machine/bootinfo.h> #include <machine/ipl.h> @@ -105,6 +106,11 @@ device_t nexus_dev; +SYSCTL_ULONG(_kern, OID_AUTO, bootdev, CTLFLAG_RD, &bootdev, 0, ""); +static char bootdevname[MAXPATHLEN]; +SYSCTL_STRING(_kern, OID_AUTO, bootdevname, CTLFLAG_RD, + bootdevname, 0, "Boot device name"); + /* * Determine i/o configuration for a machine. */ @@ -300,9 +306,13 @@ slice = COMPATIBILITY_SLICE; part = RAW_PART; mindev = unit << FDUNITSHIFT; + sprintf(bootdevname, "/dev/fd%d", unit); } else { part = B_PARTITION(bootdev); mindev = dkmakeminor(unit, slice, part); + sprintf(bootdevname, + (slice < BASE_SLICE ? "/dev/ad%d" : "/dev/ad%ds%d"), + unit, slice - BASE_SLICE + 1); } newrootdev = makebdev(majdev, mindev); On Mon, Feb 25, 2002 at 02:30:13PM -0800, Luigi Rizzo wrote: > [bcc-ed to some recent committers to boot2.c] > Hi, > for some stuff I am doing with picobsd (and i think in general this > is useful) it would be nice to know where the kernel was loaded > from. In /sys/boot/i386/boot2/boot2.c this information is stored > in three 8-bit variables: > > dsk.drive also goes into bootinfo.bi_bios_dev > dsk.slice > dsk.part > > Although the latter two are not made available to the kernel, > there are two empty 8-bit fields in struct bootinfo > > u_int8_t bi_pad[2]; > > which could do the job without breaking binary compatibility. > > Any objection on exporting dsk.slice and dsk.part into the bi_pad > fields, possibly starting from 1 so the kernel can tell an uninitialized > value from a good one ? > > (and together with this, perhaps a sysctl variable which builds a > device name from these three values...) > > cheers > luigi > ----------------------------------+----------------------------------------- > Luigi RIZZO, luigi@iet.unipi.it . ICSI (on leave from Univ. di Pisa) > http://www.iet.unipi.it/~luigi/ . 1947 Center St, Berkeley CA 94704 > Phone: (510) 666 2927 > ----------------------------------+----------------------------------------- > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-hackers" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020308020009.A6535>