summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-05-09 16:46:01 +0000
committerphk <phk@FreeBSD.org>1999-05-09 16:46:01 +0000
commitf3f6ab89ed81b363fb8387e4778da3045cc18620 (patch)
tree3acaf000dbabc5da2f399e4d46c960afa24cdf42 /sys
parentf4e8021f396c6b41a9d333b1739317e0a69ab9fc (diff)
downloadFreeBSD-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.c128
-rw-r--r--sys/amd64/conf/GENERIC4
-rw-r--r--sys/conf/Makefile.i3864
-rw-r--r--sys/conf/Makefile.powerpc4
-rw-r--r--sys/conf/NOTES14
-rw-r--r--sys/conf/files.i3863
-rw-r--r--sys/conf/options4
-rw-r--r--sys/i386/conf/GENERIC4
-rw-r--r--sys/i386/conf/LINT14
-rw-r--r--sys/i386/conf/Makefile.i3864
-rw-r--r--sys/i386/conf/NOTES14
-rw-r--r--sys/i386/conf/files.i3863
-rw-r--r--sys/i386/i386/autoconf.c128
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;
+ }
+ }
+}
OpenPOWER on IntegriCloud