diff options
| author | Tatsumi Hosokawa <hosokawa@FreeBSD.org> | 2000-10-31 07:39:07 +0000 |
|---|---|---|
| committer | Tatsumi Hosokawa <hosokawa@FreeBSD.org> | 2000-10-31 07:39:07 +0000 |
| commit | b98c5f70ff9a5591539fed903d36e8f7a8ee34cf (patch) | |
| tree | 18ca9b23c71a29cb08c4bff30a0671ba5cec73d7 | |
| parent | 0ba3999559ce716a6ca363ed057d865598325497 (diff) | |
Notes
| -rw-r--r-- | release/Makefile | 71 | ||||
| -rw-r--r-- | release/scripts/doFS.sh | 1 | ||||
| -rw-r--r-- | release/scripts/driver-copy2.pl | 78 | ||||
| -rw-r--r-- | release/scripts/driver-remove.pl | 58 | ||||
| -rw-r--r-- | release/sysinstall/Makefile | 4 | ||||
| -rw-r--r-- | release/sysinstall/main.c | 3 | ||||
| -rw-r--r-- | release/sysinstall/modules.c | 91 | ||||
| -rw-r--r-- | release/sysinstall/sysinstall.h | 3 | ||||
| -rw-r--r-- | usr.sbin/sade/Makefile | 4 | ||||
| -rw-r--r-- | usr.sbin/sade/main.c | 3 | ||||
| -rw-r--r-- | usr.sbin/sade/sade.h | 3 | ||||
| -rw-r--r-- | usr.sbin/sysinstall/Makefile | 4 | ||||
| -rw-r--r-- | usr.sbin/sysinstall/main.c | 3 | ||||
| -rw-r--r-- | usr.sbin/sysinstall/modules.c | 91 | ||||
| -rw-r--r-- | usr.sbin/sysinstall/sysinstall.h | 3 |
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); |
