Driver Floppy Supprt

HOSOKAWA, Tatsumi <hosokawa@FreeBSD.org>
Yokohama, Japan

Objectives

Currently, installation floppy of FreeBSD consists of two parts: statically linked kernel and mfsroot installer filesystem image. But, as the kernel grows bigger, the former sometimes exceeds 1.44MB limit. Ad-hoc solution is, of course, removing drivers (ex. APM driver) or features (ex. pty driver) that are not needed in the installation process. We sometimes used this technique when it exceeded the limit. But at last, we have virtually no unnecessary drivers and features in the kernel floppy now. Essential solution is needed.

I'm planning to provide optional third "Driver floppy". It contains driver kernel modules, and sysinstall dynamically loads them into kernel. It will have following features:

It will have following restrictions due to the technical reasons.

Partial Implementation

This is a patch of partial implementation of this project. I believe that this does not break "make release" on other achitectures, but I've not tested it yet because I have no i386-pc98 and alpha machines.

It currently have following features:

Comparison

The results of df (after tunefs -m 0) of standard snapshot release (2000/10/29) and this partial implementation:

Starndard kern.flp:

  /dev/vn0         1407     1388       19    99%    /mnt

Starndard mfsroot.flp:

  /dev/vn0         1407      828      579    59%    /mnt

kern.flp of this implementation:

  /dev/vn0         1407     1292      115    92%    /mnt

mfsroot.flp of this implementation:

  /dev/vn0         1407     1064      343    76%    /mnt

Wow, we've got about 96KB (115KB - 19KB) of spare space in the first floppy! (and we can get more space if we move more drivers to the second floppy or coming driver floppy)

How to move drivers?

To move drivers to the second floppy is very easy. If a driver is listed in src/release/${MACHINE_ARCH}/driver.conf, and the third column is 2, module file will be copied to the second floppy (mfsroot.flp) and automatically removed from MFSROOT static config file of the first floppy. This is sample configuration file of i386 architecture (src/release/i386/driver.conf).

# Driver config file for boot floppies
#  
# 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:$

#
# drv: driver name in kernel config file
# filename: filename of kernel module (without .ko)
# floppy: 2 (mfsroot.flp), 3 (drivers.flp - not implemented yet)
# type: disk/floppy/network/cdrom/tape/any (currently not used)
# description: short description of the driver
#

#drv	filename	floppy	type	description
an	if_an		2	network	"Aironet 4500/4800 802.11 PCMCIA/ISA/PCI card"
aue	if_aue		2	network	"ADMtek USB ethernet adapter"
cue	if_cue		2	network	"CATC USB ethernet adapter"
dc	if_dc		2	network	"DEC/Intel 21143 (and clones) PCI fast ethernet card"
fxp	if_fxp		2	network	"Intel EtherExpress Pro/100B PCI Fast Ethernet card"
kue	if_kue		2	network	"Kawasaki LSI USB ethernet adapter"
pcn	if_pcn		2	network	"AMD Am79c79x PCI ethernet card"
rl	if_rl		2	network	"RealTek 8129/8139 PCI ethernet card"
sf	if_sf		2	network	"Adaptec AIC-6915 PCI ethernet card"
sis	if_sis		2	network	"SiS 900/SiS 7016 PCI ethernet card"
sk	if_sk		2	network	"SysKonnect PCI gigabit ethernet card"
ste	if_ste		2	network	"Sundance ST201 PCI ethernet card"
ti	if_ti		2	network	"Alteon Networks PCI gigabit ethernet card"
tl	if_tl		2	network	"Texas Instruments ThunderLAN PCI ethernet card"
tx	if_tx		2	network	"SMC 9432TX ethernet card"
vr	if_vr		2	network	"VIA VT3043/VT86C100A Rhine PCI ethernet card"
wb	if_wb		2	network	"Winbond W89C840F PCI ethernet card"
wi	if_wi		2	network	"Lucent WaveLAN/IEEE 802.11 PCMCIA card"
wx	if_wx		2	network	"Intel Gigabit Ethernet (82452) card"
xl	if_xl		2	network	"3COM 3c90x / 3c90xB PCI ethernet card"

TODO

TODO list:


$Id: index.html,v 1.11 2000/10/29 23:38:06 hosokawa Exp $