diff options
author | phk <phk@FreeBSD.org> | 1999-05-09 16:46:01 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-05-09 16:46:01 +0000 |
commit | f3f6ab89ed81b363fb8387e4778da3045cc18620 (patch) | |
tree | 3acaf000dbabc5da2f399e4d46c960afa24cdf42 /sys | |
parent | f4e8021f396c6b41a9d333b1739317e0a69ab9fc (diff) | |
download | FreeBSD-src-f3f6ab89ed81b363fb8387e4778da3045cc18620.zip FreeBSD-src-f3f6ab89ed81b363fb8387e4778da3045cc18620.tar.gz |
Major lobotomy of config(8). The
config kernel mumble mumble
line has been obsoleted and removed and with it went all knowledge of
devices on the part of config.
You can still configure a root device (which is used if you give
the "-r" flag) but now with an option:
options ROOTDEVNAME=\"da0s2e\"
The string is parsed by the same code as at the "boot -a" prompt.
At the same time, make the "boot -a" prompt both more able and more
informative.
ALPHA/PC98 people: You will have to adapt a few simple changes
(defining rootdev and dumpdev somewhere else) before config works
for you again, sorry, but it's all in the name of progress.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/amd64/autoconf.c | 128 | ||||
-rw-r--r-- | sys/amd64/conf/GENERIC | 4 | ||||
-rw-r--r-- | sys/conf/Makefile.i386 | 4 | ||||
-rw-r--r-- | sys/conf/Makefile.powerpc | 4 | ||||
-rw-r--r-- | sys/conf/NOTES | 14 | ||||
-rw-r--r-- | sys/conf/files.i386 | 3 | ||||
-rw-r--r-- | sys/conf/options | 4 | ||||
-rw-r--r-- | sys/i386/conf/GENERIC | 4 | ||||
-rw-r--r-- | sys/i386/conf/LINT | 14 | ||||
-rw-r--r-- | sys/i386/conf/Makefile.i386 | 4 | ||||
-rw-r--r-- | sys/i386/conf/NOTES | 14 | ||||
-rw-r--r-- | sys/i386/conf/files.i386 | 3 | ||||
-rw-r--r-- | sys/i386/i386/autoconf.c | 128 |
13 files changed, 277 insertions, 51 deletions
diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c index 3dd4e66..236d1c3 100644 --- a/sys/amd64/amd64/autoconf.c +++ b/sys/amd64/amd64/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.117 1999/05/08 06:39:18 phk Exp $ + * $Id: autoconf.c,v 1.118 1999/05/09 07:56:36 phk Exp $ */ /* @@ -51,6 +51,7 @@ #include "opt_mfs.h" #include "opt_nfsroot.h" #include "opt_bus.h" +#include "opt_rootdevname.h" #include <sys/param.h> #include <sys/systm.h> @@ -103,6 +104,8 @@ static void configure_finish __P((void)); static void configure_start __P((void)); static int setdumpdev __P((dev_t dev)); static void setroot __P((void)); +static int setrootbyname __P((char *name)); +static void gets __P((char *)); SYSINIT(configure1, SI_SUB_CONFIGURE, SI_ORDER_FIRST, configure_first, NULL); /* SI_ORDER_SECOND is hookable */ @@ -110,6 +113,8 @@ SYSINIT(configure2, SI_SUB_CONFIGURE, SI_ORDER_THIRD, configure, NULL); /* SI_ORDER_MIDDLE is hookable */ SYSINIT(configure3, SI_SUB_CONFIGURE, SI_ORDER_ANY, configure_final, NULL); +dev_t rootdev = NODEV; +dev_t dumpdev = NODEV; #if defined(CD9660) || defined(CD9660_ROOT) @@ -431,7 +436,11 @@ setroot() char partname[2]; char *sname; - if (boothowto & RB_DFLTROOT || (bootdev & B_MAGICMASK) != B_DEVMAGIC) + if (boothowto & RB_DFLTROOT) { + setrootbyname(ROOTDEVNAME); + return; + } + if ((bootdev & B_MAGICMASK) != B_DEVMAGIC) return; majdev = B_TYPE(bootdev); dev = makedev(majdev, 0); @@ -497,3 +506,118 @@ sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); + + + +static int +setrootbyname(char *name) +{ + char *cp; + int bd, unit, slice, part; + dev_t dev; + + slice = 0; + part = 0; + cp = name; + while (cp != '\0' && (*cp < '0' || *cp > '9')) + cp++; + if (cp == name) { + printf("missing device name\n"); + return(1); + } + if (*cp == '\0') { + printf("missing unit number\n"); + return(1); + } + unit = *cp - '0'; + *cp++ = '\0'; + for (bd = 0; bd < nblkdev; bd++) { + dev = makedev(bd, 0); + if (bdevsw(dev) != NULL && + strcmp(bdevsw(dev)->d_name, name) == 0) + goto gotit; + } + return (2); +gotit: + while (*cp >= '0' && *cp <= '9') + unit += 10 * unit + *cp++ - '0'; + if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') { + slice = cp[1] - '0'; + cp += 2; + } + if (*cp >= 'a' && *cp <= 'h') { + part = *cp - 'a'; + cp++; + } + if (*cp != '\0') { + printf("junk after name\n"); + return (1); + } + printf("driver=%s, unit=%d, slice=%d, part=%d\n", + name, unit, slice, part); + rootdev = makedev(bd, dkmakeminor(unit, slice, part)); + return 0; +} + +void +setconf() +{ + char name[128]; + int i; + dev_t dev; + + for(;;) { + printf("root device? "); + gets(name); + i = setrootbyname(name); + if (!i) + return; + + printf("use one of:\n"); + for (i = 0; i < nblkdev; i++) { + dev = makedev(i, 0); + if (bdevsw(dev) != NULL) + printf(" %s", bdevsw(dev)->d_name); + } + printf(" followed by a unit number...\n"); + } +} + +static void +gets(cp) + char *cp; +{ + register char *lp; + register int c; + + lp = cp; + for (;;) { + printf("%c", c = cngetc() & 0177); + switch (c) { + case -1: + case '\n': + case '\r': + *lp++ = '\0'; + return; + case '\b': + case '\177': + if (lp > cp) { + printf(" \b"); + lp--; + } + continue; + case '#': + lp--; + if (lp < cp) + lp = cp; + continue; + case '@': + case 'u' & 037: + lp = cp; + printf("%c", '\n'); + continue; + default: + *lp++ = c; + } + } +} diff --git a/sys/amd64/conf/GENERIC b/sys/amd64/conf/GENERIC index 53d43ee..28eec1c 100644 --- a/sys/amd64/conf/GENERIC +++ b/sys/amd64/conf/GENERIC @@ -11,7 +11,7 @@ # device lines is present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # -# $Id: GENERIC,v 1.167 1999/05/02 21:54:02 n_hibma Exp $ +# $Id: GENERIC,v 1.168 1999/05/04 00:15:15 msmith Exp $ machine i386 cpu I386_CPU @@ -42,8 +42,6 @@ options FAILSAFE #Be conservative options USERCONFIG #boot -c editor options VISUAL_USERCONFIG #visual boot -c editor -config kernel root on wd0 - # To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O diff --git a/sys/conf/Makefile.i386 b/sys/conf/Makefile.i386 index d091926..a598149 100644 --- a/sys/conf/Makefile.i386 +++ b/sys/conf/Makefile.i386 @@ -1,7 +1,7 @@ # Makefile.i386 -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.i386 7.1 5/10/91 -# $Id: Makefile.i386,v 1.148 1999/04/24 21:38:50 peter Exp $ +# $Id: Makefile.i386,v 1.149 1999/05/08 20:04:39 peter Exp $ # # Makefile for FreeBSD # @@ -17,7 +17,7 @@ # # Which version of config(8) is required. -%VERSREQ= 400014 +%VERSREQ= 400015 KERNFORMAT?= elf diff --git a/sys/conf/Makefile.powerpc b/sys/conf/Makefile.powerpc index d091926..a598149 100644 --- a/sys/conf/Makefile.powerpc +++ b/sys/conf/Makefile.powerpc @@ -1,7 +1,7 @@ # Makefile.i386 -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.i386 7.1 5/10/91 -# $Id: Makefile.i386,v 1.148 1999/04/24 21:38:50 peter Exp $ +# $Id: Makefile.i386,v 1.149 1999/05/08 20:04:39 peter Exp $ # # Makefile for FreeBSD # @@ -17,7 +17,7 @@ # # Which version of config(8) is required. -%VERSREQ= 400014 +%VERSREQ= 400015 KERNFORMAT?= elf diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 580260f..77e3fb1 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.593 1999/05/05 12:22:31 jb Exp $ +# $Id: LINT,v 1.594 1999/05/06 18:08:23 peter Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -67,15 +67,6 @@ options PQ_LARGECACHE # color for 512k/16k cache # options INCLUDE_CONFIG_FILE # Include this file in kernel -# -# This directive defines a number of things: -# - The compiled kernel is to be called `kernel' -# - The root filesystem might be on partition wd0a -# - Crash dumps will be written to wd0b, if possible. Specifying the -# dump device here is not recommended. Use dumpon(8). -# -config kernel root on wd0 dumps on wd0 - ##################################################################### # SMP OPTIONS: @@ -351,6 +342,9 @@ options UCONSOLE options USERCONFIG #boot -c editor options INTRO_USERCONFIG #imply -c and show intro screen options VISUAL_USERCONFIG #visual boot -c editor + +# XXX - neither does this +options ROOTDEVNAME=\"da0s2e\" ##################################################################### # NETWORKING OPTIONS diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index fcaffa4..5261411 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $Id: files.i386,v 1.237 1999/05/05 07:36:55 wpaul Exp $ +# $Id: files.i386,v 1.238 1999/05/08 15:46:46 peter Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -97,7 +97,6 @@ i386/i386/pmap.c standard i386/i386/procfs_machdep.c standard i386/i386/simplelock.s optional smp i386/i386/support.s standard -i386/i386/swapgeneric.c standard i386/i386/swtch.s standard i386/i386/sys_machdep.c standard i386/i386/trap.c standard diff --git a/sys/conf/options b/sys/conf/options index 802380e..59fead8 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -1,4 +1,4 @@ -# $Id: options,v 1.135 1999/05/05 11:24:15 jb Exp $ +# $Id: options,v 1.136 1999/05/09 13:10:41 peter Exp $ # # On the handling of kernel options # @@ -363,3 +363,5 @@ VINUMDEBUG opt_vinum.h # Embedded system options INIT_PATH opt_init_path.h + +ROOTDEVNAME opt_rootdevname.h diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC index 53d43ee..28eec1c 100644 --- a/sys/i386/conf/GENERIC +++ b/sys/i386/conf/GENERIC @@ -11,7 +11,7 @@ # device lines is present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # -# $Id: GENERIC,v 1.167 1999/05/02 21:54:02 n_hibma Exp $ +# $Id: GENERIC,v 1.168 1999/05/04 00:15:15 msmith Exp $ machine i386 cpu I386_CPU @@ -42,8 +42,6 @@ options FAILSAFE #Be conservative options USERCONFIG #boot -c editor options VISUAL_USERCONFIG #visual boot -c editor -config kernel root on wd0 - # To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O diff --git a/sys/i386/conf/LINT b/sys/i386/conf/LINT index 580260f..77e3fb1 100644 --- a/sys/i386/conf/LINT +++ b/sys/i386/conf/LINT @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.593 1999/05/05 12:22:31 jb Exp $ +# $Id: LINT,v 1.594 1999/05/06 18:08:23 peter Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -67,15 +67,6 @@ options PQ_LARGECACHE # color for 512k/16k cache # options INCLUDE_CONFIG_FILE # Include this file in kernel -# -# This directive defines a number of things: -# - The compiled kernel is to be called `kernel' -# - The root filesystem might be on partition wd0a -# - Crash dumps will be written to wd0b, if possible. Specifying the -# dump device here is not recommended. Use dumpon(8). -# -config kernel root on wd0 dumps on wd0 - ##################################################################### # SMP OPTIONS: @@ -351,6 +342,9 @@ options UCONSOLE options USERCONFIG #boot -c editor options INTRO_USERCONFIG #imply -c and show intro screen options VISUAL_USERCONFIG #visual boot -c editor + +# XXX - neither does this +options ROOTDEVNAME=\"da0s2e\" ##################################################################### # NETWORKING OPTIONS diff --git a/sys/i386/conf/Makefile.i386 b/sys/i386/conf/Makefile.i386 index d091926..a598149 100644 --- a/sys/i386/conf/Makefile.i386 +++ b/sys/i386/conf/Makefile.i386 @@ -1,7 +1,7 @@ # Makefile.i386 -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.i386 7.1 5/10/91 -# $Id: Makefile.i386,v 1.148 1999/04/24 21:38:50 peter Exp $ +# $Id: Makefile.i386,v 1.149 1999/05/08 20:04:39 peter Exp $ # # Makefile for FreeBSD # @@ -17,7 +17,7 @@ # # Which version of config(8) is required. -%VERSREQ= 400014 +%VERSREQ= 400015 KERNFORMAT?= elf diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES index 580260f..77e3fb1 100644 --- a/sys/i386/conf/NOTES +++ b/sys/i386/conf/NOTES @@ -2,7 +2,7 @@ # LINT -- config file for checking all the sources, tries to pull in # as much of the source tree as it can. # -# $Id: LINT,v 1.593 1999/05/05 12:22:31 jb Exp $ +# $Id: LINT,v 1.594 1999/05/06 18:08:23 peter Exp $ # # NB: You probably don't want to try running a kernel built from this # file. Instead, you should start from GENERIC, and add options from @@ -67,15 +67,6 @@ options PQ_LARGECACHE # color for 512k/16k cache # options INCLUDE_CONFIG_FILE # Include this file in kernel -# -# This directive defines a number of things: -# - The compiled kernel is to be called `kernel' -# - The root filesystem might be on partition wd0a -# - Crash dumps will be written to wd0b, if possible. Specifying the -# dump device here is not recommended. Use dumpon(8). -# -config kernel root on wd0 dumps on wd0 - ##################################################################### # SMP OPTIONS: @@ -351,6 +342,9 @@ options UCONSOLE options USERCONFIG #boot -c editor options INTRO_USERCONFIG #imply -c and show intro screen options VISUAL_USERCONFIG #visual boot -c editor + +# XXX - neither does this +options ROOTDEVNAME=\"da0s2e\" ##################################################################### # NETWORKING OPTIONS diff --git a/sys/i386/conf/files.i386 b/sys/i386/conf/files.i386 index fcaffa4..5261411 100644 --- a/sys/i386/conf/files.i386 +++ b/sys/i386/conf/files.i386 @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $Id: files.i386,v 1.237 1999/05/05 07:36:55 wpaul Exp $ +# $Id: files.i386,v 1.238 1999/05/08 15:46:46 peter Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -97,7 +97,6 @@ i386/i386/pmap.c standard i386/i386/procfs_machdep.c standard i386/i386/simplelock.s optional smp i386/i386/support.s standard -i386/i386/swapgeneric.c standard i386/i386/swtch.s standard i386/i386/sys_machdep.c standard i386/i386/trap.c standard diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c index 3dd4e66..236d1c3 100644 --- a/sys/i386/i386/autoconf.c +++ b/sys/i386/i386/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.117 1999/05/08 06:39:18 phk Exp $ + * $Id: autoconf.c,v 1.118 1999/05/09 07:56:36 phk Exp $ */ /* @@ -51,6 +51,7 @@ #include "opt_mfs.h" #include "opt_nfsroot.h" #include "opt_bus.h" +#include "opt_rootdevname.h" #include <sys/param.h> #include <sys/systm.h> @@ -103,6 +104,8 @@ static void configure_finish __P((void)); static void configure_start __P((void)); static int setdumpdev __P((dev_t dev)); static void setroot __P((void)); +static int setrootbyname __P((char *name)); +static void gets __P((char *)); SYSINIT(configure1, SI_SUB_CONFIGURE, SI_ORDER_FIRST, configure_first, NULL); /* SI_ORDER_SECOND is hookable */ @@ -110,6 +113,8 @@ SYSINIT(configure2, SI_SUB_CONFIGURE, SI_ORDER_THIRD, configure, NULL); /* SI_ORDER_MIDDLE is hookable */ SYSINIT(configure3, SI_SUB_CONFIGURE, SI_ORDER_ANY, configure_final, NULL); +dev_t rootdev = NODEV; +dev_t dumpdev = NODEV; #if defined(CD9660) || defined(CD9660_ROOT) @@ -431,7 +436,11 @@ setroot() char partname[2]; char *sname; - if (boothowto & RB_DFLTROOT || (bootdev & B_MAGICMASK) != B_DEVMAGIC) + if (boothowto & RB_DFLTROOT) { + setrootbyname(ROOTDEVNAME); + return; + } + if ((bootdev & B_MAGICMASK) != B_DEVMAGIC) return; majdev = B_TYPE(bootdev); dev = makedev(majdev, 0); @@ -497,3 +506,118 @@ sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, 0, sizeof dumpdev, sysctl_kern_dumpdev, "T,dev_t", ""); + + + +static int +setrootbyname(char *name) +{ + char *cp; + int bd, unit, slice, part; + dev_t dev; + + slice = 0; + part = 0; + cp = name; + while (cp != '\0' && (*cp < '0' || *cp > '9')) + cp++; + if (cp == name) { + printf("missing device name\n"); + return(1); + } + if (*cp == '\0') { + printf("missing unit number\n"); + return(1); + } + unit = *cp - '0'; + *cp++ = '\0'; + for (bd = 0; bd < nblkdev; bd++) { + dev = makedev(bd, 0); + if (bdevsw(dev) != NULL && + strcmp(bdevsw(dev)->d_name, name) == 0) + goto gotit; + } + return (2); +gotit: + while (*cp >= '0' && *cp <= '9') + unit += 10 * unit + *cp++ - '0'; + if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') { + slice = cp[1] - '0'; + cp += 2; + } + if (*cp >= 'a' && *cp <= 'h') { + part = *cp - 'a'; + cp++; + } + if (*cp != '\0') { + printf("junk after name\n"); + return (1); + } + printf("driver=%s, unit=%d, slice=%d, part=%d\n", + name, unit, slice, part); + rootdev = makedev(bd, dkmakeminor(unit, slice, part)); + return 0; +} + +void +setconf() +{ + char name[128]; + int i; + dev_t dev; + + for(;;) { + printf("root device? "); + gets(name); + i = setrootbyname(name); + if (!i) + return; + + printf("use one of:\n"); + for (i = 0; i < nblkdev; i++) { + dev = makedev(i, 0); + if (bdevsw(dev) != NULL) + printf(" %s", bdevsw(dev)->d_name); + } + printf(" followed by a unit number...\n"); + } +} + +static void +gets(cp) + char *cp; +{ + register char *lp; + register int c; + + lp = cp; + for (;;) { + printf("%c", c = cngetc() & 0177); + switch (c) { + case -1: + case '\n': + case '\r': + *lp++ = '\0'; + return; + case '\b': + case '\177': + if (lp > cp) { + printf(" \b"); + lp--; + } + continue; + case '#': + lp--; + if (lp < cp) + lp = cp; + continue; + case '@': + case 'u' & 037: + lp = cp; + printf("%c", '\n'); + continue; + default: + *lp++ = c; + } + } +} |