aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsumi Hosokawa <hosokawa@FreeBSD.org>2000-10-31 07:39:07 +0000
committerTatsumi Hosokawa <hosokawa@FreeBSD.org>2000-10-31 07:39:07 +0000
commitb98c5f70ff9a5591539fed903d36e8f7a8ee34cf (patch)
tree18ca9b23c71a29cb08c4bff30a0671ba5cec73d7
parent0ba3999559ce716a6ca363ed057d865598325497 (diff)
Notes
-rw-r--r--release/Makefile71
-rw-r--r--release/scripts/doFS.sh1
-rw-r--r--release/scripts/driver-copy2.pl78
-rw-r--r--release/scripts/driver-remove.pl58
-rw-r--r--release/sysinstall/Makefile4
-rw-r--r--release/sysinstall/main.c3
-rw-r--r--release/sysinstall/modules.c91
-rw-r--r--release/sysinstall/sysinstall.h3
-rw-r--r--usr.sbin/sade/Makefile4
-rw-r--r--usr.sbin/sade/main.c3
-rw-r--r--usr.sbin/sade/sade.h3
-rw-r--r--usr.sbin/sysinstall/Makefile4
-rw-r--r--usr.sbin/sysinstall/main.c3
-rw-r--r--usr.sbin/sysinstall/modules.c91
-rw-r--r--usr.sbin/sysinstall/sysinstall.h3
15 files changed, 398 insertions, 22 deletions
diff --git a/release/Makefile b/release/Makefile
index f8ccd4babb8b5..19fea02dbd4f9 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -89,6 +89,8 @@ MNT= /mnt
# Various floppy image parameters.
#
+
+.if ${MACHINE_ARCH} == "i386"
.if ${MACHINE} == "pc98"
SMALLBOOTSIZE= 1200
BOOTSIZE= 1440
@@ -104,21 +106,28 @@ MFSLABEL= minimum2
.else
BOOTSIZE= 1440
FIXITSIZE= 1440
-MFSSIZE= 2880
+MFSSIZE= 4320
BIGBOOTSIZE= 2880
BOOTINODE= 80000
FIXITINODE= 4000
MFSINODE= 8000
BOOTLABEL= fd1440
FIXITLABEL= fd1440
-MFSLABEL= minimum2
+MFSLABEL= minimum3
BIGBOOTLABEL= minimum2
.endif
-
-# overrides.
-.if ${MACHINE_ARCH} == "alpha"
+.elif ${MACHINE_ARCH} == "alpha"
+BOOTSIZE= 1440
FIXITSIZE= 2880
+MFSSIZE= 2880
+BIGBOOTSIZE= 2880
+BOOTINODE= 80000
+FIXITINODE= 4000
+MFSINODE= 8000
+BOOTLABEL= fd1440
FIXITLABEL= minimum2
+MFSLABEL= minimum2
+BIGBOOTLABEL= minimum2
.endif
ZIPNSPLIT= gzip --no-name -9 -c | split -b 240640 -
@@ -547,11 +556,21 @@ release.8: write_mfs_in_kernel
@mkdir -p ${RD}/mfsfd/boot
@cp /boot/boot* ${RD}/mfsfd/boot
@cp /boot/loader.help ${RD}/mfsfd/boot
+ @cd ${.CURDIR} && ${MAKE} createBOOTMFS
+.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
+ @cd ${.CURDIR} && ${MAKE} doMODULES KERNEL=BOOTMFS KERNEL_KO=BOOTMFS KODIR=""
+.endif
@echo "Making the regular boot floppy."
@tar --exclude CVS -cf - -C ${.CURDIR}/sysinstall help | \
tar xf - -C ${RD}/mfsfd/stand
@echo "Compressing doc files..."
@gzip -9 ${RD}/mfsfd/stand/help/*.hlp
+.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
+ @mkdir -p ${RD}/mfsfd/stand/modules
+ @perl ${.CURDIR}/scripts/driver-copy2.pl \
+ ${.CURDIR}/${MACHINE_ARCH}/drivers.conf \
+ ${RD}/kernels ${RD}/mfsfd/stand/modules
+.endif
sh -e ${.CURDIR}/scripts/doFS.sh -s mfsroot ${RD} ${MNT} \
${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL}
@gzip -9vc mfsroot > mfsroot.gz
@@ -768,6 +787,28 @@ installCRUNCH:
fi
#
+# --==## BOOTMFS config file ##==--
+#
+
+createBOOTMFS:
+ @cd ${.CURDIR}/../sys/${MACHINE}/conf && \
+ sh ${.CURDIR}/scripts/dokern.sh ${FDSIZE} < ${KERNCONF} > BOOTMFS && \
+ [ -r ${KERNCONF}.hints ] && cp ${KERNCONF}.hints BOOTMFS.hints
+.if ${MACHINE_ARCH} == "i386"
+ @echo "options INTRO_USERCONFIG" >> \
+ ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
+.endif
+.if defined(FDSIZE) && ${FDSIZE} == "BIG"
+ @echo "options MD_ROOT_SIZE=`cat mfsroot.size`" >> \
+ ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
+.endif
+.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
+ @perl ${.CURDIR}/scripts/driver-remove.pl \
+ ${.CURDIR}/${MACHINE_ARCH}/drivers.conf \
+ ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
+.endif
+
+#
# --==## Compile a kernel by name ${KERNEL} ##==--
#
# We don't erase the sys/compile/${KERNEL} directory, since somebody
@@ -783,6 +824,14 @@ doKERNEL:
[ -r ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ] && \
cp ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ${RD}/kernels
+doMODULES:
+ @rm -f ${RD}/kernels/*.ko
+ @cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
+ @cd ${.CURDIR}/../sys/compile/${KERNEL} && \
+ make kernel-depend && \
+ make ${KERNEL_FLAGS} modules && \
+ make modules-reinstall DESTDIR=${RD}/kernels && \
+
doSTDKERNEL:
@rm -f ${RD}/kernels/${KERNEL}
@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
@@ -799,17 +848,7 @@ doSTDKERNEL:
doMFSKERN:
@echo "Running doMFSKERN for ${FSIMAGE}"
@rm -f ${RD}/kernels/BOOTMFS.${FSIMAGE}
- @cd ${.CURDIR}/../sys/${MACHINE}/conf && \
- sh ${.CURDIR}/scripts/dokern.sh ${FDSIZE} < ${KERNCONF} > BOOTMFS && \
- [ -r ${KERNCONF}.hints ] && cp ${KERNCONF}.hints BOOTMFS.hints
-.if ${MACHINE_ARCH} == "i386"
- @echo "options INTRO_USERCONFIG" >> \
- ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
-.endif
-.if defined(FDSIZE) && ${FDSIZE} == "BIG"
- @echo "options MD_ROOT_SIZE=`cat mfsroot.size`" >> \
- ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
-.endif
+ @cd ${.CURDIR} && ${MAKE} createBOOTMFS
@cd ${.CURDIR} && ${MAKE} doKERNEL KERNEL=BOOTMFS KERNEL_KO=BOOTMFS KODIR=""
@rm -rf ${RD}/image.${FSIMAGE}
@mkdir ${RD}/image.${FSIMAGE}
diff --git a/release/scripts/doFS.sh b/release/scripts/doFS.sh
index 6d84fa4c7a1ea..14badc47f3f62 100644
--- a/release/scripts/doFS.sh
+++ b/release/scripts/doFS.sh
@@ -48,6 +48,7 @@ do
vnconfig -s labels -c /dev/r${VNDEVICE} ${FSIMG}
disklabel -Brw /dev/r${VNDEVICE} ${FSLABEL}
newfs -i ${FSINODE} -T ${FSLABEL} -o space /dev/r${VNDEVICE}c
+ tunefs -m 0 /dev/r${VNDEVICE}c
mount /dev/${VNDEVICE}c ${MNT}
diff --git a/release/scripts/driver-copy2.pl b/release/scripts/driver-copy2.pl
new file mode 100644
index 0000000000000..541e3e093f32f
--- /dev/null
+++ b/release/scripts/driver-copy2.pl
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 2000 "HOSOKAWA, Tatsumi" <hosokawa@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+if ($#ARGV != 2) {
+ print STDERR "Usage: driver-copy.pl config_file src_ko_dir dst_ko_dir\n";
+ exit 1;
+}
+
+$config = $ARGV[0];
+$srcdir = $ARGV[1];
+$dstdir = $ARGV[2];
+
+open CONFIG, "< $config" or die "Cannot open $config.\n";
+while (<CONFIG>) {
+ s/#.*$//;
+ if (/^(\w+)\s+(\w+)\s+(\d+)\s+(\w+)\s+\"(.*)\"\s*$/) {
+ $flp{$2} = $3;
+ $dsc{$2} = $5;
+ }
+}
+close CONFIG;
+
+-d $srcdir or die "Cannot find $srcdir directory.\n";
+-d $dstdir or die "Cannot find $dstdir directory.\n";
+
+undef $/;
+
+foreach $f (sort keys %flp) {
+ if ($flp{$f} == 1) {
+ print STDERR "$f: There's nothing to do with driver on first floppy.\n";
+ }
+ elsif ($flp{$f} == 2) {
+ $srcfile = $srcdir . '/' . $f . '.ko';
+ $dstfile = $dstdir . '/' . $f . '.ko';
+ $dscfile = $dstdir . '/' . $f . '.dsc';
+ print STDERR "Copying $f.ko to $dstdir\n";
+ open SRC, "< $srcfile" or die "Cannot open $srcfile\n";
+ $file = <SRC>;
+ close SRC;
+ open DST, "> $dstfile" or die "Cannot open $dstfile\n";
+ print DST $file;
+ close DST;
+ open DSC, "> $dscfile" or die "Cannot open $dscfile\n";
+ print DSC $dsc{$f};
+ close DSC;
+ }
+ elsif ($flp{$f} == 3) {
+ # third driver floppy (currently not implemnted yet...)
+ print STDERR "3rd driver floppy support has not implemented yet\n";
+ exit 1;
+ }
+}
diff --git a/release/scripts/driver-remove.pl b/release/scripts/driver-remove.pl
new file mode 100644
index 0000000000000..2ff5a8886d655
--- /dev/null
+++ b/release/scripts/driver-remove.pl
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 2000 "HOSOKAWA, Tatsumi" <hosokawa@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+if ($#ARGV != 1) {
+ print STDERR "Usage: driver-remove.pl config_file BOOTMFS\n";
+ exit 1;
+}
+
+$config = $ARGV[0];
+$bootmfs = $ARGV[1];
+
+open CONFIG, "< $config" or die "Cannot open $config.\n";
+while (<CONFIG>) {
+ s/#.*$//;
+ if (/^(\w+)\s+(\w+)\s+(\d+)\s+(\w+)\s+\"(.*)\"\s*$/) {
+ $drivers{$1} = 1;
+ }
+}
+close CONFIG;
+
+open BOOTMFS, "< $bootmfs" or die "Cannot open $bootmfs.\n";
+while (<BOOTMFS>) {
+ next if (/^device\s+(\w+)/ && $drivers{$1});
+ push @bootmfs, $_;
+}
+close BOOTMFS;
+
+open BOOTMFS, "> $bootmfs" or die "Cannot open $bootmfs.\n";
+foreach (@bootmfs) {
+ print BOOTMFS;
+}
+close BOOTMFS;
diff --git a/release/sysinstall/Makefile b/release/sysinstall/Makefile
index ee75e66d9afd5..700dd044905e2 100644
--- a/release/sysinstall/Makefile
+++ b/release/sysinstall/Makefile
@@ -12,8 +12,8 @@ CLEANFILES+= keymap.tmp keymap.h
SRCS= anonFTP.c cdrom.c command.c config.c devices.c dhcp.c kget.c \
disks.c dispatch.c dist.c dmenu.c doc.c dos.c floppy.c \
ftp.c globals.c http.c index.c install.c installUpgrade.c keymap.c \
- label.c lndir.c main.c makedevs.c media.c menus.c misc.c mouse.c \
- msg.c network.c nfs.c options.c package.c pccard.c \
+ label.c lndir.c main.c makedevs.c media.c menus.c misc.c modules.c \
+ mouse.c msg.c network.c nfs.c options.c package.c pccard.c \
system.c tape.c tcpip.c termcap.c ufs.c usb.c user.c variable.c \
wizard.c keymap.h
diff --git a/release/sysinstall/main.c b/release/sysinstall/main.c
index e48d6c534e49e..67de905210f8d 100644
--- a/release/sysinstall/main.c
+++ b/release/sysinstall/main.c
@@ -101,6 +101,9 @@ main(int argc, char **argv)
if (DebugFD)
dup2(DebugFD, 2);
+ /* Initialize driver modules */
+ moduleInitialize();
+
/* Initialize PC-card */
pccardInitialize();
diff --git a/release/sysinstall/modules.c b/release/sysinstall/modules.c
new file mode 100644
index 0000000000000..a61e02e2d2814
--- /dev/null
+++ b/release/sysinstall/modules.c
@@ -0,0 +1,91 @@
+/*-
+ * Copyright (c) 2000 "HOSOKAWA, Tatsumi" <hosokawa@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include "sysinstall.h"
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <fcntl.h>
+#include <dirent.h>
+
+#define MODULESDIR "/stand/modules"
+
+void
+moduleInitialize(void)
+{
+ int fd, len;
+ DIR *dirp;
+ struct dirent *dp;
+ char module[MAXPATHLEN], desc[MAXPATHLEN];
+ char desc_str[BUFSIZ];
+
+ if (!RunningAsInit && !Fake) {
+ /* It's not my job... */
+ return;
+ }
+
+ dirp = opendir(MODULESDIR);
+ if (dirp) {
+ while ((dp = readdir(dirp))) {
+ if (dp->d_namlen < (sizeof(".ko") - 1)) continue;
+ if (strcmp(dp->d_name + dp->d_namlen - (sizeof(".ko") - 1), ".ko") == 0) {
+ strcpy(module, MODULESDIR);
+ strcat(module, "/");
+ strcat(module, dp->d_name);
+ strcpy(desc, module);
+ len = strlen(desc);
+ strcpy(desc + (len - (sizeof(".ko") - 1)), ".dsc");
+ fd = open(module, O_RDONLY);
+ if (fd < 0) continue;
+ close(fd);
+ fd = open(desc, O_RDONLY);
+ if (fd < 0) {
+ desc_str[0] = 0;
+ }
+ else {
+ len = read(fd, desc_str, BUFSIZ);
+ close(fd);
+ if (len < BUFSIZ) desc_str[len] = 0;
+ }
+ if (desc_str[0])
+ msgDebug("Loading module %s (%s)\n", dp->d_name, desc_str);
+ else
+ msgDebug("Loading module %s\n", dp->d_name);
+ if (kldload(module) < 0) {
+ if (desc_str[0])
+ msgConfirm("Loading module %s failed\n%s", dp->d_name, desc_str);
+ else
+ msgConfirm("Loading module %s failed", dp->d_name);
+ }
+ }
+ }
+ closedir(dirp);
+ }
+}
diff --git a/release/sysinstall/sysinstall.h b/release/sysinstall/sysinstall.h
index 8dab491f23ca9..d81644ae40e2a 100644
--- a/release/sysinstall/sysinstall.h
+++ b/release/sysinstall/sysinstall.h
@@ -670,6 +670,9 @@ extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
+/* modules.c */
+extern void moduleInitialize(void);
+
/* mouse.c */
extern int mousedTest(dialogMenuItem *self);
extern int mousedDisable(dialogMenuItem *self);
diff --git a/usr.sbin/sade/Makefile b/usr.sbin/sade/Makefile
index ee75e66d9afd5..700dd044905e2 100644
--- a/usr.sbin/sade/Makefile
+++ b/usr.sbin/sade/Makefile
@@ -12,8 +12,8 @@ CLEANFILES+= keymap.tmp keymap.h
SRCS= anonFTP.c cdrom.c command.c config.c devices.c dhcp.c kget.c \
disks.c dispatch.c dist.c dmenu.c doc.c dos.c floppy.c \
ftp.c globals.c http.c index.c install.c installUpgrade.c keymap.c \
- label.c lndir.c main.c makedevs.c media.c menus.c misc.c mouse.c \
- msg.c network.c nfs.c options.c package.c pccard.c \
+ label.c lndir.c main.c makedevs.c media.c menus.c misc.c modules.c \
+ mouse.c msg.c network.c nfs.c options.c package.c pccard.c \
system.c tape.c tcpip.c termcap.c ufs.c usb.c user.c variable.c \
wizard.c keymap.h
diff --git a/usr.sbin/sade/main.c b/usr.sbin/sade/main.c
index e48d6c534e49e..67de905210f8d 100644
--- a/usr.sbin/sade/main.c
+++ b/usr.sbin/sade/main.c
@@ -101,6 +101,9 @@ main(int argc, char **argv)
if (DebugFD)
dup2(DebugFD, 2);
+ /* Initialize driver modules */
+ moduleInitialize();
+
/* Initialize PC-card */
pccardInitialize();
diff --git a/usr.sbin/sade/sade.h b/usr.sbin/sade/sade.h
index 8dab491f23ca9..d81644ae40e2a 100644
--- a/usr.sbin/sade/sade.h
+++ b/usr.sbin/sade/sade.h
@@ -670,6 +670,9 @@ extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
+/* modules.c */
+extern void moduleInitialize(void);
+
/* mouse.c */
extern int mousedTest(dialogMenuItem *self);
extern int mousedDisable(dialogMenuItem *self);
diff --git a/usr.sbin/sysinstall/Makefile b/usr.sbin/sysinstall/Makefile
index ee75e66d9afd5..700dd044905e2 100644
--- a/usr.sbin/sysinstall/Makefile
+++ b/usr.sbin/sysinstall/Makefile
@@ -12,8 +12,8 @@ CLEANFILES+= keymap.tmp keymap.h
SRCS= anonFTP.c cdrom.c command.c config.c devices.c dhcp.c kget.c \
disks.c dispatch.c dist.c dmenu.c doc.c dos.c floppy.c \
ftp.c globals.c http.c index.c install.c installUpgrade.c keymap.c \
- label.c lndir.c main.c makedevs.c media.c menus.c misc.c mouse.c \
- msg.c network.c nfs.c options.c package.c pccard.c \
+ label.c lndir.c main.c makedevs.c media.c menus.c misc.c modules.c \
+ mouse.c msg.c network.c nfs.c options.c package.c pccard.c \
system.c tape.c tcpip.c termcap.c ufs.c usb.c user.c variable.c \
wizard.c keymap.h
diff --git a/usr.sbin/sysinstall/main.c b/usr.sbin/sysinstall/main.c
index e48d6c534e49e..67de905210f8d 100644
--- a/usr.sbin/sysinstall/main.c
+++ b/usr.sbin/sysinstall/main.c
@@ -101,6 +101,9 @@ main(int argc, char **argv)
if (DebugFD)
dup2(DebugFD, 2);
+ /* Initialize driver modules */
+ moduleInitialize();
+
/* Initialize PC-card */
pccardInitialize();
diff --git a/usr.sbin/sysinstall/modules.c b/usr.sbin/sysinstall/modules.c
new file mode 100644
index 0000000000000..a61e02e2d2814
--- /dev/null
+++ b/usr.sbin/sysinstall/modules.c
@@ -0,0 +1,91 @@
+/*-
+ * Copyright (c) 2000 "HOSOKAWA, Tatsumi" <hosokawa@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include "sysinstall.h"
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <fcntl.h>
+#include <dirent.h>
+
+#define MODULESDIR "/stand/modules"
+
+void
+moduleInitialize(void)
+{
+ int fd, len;
+ DIR *dirp;
+ struct dirent *dp;
+ char module[MAXPATHLEN], desc[MAXPATHLEN];
+ char desc_str[BUFSIZ];
+
+ if (!RunningAsInit && !Fake) {
+ /* It's not my job... */
+ return;
+ }
+
+ dirp = opendir(MODULESDIR);
+ if (dirp) {
+ while ((dp = readdir(dirp))) {
+ if (dp->d_namlen < (sizeof(".ko") - 1)) continue;
+ if (strcmp(dp->d_name + dp->d_namlen - (sizeof(".ko") - 1), ".ko") == 0) {
+ strcpy(module, MODULESDIR);
+ strcat(module, "/");
+ strcat(module, dp->d_name);
+ strcpy(desc, module);
+ len = strlen(desc);
+ strcpy(desc + (len - (sizeof(".ko") - 1)), ".dsc");
+ fd = open(module, O_RDONLY);
+ if (fd < 0) continue;
+ close(fd);
+ fd = open(desc, O_RDONLY);
+ if (fd < 0) {
+ desc_str[0] = 0;
+ }
+ else {
+ len = read(fd, desc_str, BUFSIZ);
+ close(fd);
+ if (len < BUFSIZ) desc_str[len] = 0;
+ }
+ if (desc_str[0])
+ msgDebug("Loading module %s (%s)\n", dp->d_name, desc_str);
+ else
+ msgDebug("Loading module %s\n", dp->d_name);
+ if (kldload(module) < 0) {
+ if (desc_str[0])
+ msgConfirm("Loading module %s failed\n%s", dp->d_name, desc_str);
+ else
+ msgConfirm("Loading module %s failed", dp->d_name);
+ }
+ }
+ }
+ closedir(dirp);
+ }
+}
diff --git a/usr.sbin/sysinstall/sysinstall.h b/usr.sbin/sysinstall/sysinstall.h
index 8dab491f23ca9..d81644ae40e2a 100644
--- a/usr.sbin/sysinstall/sysinstall.h
+++ b/usr.sbin/sysinstall/sysinstall.h
@@ -670,6 +670,9 @@ extern WINDOW *savescr(void);
extern void restorescr(WINDOW *w);
extern char *sstrncpy(char *dst, const char *src, int size);
+/* modules.c */
+extern void moduleInitialize(void);
+
/* mouse.c */
extern int mousedTest(dialogMenuItem *self);
extern int mousedDisable(dialogMenuItem *self);