repoint sound documentation reference to the directory and not the pre-pcm era file. Readme.cards is particuarly useful for the pcm driver. Suggested by: "Cambria, Mike" <mcambria@lucent.com>
1864 lines
65 KiB
Text
1864 lines
65 KiB
Text
<!--
|
|
The FreeBSD Documentation Project
|
|
|
|
$Id: chapter.sgml,v 1.16 1999-05-28 00:31:25 dwhite Exp $
|
|
-->
|
|
|
|
<chapter id="kernelconfig">
|
|
<title>Configuring the FreeBSD Kernel</title>
|
|
|
|
<para><emphasis>Contributed by &a.jehamby;. 6 October
|
|
1995.</emphasis></para>
|
|
|
|
<para>This large section of the handbook discusses the basics of building
|
|
your own custom kernel for FreeBSD. This section is appropriate for both
|
|
novice system administrators and those with advanced Unix
|
|
experience.</para>
|
|
|
|
<sect1>
|
|
<title>Why Build a Custom Kernel?</title>
|
|
|
|
<para>Building a custom kernel is one of the most important rites of
|
|
passage every Unix system administrator must endure. This process,
|
|
while time-consuming, will provide many benefits to your FreeBSD system.
|
|
Unlike the <literal>GENERIC</literal> kernel, which must support every
|
|
possible SCSI and network card, along with tons of other rarely used
|
|
hardware support, a custom kernel only contains support for
|
|
<emphasis>your</emphasis> PC's hardware. This has a number of
|
|
benefits:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>It will take less time to boot because it does not have to spend
|
|
time probing for hardware which you do not have.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>A custom kernel often uses less memory, which is important
|
|
because the kernel is the one process which must always be present
|
|
in memory, and so all of that unused code ties up pages of RAM that
|
|
your programs would otherwise be able to use. Therefore, on a
|
|
system with limited RAM, building a custom kernel is of critical
|
|
importance.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Finally, there are several kernel options which you can tune to
|
|
fit your needs, and device driver support for things like sound
|
|
cards which you can include in your kernel but are
|
|
<emphasis>not</emphasis> present in the GENERIC kernel.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 id="kernelconfig-building">
|
|
<title>Building and Installing a Custom Kernel</title>
|
|
|
|
<para>First, let us take a quick tour of the kernel build directory. All
|
|
directories mentioned will be relative to the main
|
|
<filename>/usr/src/sys</filename> directory, which is also accessible
|
|
through <filename>/sys</filename>. There are a number of subdirectories
|
|
here representing different parts of the kernel, but the most important,
|
|
for our purposes, are <filename>i386/conf</filename>, where you will
|
|
edit your custom kernel configuration, and <filename>compile</filename>,
|
|
which is the staging area where your kernel will be built. Notice the
|
|
logical organization of the directory tree, with each supported device,
|
|
filesystem, and option in its own subdirectory. Also, anything inside
|
|
the <filename>i386</filename> directory deals with PC hardware only,
|
|
while everything outside the <filename>i386</filename> directory is
|
|
common to all platforms which FreeBSD could potentially be ported
|
|
to.</para>
|
|
|
|
<note>
|
|
<para>If there is <emphasis>not</emphasis> a
|
|
<filename>/usr/src/sys</filename> directory on your system, then the
|
|
kernel source has not been been installed. The easiest way to do this
|
|
is by running <command>/stand/sysinstall</command> as
|
|
<username>root</username>, choosing <literal>Configure</literal>, then
|
|
<literal>Distributions</literal>, then <literal>src</literal>, then
|
|
<literal>sys</literal>.</para>
|
|
</note>
|
|
|
|
<para>Next, move to the <filename>i386/conf</filename> directory and copy
|
|
the <filename>GENERIC</filename> configuration file to the name you want
|
|
to give your kernel. For example:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput>
|
|
&prompt.root; <userinput>cp GENERIC MYKERNEL</userinput></screen>
|
|
|
|
<para>Traditionally, this name is in all capital letters and, if you are
|
|
maintaining multiple FreeBSD machines with different hardware, it is a
|
|
good idea to name it after your machine's hostname. We will call it
|
|
<filename>MYKERNEL</filename> for the purpose of this example.</para>
|
|
|
|
<note>
|
|
<para>You must execute these and all of the following commands under the
|
|
root account or you will get <errortype>permission denied</errortype>
|
|
errors.</para>
|
|
</note>
|
|
|
|
<para>Now, edit <filename>MYKERNEL</filename> with your favorite text
|
|
editor. If you are just starting out, the only editor available will
|
|
probably be <command>vi</command>, which is too complex to explain here,
|
|
but is covered well in many books in the <link
|
|
linkend="bibliography">bibliography</link>. However, FreeBSD does
|
|
offer an easier editor called “ee” which, if you are a
|
|
beginner, should be your editor of choise. Feel free to change the
|
|
comment lines at the top to reflect your configuration or the changes
|
|
you have made to differentiate it from
|
|
<filename>GENERIC</filename>.</para>
|
|
|
|
<para>If you have build a kernel under SunOS or some other BSD operating
|
|
system, much of this file will be very familiar to you. If you are
|
|
coming from some other operating system such as DOS, on the other hand,
|
|
the <filename>GENERIC</filename> configuration file might seem
|
|
overwhelming to you, so follow the descriptions in the <link
|
|
linkend="kernelconfig-config">Configuration File</link> section slowly
|
|
and carefully.</para>
|
|
|
|
<note>
|
|
<para>If you are trying to upgrade your kernel from an older version of
|
|
FreeBSD, you will probably have to get a new version of
|
|
&man.config.8; from the same place you got the new kernel sources.
|
|
It is located in <filename>/usr/src/usr.sbin</filename>, so you will
|
|
need to download those sources as well. Re-build and install it
|
|
before running the next commands.</para>
|
|
</note>
|
|
|
|
<para>When you are finished, type the following to compile and install
|
|
your kernel:</para>
|
|
|
|
<screen>&prompt.root; <userinput>/usr/sbin/config MYKERNEL</userinput>
|
|
&prompt.root; <userinput>cd ../../compile/MYKERNEL</userinput>
|
|
&prompt.root; <userinput>make depend</userinput>
|
|
&prompt.root; <userinput>make</userinput>
|
|
&prompt.root; <userinput>make install</userinput></screen>
|
|
|
|
<para>The new kernel will be copied to the root directory as
|
|
<filename>/kernel</filename> and the old kernel will be moved to
|
|
<filename>/kernel.old</filename>. Now, shutdown the system and reboot
|
|
to use your kernel. In case something goes wrong, there are some <link
|
|
linkend="kernelconfig-trouble">troubleshooting</link> instructions at
|
|
the end of this document. Be sure to read the section which explains how
|
|
to recover in case your new kernel <link
|
|
linkend="kernelconfig-noboot">does not boot</link>.</para>
|
|
|
|
<note>
|
|
<para>If you have added any new devices (such as sound cards) you may
|
|
have to add some <link linkend="kernelconfig-nodes">device
|
|
nodes</link> to your <filename>/dev</filename> directory before you
|
|
can use them.</para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 id="kernelconfig-config">
|
|
<title>The Configuration File</title>
|
|
|
|
<para>The general format of a configuration file is quite simple. Each
|
|
line contains a keyword and one or more arguments. For simplicity, most
|
|
lines only contain one argument. Anything following a
|
|
<literal>#</literal> is considered a comment and ignored. The following
|
|
sections describe each keyword, generally in the order they are listed
|
|
in <filename>GENERIC</filename>, although some related keywords have
|
|
been grouped together in a single section (such as Networking) even
|
|
though they are actually scattered throughout the
|
|
<filename>GENERIC</filename> file.
|
|
<anchor id="kernelconfig-options"> An exhaustive list of options and
|
|
more detailed explanations of the device lines is present in the
|
|
<filename>LINT</filename> configuration file, located in the same
|
|
directory as <filename>GENERIC</filename>. If you are in doubt as to
|
|
the purpose or necessity of a line, check first in
|
|
<filename>LINT</filename>.</para>
|
|
|
|
<para>The kernel is currently being moved to a better organization of the
|
|
option handling. Traditionally, each option in the config file was
|
|
simply converted into a <option>-D</option> switch for the
|
|
<acronym>CFLAGS</acronym> line of the kernel Makefile. Naturally, this
|
|
caused a creeping optionism, with nobody really knowing which option has
|
|
been referenced in what files.</para>
|
|
|
|
<para>In the new scheme, every <literal>#ifdef</literal> that is intended
|
|
to be dependent upon an option gets this option out of an
|
|
<filename>opt_<replaceable>foo</replaceable>.h</filename> declaration
|
|
file created in the compile directory by <command>config</command>. The
|
|
list of valid options for <command>config</command> lives in two files:
|
|
options that do not depend on the architecture are listed in
|
|
<filename>/sys/conf/options</filename>, architecture-dependent ones in
|
|
<filename>/sys/<replaceable>arch</replaceable>/conf/options.<replaceable>arch</replaceable></filename>,
|
|
with <emphasis>arch</emphasis> being for example
|
|
<filename>i386</filename>.</para>
|
|
|
|
<sect2>
|
|
<title>Mandatory Keywords</title>
|
|
|
|
<para>These keywords are required in every kernel you build.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>machine "i386"</literal></term>
|
|
|
|
<listitem>
|
|
<para>The first keyword is <literal>machine</literal>, which,
|
|
since FreeBSD only runs on Intel 386 (and compatible) chips and
|
|
DEC Alpha processors, will be either
|
|
<replaceable>i386</replaceable> or
|
|
<replaceable>alpha</replaceable>.</para>
|
|
|
|
<note>
|
|
<para>Any keyword which contains numbers used as text must be
|
|
enclosed in quotation marks, otherwise
|
|
<command>config</command> gets confused and thinks you mean
|
|
the actual number 386 if you enter
|
|
<literal>machine i386</literal>.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>cpu
|
|
"<replaceable>cpu_type</replaceable>"</literal></term>
|
|
|
|
<listitem>
|
|
<para>The next keyword is <literal>cpu</literal>, which includes
|
|
support for each CPU supported by FreeBSD. The possible values
|
|
of <replaceable>cpu_type</replaceable> for i386 systems
|
|
include:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>I386_CPU</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>I486_CPU</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>I586_CPU</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>I686_CPU</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>The values availible for <replaceable>cpu_type</replaceable>
|
|
for Alpha systems include:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>EV4</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>EV5</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Multiple instances of the <literal>cpu</literal> line may be
|
|
present with different values of
|
|
<replaceable>cpu_type</replaceable> as are present in the
|
|
<filename>GENERIC</filename> kernel. For a custom kernel, it is
|
|
best to specify only the cpu you have. If, for example, you
|
|
have an Intel Pentium, use <literal>I586_CPU</literal> for
|
|
<replaceable>cpu_type</replaceable>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>ident
|
|
<replaceable>machine_name</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para>Next, we have <literal>ident</literal>, which is the
|
|
identification of the kernel. You should change this from
|
|
<literal>GENERIC</literal> to whatever you named your kernel, in
|
|
this example, <literal>MYKERNEL</literal>. The value you put in
|
|
<literal>ident</literal> will print when you boot up the kernel,
|
|
so it is useful to give a kernel a different name if you want to
|
|
keep it separate from your usual kernel (if you want to build an
|
|
experimental kernel, for example). Note that, as with
|
|
<literal>machine</literal> and <literal> cpu</literal>, enclose
|
|
your kernel's name in quotation marks if it contains any
|
|
numbers.</para>
|
|
|
|
<para>Since this name is passed to the C compiler as a
|
|
<option>-D</option> switch, do not use names like
|
|
<literal>DEBUG</literal>, or something that could be confused
|
|
with another machine or CPU name, like
|
|
<literal>vax</literal>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>maxusers
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para>This file sets the size of a number of important system
|
|
tables. This number is supposed to be roughly equal to the
|
|
number of simultaneous users you expect to have on your machine.
|
|
However, under normal circumstances, you will want to set
|
|
<literal>maxusers</literal> to at least <literal>4</literal>,
|
|
especially if you are using the X Window System or compiling
|
|
software. The reason is that the most important table set by
|
|
<literal>maxusers</literal> is the maximum number of processes,
|
|
which is set to <literal>20 + 16 * maxusers</literal>, so if you
|
|
set <literal>maxusers</literal> to <literal>1</literal>, then
|
|
you can only have 36 simultaneous processes, including the 18 or
|
|
so that the system starts up at boot time, and the 15 or so you
|
|
will probably create when you start the X Window System. Even a
|
|
simple task like reading a man page will start up nine processes
|
|
to filter, decompress, and view it. Setting
|
|
<literal>maxusers</literal> to <literal>4</literal> will allow
|
|
you to have up to 84 simultaneous processes, which should be
|
|
enough for anyone. If, however, you see the dreaded
|
|
<errorname>proc table full</errorname> error when trying to
|
|
start another program, or are running a server with a large
|
|
number of simultaneous users (like Walnut Creek CDROM's FTP
|
|
site), you can always increase this number and rebuild.</para>
|
|
|
|
<note>
|
|
<para><literal>maxuser</literal> does <emphasis>not</emphasis>
|
|
limit the number of users which can log into your machine. It
|
|
simply sets various table sizes to reasonable values
|
|
considering the maximum number of users you will likely have
|
|
on your system and how many processes each of them will be
|
|
running. One keyword which <emphasis>does</emphasis> limit
|
|
the number of simultaneous <emphasis>remote logins</emphasis>
|
|
is <link linkend="kernelconfig-ptys">pseudo-device pty
|
|
16</link>.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>config
|
|
<replaceable>kernel_name</replaceable></literal> root on
|
|
<replaceable>root_device</replaceable></term>
|
|
|
|
<listitem>
|
|
<para>This line specifies the location and name of the kernel.
|
|
Traditionally the kernel is called <filename>vmunix</filename>
|
|
but in FreeBSD, it is aptly named <filename>kernel</filename>.
|
|
You should always use <literal>kernel</literal> for
|
|
<replaceable>kernel_name</replaceable> because changing it will
|
|
render numerous system utilities inoperative. The second part
|
|
of the line specifies the disk and partition where the root
|
|
filesystem and kernel can be found. Typically this will be
|
|
<literal>wd0</literal> for systems with non-SCSI drives, or
|
|
<literal>da0</literal> for systems with SCSI drives.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>General Options</title>
|
|
|
|
<para>These lines provide kernel support for various filesystems and
|
|
other options.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>options MATH_EMULATE</literal></term>
|
|
|
|
<listitem>
|
|
<para>This line allows the kernel to simulate a math co-processor
|
|
if your computer does not have one (386 or 486SX). If you have
|
|
a Pentium, a 486DX, or a 386 or 486SX with a separate 387 or 487
|
|
chip, you can comment this line out.</para>
|
|
|
|
<note>
|
|
<para>The normal math co-processor emulation routines that come
|
|
with FreeBSD are <emphasis>not</emphasis> very accurate. If
|
|
you do not have a math co-processor, and you need the best
|
|
accuracy, I recommend that you change this option to
|
|
<literal>GPL_MATH_EMULATE</literal> to use the superior GNU
|
|
math support, which is not included by default for licensing
|
|
reasons.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options "COMPAT_43"</literal></term>
|
|
|
|
<listitem>
|
|
<para>Compatibility with 4.3BSD. Leave this in; some programs
|
|
will act strangely if you comment this out.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options BOUNCE_BUFFERS</literal></term>
|
|
|
|
<listitem>
|
|
<para>ISA devices and EISA devices operating in an ISA
|
|
compatibility mode can only perform DMA (Direct Memory Access)
|
|
to memory below 16 megabytes. This option enables such devices
|
|
to work in systems with more than 16 megabytes of memory.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options UCONSOLE</literal></term>
|
|
|
|
<listitem>
|
|
<para>Allow users to grab the console, useful for X Windows. For
|
|
example, you can create a console xterm by typing <command>xterm
|
|
-C</command>, which will display any <command>write</command>,
|
|
<command>talk</command>, and other messages you receive, as well
|
|
as any console messages sent by the kernel.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options SYSVSHM</literal></term>
|
|
|
|
<listitem>
|
|
<para>This option provides for System V shared memory. The most
|
|
common use of this is the XSHM extension in X Windows, which
|
|
many graphics-intensive programs (such as the movie player
|
|
XAnim, and Linux DOOM) will automatically take advantage of for
|
|
extra speed. If you use the X Window System, you will
|
|
definitely want to include this.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options SYSVSEM</literal></term>
|
|
|
|
<listitem>
|
|
<para>Support for System V semaphores. Less commonly used but
|
|
only adds a few hundred bytes to the kernel.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options SYSVMSG</literal></term>
|
|
|
|
<listitem>
|
|
<para>Support for System V messages. Again, only adds a few
|
|
hundred bytes to the kernel.</para>
|
|
|
|
<note>
|
|
<para>The &man.ipcs.1; command will tell will list any processes
|
|
using each of these System V facilities.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Filesystem Options</title>
|
|
|
|
<para>These options add support for various filesystems. You must
|
|
include at least one of these to support the device you boot from;
|
|
typically this will be <acronym>FFS</acronym> if you boot from a hard
|
|
drive, or <acronym>NFS</acronym> if you are booting a diskless
|
|
workstation from Ethernet. You can include other commonly-used
|
|
filesystems in the kernel, but feel free to comment out support for
|
|
filesystems you use less often (perhaps the MS-DOS filesystem?), since
|
|
they will be dynamically loaded from the Kernel Module directory
|
|
<filename>/modules</filename> the first time you mount a partition
|
|
of that type.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>options FFS</literal></term>
|
|
|
|
<listitem>
|
|
<para>The basic hard drive filesystem; leave it in if you boot
|
|
from the hard disk.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options NFS</literal></term>
|
|
|
|
<listitem>
|
|
<para>Network Filesystem. Unless you plan to mount partitions
|
|
from a Unix file server over Ethernet, you can comment this
|
|
out.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options MSDOSFS</literal></term>
|
|
|
|
<listitem>
|
|
<para>MS-DOS Filesystem. Unless you plan to mount a DOS formatted
|
|
hard drive partition at boot time, you can safely comment this
|
|
out. It will be automatically loaded the first time you mount a
|
|
DOS partition, as described above. Also, the excellent
|
|
<application>mtools</application> software (in the ports
|
|
collection) allows you to access DOS floppies without having to
|
|
mount and unmount them (and does not require MSDOSFS at
|
|
all).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options "CD9660"</literal></term>
|
|
|
|
<listitem>
|
|
<para>ISO 9660 filesystem for CD-ROMs. Comment it out if you do
|
|
not have a CD-ROM drive or only mount data CD's occasionally
|
|
(since it will be dynamically loaded the first time you mount a
|
|
data CD). Audio CD's do not need this filesystem.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options PROCFS</literal></term>
|
|
|
|
<listitem>
|
|
<para>Process filesystem. This is a pretend filesystem mounted on
|
|
<filename>/proc</filename> which allows programs like &man.ps.1;
|
|
to give you more information on
|
|
what processes are running.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options MFS</literal></term>
|
|
|
|
<listitem>
|
|
<para>Memory-mapped file system. This is basically a RAM disk for
|
|
fast storage of temporary files, useful if you have a lot of
|
|
swap space that you want to take advantage of. A perfect place
|
|
to mount an MFS partition is on the <filename>/tmp</filename>
|
|
directory, since many programs store temporary data here. To
|
|
mount an MFS RAM disk on <filename>/tmp</filename>, add the
|
|
following line to <filename>/etc/fstab</filename> and then
|
|
reboot or type <command>mount /tmp</command>:</para>
|
|
|
|
<programlisting>
|
|
/dev/wd1s2b /tmp mfs rw 0 0</programlisting>
|
|
|
|
<note>
|
|
<para>Replace the <filename>/dev/wd1s2b</filename> with the name
|
|
of your swap partition, which will be listed in your
|
|
<filename>/etc/fstab</filename> as follows:</para>
|
|
|
|
<programlisting>
|
|
/dev/wd1s2b none swap sw 0 0</programlisting>
|
|
</note>
|
|
|
|
<note>
|
|
<para>Also, the <acronym>MFS</acronym> filesystem can
|
|
<emphasis>not</emphasis> be dynamically loaded, so you
|
|
<emphasis>must</emphasis> compile it into your kernel if you
|
|
want to experiment with it.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options "EXT2FS"</literal></term>
|
|
|
|
<listitem>
|
|
<para>Linux's native file system. With ext2fs support you are
|
|
able to read and write to Linux partitions. This is useful if
|
|
you dual-boot FreeBSD and Linux and want to share data between
|
|
the two systems.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options QUOTA</literal></term>
|
|
|
|
<listitem>
|
|
<para>Enable disk quotas. If you have a public access system, and
|
|
do not want users to be able to overflow the
|
|
<filename>/home</filename> partition, you can establish disk
|
|
quotas for each user. Refer to the <link linkend="quotas">Disk
|
|
Quotas</link> section for more information.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Basic Controllers and Devices</title>
|
|
|
|
<para>These sections describe the basic disk, tape, and CD-ROM
|
|
controllers supported by FreeBSD. There are separate sections for
|
|
<link linkend="kernelconfig-scsi">SCSI</link> controllers and <link
|
|
linkend="kernelconfig-network">network</link> cards.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>controller isa0</literal></term>
|
|
<listitem>
|
|
<para>All PC's supported by FreeBSD have one of these. If you
|
|
have an IBM PS/2 (Micro Channel Architecture), then you cannot
|
|
run FreeBSD at this time.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller pci0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Include this if you have a PCI motherboard. This enables
|
|
auto-detection of PCI cards and gatewaying from the PCI to the
|
|
ISA bus.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller fdc0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Floppy drive controller: <literal>fd0</literal> is the
|
|
<devicename>A:</devicename> floppy drive, and
|
|
<literal>fd1</literal> is the <devicename>B:</devicename> drive.
|
|
<literal>ft0</literal> is a QIC-80 tape drive attached to the
|
|
floppy controller. Comment out any lines corresponding to
|
|
devices you do not have.</para>
|
|
|
|
<note>
|
|
<para>QIC-80 tape support requires a separate filter program
|
|
called &man.ft.8;, see the manual page for
|
|
details.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller wdc0</literal></term>
|
|
|
|
<listitem>
|
|
<para>This is the primary IDE controller. <literal>wd0</literal>
|
|
and <literal>wd1</literal> are the master and slave hard drive,
|
|
respectively. <literal>wdc1</literal> is a secondary IDE
|
|
controller where you might have a third or fourth hard drive, or
|
|
an IDE CD-ROM. Comment out the lines which do not apply (if you
|
|
have a SCSI hard drive, you will probably want to comment out
|
|
all six lines, for example).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device wcd0<anchor
|
|
id="kernelconfig-atapi"></literal></term>
|
|
|
|
<listitem>
|
|
<para>This device provides IDE CD-ROM support. Be sure to leave
|
|
<literal>wdc0</literal> uncommented, and <literal>wdc1</literal>
|
|
if you have more than one IDE controller and your CD-ROM is on
|
|
the second one card. To use this, you must also include the
|
|
line <literal>options ATAPI</literal>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device npx0 at isa? port "IO_NPX" irq 13
|
|
vector npxintr</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>npx0</literal> is the interface to the floating
|
|
point math unit in FreeBSD, either the hardware co-processor or
|
|
the software math emulator. It is <emphasis>not</emphasis>
|
|
optional.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device wt0 at isa? port 0x300 bio irq 5 drq 1 vector
|
|
wtintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Wangtek and Archive QIC-02/QIC-36 tape drive support</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>Proprietary CD-ROM support</term>
|
|
|
|
<listitem>
|
|
<para>The following drivers are for the so-called
|
|
<emphasis>proprietary</emphasis> CD-ROM drives. These drives
|
|
have their own controller card or might plug into a sound card
|
|
such as the SoundBlaster 16. They are <emphasis>not</emphasis>
|
|
IDE or SCSI. Most older single-speed and double-speed CD-ROMs
|
|
use these interfaces, while newer quad-speeds are likely to be
|
|
<link linkend="kernelconfig-atapi">IDE</link> or <link
|
|
linkend="kernelconfig-scsi">SCSI</link>.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>device mcd0 at isa? port 0x300 bio irq 10
|
|
vector mcdintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Mitsumi CD-ROM (LU002, LU005, FX001D).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device scd0 at isa? port 0x230
|
|
bio</literal></term>
|
|
|
|
<listitem>
|
|
<para>Sony CD-ROM (CDU31, CDU33A).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller matcd0 at isa? port ?
|
|
bio</literal></term>
|
|
|
|
<listitem>
|
|
<para>Matsushita/Panasonic CD-ROM (sold by Creative Labs for
|
|
SoundBlaster).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2 id="kernelconfig-scsi">
|
|
<title>SCSI Device Support</title>
|
|
|
|
<para>This section describes the various SCSI controllers and devices
|
|
supported by FreeBSD.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term>SCSI Controllers</term>
|
|
|
|
<listitem>
|
|
<para>The next ten or so lines include support for different kinds
|
|
of SCSI controllers. Comment out all except for the one(s) you
|
|
have:</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>controller bt0 at isa? port "IO_BT0" bio irq ?
|
|
vector btintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Most Buslogic controllers</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller uha0 at isa? port "IO_UHA0" bio irq
|
|
? drq 5 vector uhaintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>UltraStor 14F and 34F</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller ahc0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Adaptec 274x/284x/294x</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller ahb0 at isa? bio irq ?
|
|
vector ahbintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Adaptec 174x</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller aha0 at isa? port "IO_AHA0" bio
|
|
irq ? drq 5 vector ahaintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Adaptec 154x</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller aic0 at isa? port
|
|
0x340 bio irq 11 vector aicintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Adaptec 152x and sound cards using Adaptec AIC-6360
|
|
(slow!)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller nca0 at isa? port 0x1f88 bio irq
|
|
10 vector ncaintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>ProAudioSpectrum cards using NCR 5380 or Trantor
|
|
T130</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller sea0 at isa? bio irq 5 iomem
|
|
0xc8000 iosiz 0x2000 vector seaintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Seagate ST01/02 8 bit controller (slow!)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller wds0 at isa? port 0x350 bio irq
|
|
15 drq 6 vector wdsintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Western Digital WD7000 controller</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller ncr0</literal></term>
|
|
|
|
<listitem>
|
|
<para>NCR 53C810, 53C815, 53C825, 53C860, 53C875 PCI SCSI
|
|
controller</para>
|
|
|
|
<note>
|
|
<para>This also supports the Diamond FirePort
|
|
controller.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options SCSI_DELAY=15000</literal></term>
|
|
|
|
<listitem>
|
|
<para>This causes the kernel to pause 15 seconds before probing
|
|
each SCSI device in your system. If you only have IDE hard
|
|
drives, you can ignore this, otherwise you will probably want to
|
|
lower this number, perhaps to 5 seconds, to speed up booting.
|
|
Of course if you do this, and FreeBSD has trouble recognizing
|
|
your SCSI devices, you will have to raise it back up.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller scbus0</literal></term>
|
|
|
|
<listitem>
|
|
<para>If you have any SCSI controllers, this line provides generic
|
|
SCSI support. If you do not have SCSI, you can comment this,
|
|
and the following three lines, out.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device da0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Support for SCSI hard drives.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device st0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Support for SCSI tape drives.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device cd0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Support for SCSI CD-ROM drives.</para>
|
|
|
|
<para>Note that the number <literal>0</literal> in the above
|
|
entries is slightly misleading: all these devices are
|
|
automatically configured as they are found, regardless of how
|
|
many of them are hooked up to the SCSI bus(es), and which target
|
|
IDs they have.</para>
|
|
|
|
<para>If you want to “wire down” specific target IDs
|
|
to particular devices, refer to the appropriate section of the
|
|
<filename>LINT</filename> kernel config file.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Console, Bus Mouse, Keyboard, and X Server Support</title>
|
|
|
|
<para>You must choose one of these two console types, and, if you plan
|
|
to use the X Window System with the vt220 console, enable the XSERVER
|
|
option and optionally, a bus mouse or PS/2 mouse device.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>device sc0 at isa? port "IO_KBD" tty irq 1 vector
|
|
scintr</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>sc0</literal> is the default console driver, which
|
|
resembles an SCO console. Since most full-screen programs
|
|
access the console through a terminal database library like
|
|
<filename>termcap</filename>, it should not matter much whether
|
|
you use this or <literal>vt0</literal>, the VT220 compatible
|
|
console driver. When you log in, set your <envar>TERM</envar>
|
|
variable to “scoansi” if full-screen programs have
|
|
trouble running under this console.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>controller atkbdc0 at isa? port IO_KBD
|
|
tty</literal></term>
|
|
|
|
<listitem>
|
|
<para>The keyboard controller <literal>atkbdc</literal> provides
|
|
I/O services for the AT keyboard and PS/2 style pointing
|
|
devices. This controller is required by the keyboard driver
|
|
<literal>atkbd</literal> and the PS/2 pointing device driver
|
|
<literal>psm</literal>.
|
|
</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>options
|
|
"KBD_RESETDELAY=<replaceable>X</replaceable>", options
|
|
"KBD_MAXWAIT=<replaceable>Y</replaceable>"</literal></term>
|
|
|
|
<listitem>
|
|
<para>The keyboard driver <literal>atkbd</literal> and the
|
|
pointing device driver <literal>psm</literal> may ask the
|
|
<literal>atkbdc</literal> driver to reset the devices
|
|
during the boot process. It sometimes takes a long time
|
|
before these devices respond to the reset command. These
|
|
options control how long the <literal>atkbdc</literal>
|
|
driver should wait before giving up — the driver
|
|
will wait <replaceable>X</replaceable> *
|
|
<replaceable>Y</replaceable> milliseconds at most. If the
|
|
drivers seem unable to detect devices, you may want to
|
|
increase these values. The default values are 200
|
|
milliseconds for <replaceable>X</replaceable> and 5 for
|
|
<replaceable>Y</replaceable>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options
|
|
"KBDIO_DEBUG=<replaceable>N</replaceable>"</literal></term>
|
|
|
|
<listitem>
|
|
<para>Sets the debug level to <replaceable>N</replaceable>.
|
|
The default value is zero, which supresses all debugging
|
|
output.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<note>
|
|
<para>There can only be one <literal>atkbdc</literal> device
|
|
configured into the system.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device atkbd0 at isa? tty irq 1</literal></term>
|
|
|
|
<listitem>
|
|
<para>The <literal>atkbd</literal> driver, together with the
|
|
<literal>atkbdc</literal> controller, provides access to the
|
|
AT 84 keyboard or the AT enhanced keyboard which is connected
|
|
to the AT keyboard controller.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device vt0 at isa? port "IO_KBD" tty irq 1 vector
|
|
pcrint</literal></term>
|
|
|
|
<listitem>
|
|
<para>This is a VT220-compatible console driver, backwards
|
|
compatible to VT100/102. It works well on some laptops which
|
|
have hardware incompatibilities with <literal>sc0</literal>.
|
|
Also, set your <envar>TERM</envar> variable to
|
|
<literal>vt100</literal> or <literal>vt220</literal> when you
|
|
log in. This driver might also prove useful when connecting to
|
|
a large number of different machines over the network, where the
|
|
<filename>termcap</filename> or <filename>terminfo</filename>
|
|
entries for the <devicename>sc0</devicename> device are often
|
|
not available — <literal>vt100</literal> should be
|
|
available on virtually any platform.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>options "PCVT_FREEBSD=210"</literal></term>
|
|
|
|
<listitem>
|
|
<para>Required with the <literal>vt0</literal> console
|
|
driver.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>options XSERVER</literal></term>
|
|
|
|
<listitem>
|
|
<para>Only applicable with the <literal>vt0</literal>
|
|
console driver. This includes code required to run the
|
|
<application>XFree86</application> X Window Server under
|
|
the <literal>vt0</literal> console driver.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device mse0 at isa? port 0x23c tty irq 5 vector
|
|
ms</literal></term>
|
|
|
|
<listitem>
|
|
<para>Use this device if you have a Logitech or ATI InPort bus
|
|
mouse card.</para>
|
|
|
|
<note>
|
|
<para>If you have a serial mouse, ignore these two lines, and
|
|
instead, make sure the appropriate <link
|
|
linkend="kernelconfig-serial">serial</link> port is enabled
|
|
(probably COM1).</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device psm0 at isa? port "IO_KBD" conflicts tty irq
|
|
12 vector psmintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Use this device if your mouse plugs into the PS/2 mouse
|
|
port.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Serial and Parallel Ports</title>
|
|
|
|
<para>Nearly all systems have these. If you are attaching a printer to
|
|
one of these ports, the <link linkend="printing">Printing</link>
|
|
section of the handbook is very useful. If you are using modem, <link
|
|
linkend="dialup">Dialup access</link> provides extensive detail on
|
|
serial port configuration for use with such devices.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>device sio0 at isa? port "IO_COM1" tty irq 4 vector
|
|
siointr</literal><anchor
|
|
id="kernelconfig-serial"></term>
|
|
|
|
<listitem>
|
|
<para><literal>sio0</literal> through <literal>sio3</literal> are
|
|
the four serial ports referred to as COM1 through COM4 in the
|
|
MS-DOS world. Note that if you have an internal modem on COM4
|
|
and a serial port at COM2 you will have to change the IRQ of the
|
|
modem to 2 (for obscure technical reasons IRQ 2 = IRQ 9) in
|
|
order to access it from FreeBSD. If you have a multiport serial
|
|
card, check the manual page for &man.sio.4; for more information
|
|
on the proper values for these lines. Some video cards (notably
|
|
those based on S3 chips) use IO addresses of the form
|
|
<literal>0x*2e8</literal>, and since many cheap serial cards do
|
|
not fully decode the 16-bit IO address space, they clash with
|
|
these cards, making the COM4 port practically
|
|
unavailable.</para>
|
|
|
|
<para>Each serial port is required to have a unique IRQ (unless
|
|
you are using one of the multiport cards where shared interrupts
|
|
are supported), so the default IRQs for COM3 and COM4 cannot be
|
|
used.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device lpt0 at isa? port? tty irq 7 vector
|
|
lptintr</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>lpt0</literal> through <literal>lpt2</literal> are
|
|
the three printer ports you could conceivably have. Most people
|
|
just have one, though, so feel free to comment out the other two
|
|
lines if you do not have them.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2 id="kernelconfig-network">
|
|
<title>Networking</title>
|
|
|
|
<para>FreeBSD, as with Unix in general, places a
|
|
<emphasis>big</emphasis> emphasis on networking. Therefore, even if
|
|
you do not have an Ethernet card, pay attention to the mandatory
|
|
options and the dial-up networking support.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>options INET</literal></term>
|
|
|
|
<listitem>
|
|
<para>Networking support. Leave it in even if you do not plan to
|
|
be connected to a network. Most programs require at least
|
|
loopback networking (i.e. making network connections within
|
|
your PC) so this is essentially mandatory.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>Ethernet cards</term>
|
|
|
|
<listitem>
|
|
<para>The next lines enable support for various Ethernet cards.
|
|
If you do not have a network card, you can comment out all of
|
|
these lines. Otherwise, you will want to leave in support for
|
|
your particular Ethernet card(s):</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>device cs0</literal></term>
|
|
|
|
<listitem>
|
|
<para>IBM Etherjet and other Crystal Semi CS89x0-based
|
|
adapters.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device de0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Ethernet adapters based on Digital Equipment DC21040,
|
|
DC21041 or DC21140 chips</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device fxp0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Intel EtherExpress Pro/100B</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device vx0</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com 3C590 and 3C595 (buggy)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device cx0 at isa? port 0x240 net irq 15 drq 7
|
|
vector cxintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Cronyx/Sigma multiport sync/async (with Cisco or PPP
|
|
framing)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device ed0 at isa? port 0x280 net irq 5 iomem
|
|
0xd8000 vector edintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Western Digital and SMC 80xx and 8216; Novell NE1000
|
|
and NE2000; 3Com 3C503; HP PC Lan Plus (HP27247B and
|
|
HP27252A)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device el0 at isa? port 0x300 net irq 9 vector
|
|
elintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com 3C501 (slow!)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device eg0 at isa? port 0x310 net irq 5 vector
|
|
egintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com 3C505</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device ep0 at isa? port 0x300 net irq 10 vector
|
|
epintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com 3C509 (buggy)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device fe0 at isa? port 0x240 net irq ? vector
|
|
feintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Fujitsu MB86960A/MB86965A Ethernet</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device fea0 at isa? net irq ? vector
|
|
feaintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>DEC DEFEA EISA FDDI adapter</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device ie0 at isa? port 0x360 net irq 7 iomem
|
|
0xd0000 vector ieintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>AT&T StarLAN 10 and EN100; 3Com 3C507; unknown
|
|
NI5210; Intel EtherExpress 16</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device le0 at isa? port 0x300 net irq 5 iomem
|
|
0xd0000 vector le_intr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Digital Equipment EtherWorks 2 and EtherWorks 3
|
|
(DEPCA, DE100, DE101, DE200, DE201, DE202, DE203, DE204,
|
|
DE205, DE422)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device lnc0 at isa? port 0x300 net irq 10 drq 0
|
|
vector lncintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Lance/PCnet cards (Isolan, Novell NE2100,
|
|
NE32-VL)</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device xl0</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com Etherlink XL series PCI ethernet controllers
|
|
(3C905B and related).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device ze0 at isa? port 0x300 net irq 5 iomem
|
|
0xd8000 vector zeintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>IBM/National Semiconductor PCMCIA ethernet
|
|
controller.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device zp0 at isa? port 0x300 net irq 10 iomem
|
|
0xd8000 vector zpintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>3Com PCMCIA Etherlink III</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<note>
|
|
<para>With certain cards (notably the NE2000) you will have to
|
|
change the port and/or IRQ since there is no
|
|
“standard” location for these cards.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device loop</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>loop</literal> is the generic loopback device for
|
|
TCP/IP. If you telnet or FTP to <hostid>localhost</hostid>
|
|
(a.k.a. <hostid role="ipaddr">127.0.0.1</hostid>) it will come
|
|
back at you through this pseudo-device. Mandatory.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device ether</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>ether</literal> is only needed if you have an
|
|
Ethernet card and includes generic Ethernet protocol
|
|
code.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device sl
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>sl</literal> is for SLIP (Serial Line Internet
|
|
Protocol) support. This has been almost entirely supplanted by
|
|
PPP, which is easier to set up, better suited for modem-to-modem
|
|
connections, as well as more powerful. The
|
|
<replaceable>number</replaceable> after <literal>sl</literal>
|
|
specifies how many simultaneous SLIP sessions to support. This
|
|
handbook has more information on setting up a SLIP <link
|
|
linkend="slipc">client</link> or <link
|
|
linkend="slips">server</link>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device ppp
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>ppp</literal> is for kernel-mode PPP
|
|
(Point-to-Point Protocol) support for dial-up Internet
|
|
connections. There is also version of PPP implemented as a user
|
|
application that uses the <devicename>tun</devicename> and
|
|
offers more flexibility and features such as demand dialing. If
|
|
you still want to use this PPP driver, read the <link
|
|
linkend="ppp">kernel-mode PPP</link> section of the handbook.
|
|
As with the <literal>sl</literal> device,
|
|
<replaceable>number</replaceable> specifies how many
|
|
simultaneous PPP connections to support.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device tun
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>tun</literal> is used by the user-mode PPP
|
|
software. This program is easy to set up and very fast. It
|
|
also has special features such as automatic dial-on-demand. The
|
|
number after <literal>tun</literal> specifies the number of
|
|
simultaneous PPP sessions to support. See the <link
|
|
linkend="userppp">user-mode PPP</link> section of the handbook
|
|
for more information.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device bpfilter
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para>Berkeley packet filter. This pseudo-device allows network
|
|
interfaces to be placed in promiscuous mode, capturing every
|
|
packet on a broadcast network (e.g. an ethernet). These
|
|
packets can be captured to disk and/or examined with the
|
|
&man.tcpdump.1; program. Note that implementation of this
|
|
capability can seriously compromise your overall network
|
|
security. The <replaceable>number</replaceable> after bpfilter
|
|
is the number of interfaces that can be examined simultaneously.
|
|
Optional, not recommended except for those who are fully aware
|
|
of the potential pitfalls. Not all network cards support this
|
|
capability.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Sound cards</title>
|
|
|
|
<para>This is the first section containing lines that are not in the
|
|
GENERIC kernel. To include sound card support, you will have to copy
|
|
the appropriate lines from the LINT kernel (which contains support for
|
|
<emphasis>every</emphasis> device) as follows:</para>
|
|
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>controller snd0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Generic sound driver code. Required for all of the
|
|
following sound cards except <literal>pca</literal>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device pas0 at isa? port 0x388 irq 10 drq 6 vector
|
|
pasintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>ProAudioSpectrum digital audio and MIDI.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device sb0 at isa? port 0x220 irq 7 conflicts drq 1
|
|
vector sbintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>SoundBlaster digital audio.</para>
|
|
|
|
<note>
|
|
<para>If your SoundBlaster is on a different IRQ (such as 5),
|
|
change <literal>irq 7</literal> to, for example, <literal>irq
|
|
5</literal> and remove the <literal>conflicts</literal>
|
|
keyword. </para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device sbxvi0 at isa? drq 5</literal></term>
|
|
|
|
<listitem>
|
|
<para>SoundBlaster 16 digital 16-bit audio.</para>
|
|
|
|
<note>
|
|
<para>If your SB16 is on a different 16-bit DMA channel (such as
|
|
6 or 7), change the <literal>drq 5</literal> keyword
|
|
appropriately.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device sbmidi0 at isa? port 0x330</literal></term>
|
|
|
|
<listitem>
|
|
<para>SoundBlaster 16 MIDI interface. If you have a SoundBlaster
|
|
16, you must include this line, or the kernel will not
|
|
compile.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device gus0 at isa? port 0x220 irq 10 drq 1 vector
|
|
gusintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Gravis Ultrasound.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device mss0 at isa? port 0x530 irq 10 drq 1 vector
|
|
adintr</literal></term>
|
|
|
|
<listitem>
|
|
<para>Microsoft Sound System.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device opl0 at isa? port 0x388
|
|
conflicts</literal></term>
|
|
|
|
<listitem>
|
|
<para>AdLib FM-synthesis audio. Include this line for AdLib,
|
|
SoundBlaster, and ProAudioSpectrum users, if you want to play
|
|
MIDI songs with a program such as <command>playmidi</command>
|
|
(in the ports collection).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device mpu0 at isa? port 0x330 irq 6 drq
|
|
0</literal></term>
|
|
|
|
<listitem>
|
|
<para>Roland MPU-401 stand-alone card.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device uart0 at isa? port 0x330 irq 5 vector
|
|
"m6850intr"</literal></term>
|
|
|
|
<listitem>
|
|
<para>Stand-alone 6850 UART for MIDI.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device pca0 at isa? port "IO_TIMER1"
|
|
tty</literal><anchor id="kernelconfig-pcaudio"></term>
|
|
|
|
<listitem>
|
|
<para>Digital audio through PC speaker. This is going to be very
|
|
poor sound quality and quite CPU-intensive, so you have been
|
|
warned (but it does not require a sound card).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>device pcm0 at isa? port ? tty irq 10 drq 1 flags 0x0
|
|
</literal></term>
|
|
|
|
<listitem>
|
|
<para>The <literal>pcm</literal> driver provides support for
|
|
various ISA sound cards that are compatible with the WSS/MSS
|
|
specs, or with the Sound Blaster Pro and Sound Blaster
|
|
16.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<note>
|
|
<para>There is some additional documentation in
|
|
<filename>/usr/src/sys/i386/isa/sound/</filename>. Also, if
|
|
you add any of these devices, be sure to create the sound <link
|
|
linkend="kernelconfig-nodes">device nodes</link>.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Pseudo-devices</title>
|
|
|
|
<para>Pseudo-device drivers are parts of the kernel that act like device
|
|
drivers but do not correspond to any actual hardware in the machine.
|
|
The <link linkend="kernelconfig-network">network-related</link>
|
|
pseudo-devices are in that section, while the remainder are
|
|
here.</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>pseudo-device gzip</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>gzip</literal> allows you to run FreeBSD programs
|
|
that have been compressed with <command>gzip</command>. The
|
|
programs in <filename>/stand</filename> are compressed so it is
|
|
a good idea to have this option in your kernel.</para>
|
|
|
|
<note>
|
|
<para>The <literal>gzip</literal> feature currently only works
|
|
with a.out binaries.</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device log</literal></term>
|
|
|
|
<listitem>
|
|
<para><literal>log</literal> is used for logging of kernel error
|
|
messages. Mandatory.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device pty
|
|
<replaceable>number</replaceable></literal><anchor
|
|
id="kernelconfig-ptys"></term>
|
|
|
|
<listitem>
|
|
<para><literal>pty</literal> is a “pseudo-terminal” or
|
|
simulated login port. It is used by incoming
|
|
<command>telnet</command> and <command>rlogin</command>
|
|
sessions, xterm, and some other applications such as emacs. The
|
|
<replaceable>number</replaceable> indicates the number of
|
|
<literal>pty</literal>s to create. If you need more than
|
|
<filename>GENERIC</filename> default of 16 simultaneous xterm
|
|
windows and/or remote logins, be sure to increase this number
|
|
accordingly, up to a maximum of 256.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device snp
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para>Snoop device. This pseudo-device allows one terminal
|
|
session to watch another using the
|
|
&man.watch.8; command. Note that implementation of this
|
|
capability has important security and privacy implications. The
|
|
<replaceable>number</replaceable> after snp is the total number
|
|
of simultaneous snoop sessions. Optional.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device vn</literal></term>
|
|
|
|
<listitem>
|
|
<para>Vnode driver. Allows a file to be treated as a device after
|
|
being set up with the &man.vnconfig.8; command. This
|
|
driver can be useful for manipulating floppy disk images and
|
|
using a file as a swap device (e.g. an MS Windows swap file).
|
|
Optional.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device ccd
|
|
<replaceable>number</replaceable></literal></term>
|
|
|
|
<listitem>
|
|
<para>Concatenated disks. This pseudo-device allows you to
|
|
concatenate multiple disk partitions into one large
|
|
“meta”-disk. The <replaceable>number</replaceable>
|
|
after ccd is the total number of concatenated disks (not total
|
|
number of disks that can be concatenated) that can be created.
|
|
(See &man.ccd.4; and &man.ccdconfig.8; man pages
|
|
for more details.) Optional.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Joystick, PC Speaker, Miscellaneous</title>
|
|
|
|
<para>This section describes some miscellaneous hardware devices
|
|
supported by FreeBSD. Note that none of these lines are included
|
|
in the GENERIC kernel, you will have to copy them from this
|
|
handbook or the LINT kernel (which contains support for
|
|
<emphasis>every</emphasis> device):</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>device joy0 at isa? port "IO_GAME"</literal></term>
|
|
|
|
<listitem>
|
|
<para>PC joystick device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>pseudo-device speaker</literal></term>
|
|
|
|
<listitem>
|
|
<para>Supports IBM BASIC-style noises through the PC speaker.
|
|
Some fun programs which use this are
|
|
<filename>/usr/sbin/spkrtest</filename>, which is a shell script
|
|
that plays some simple songs, and
|
|
<filename>/usr/games/piano</filename> which lets you play songs
|
|
using the keyboard as a simple piano (this file only exists if
|
|
you have installed the <literal>games</literal> package). Also,
|
|
the excellent text role-playing game
|
|
<application>NetHack</application> (in the ports collection) can
|
|
be configured to use this device to play songs when you play
|
|
musical instruments in the game.</para>
|
|
|
|
<para>See also the <link
|
|
linkend="kernelconfig-pcaudio">pca0</link> device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="kernelconfig-nodes">
|
|
<title>Making Device Nodes</title>
|
|
|
|
<para>Almost every device in the kernel has a corresponding
|
|
“node” entry in the <filename>/dev</filename> directory.
|
|
These nodes look like regular files, but are actually special entries
|
|
into the kernel which programs use to access the device. The shell
|
|
script <filename>/dev/MAKEDEV</filename>, which is executed when you
|
|
first install the operating system, creates nearly all of the device
|
|
nodes supported. However, it does not create <emphasis>all</emphasis>
|
|
of them, so when you add support for a new device, it pays to make sure
|
|
that the appropriate entries are in this directory, and if not, add
|
|
them. Here is a simple example:</para>
|
|
|
|
<para>Suppose you add the IDE CD-ROM support to the kernel. The line to
|
|
add is:</para>
|
|
|
|
<programlisting>
|
|
controller wcd0</programlisting>
|
|
|
|
<para>This means that you should look for some entries that start with
|
|
<filename>wcd0</filename> in the <filename>/dev</filename> directory,
|
|
possibly followed by a letter, such as <literal>c</literal>, or preceded
|
|
by the letter <literal>r</literal>, which means a “raw”
|
|
device. It turns out that those files are not there, so I must change
|
|
to the <filename>/dev</filename> directory and type:</para>
|
|
|
|
<screen>&prompt.root; <userinput>sh MAKEDEV wcd0</userinput></screen>
|
|
|
|
<para>When this script finishes, you will find that there are now
|
|
<filename>wcd0c</filename> and <filename>rwcd0c</filename> entries in
|
|
<filename>/dev</filename> so you know that it executed correctly.</para>
|
|
|
|
<para>For sound cards, the command:
|
|
|
|
<screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen>
|
|
|
|
creates the appropriate entries.</para>
|
|
|
|
<note>
|
|
<para>When creating device nodes for devices such as sound cards, if
|
|
other people have access to your machine, it may be desirable to
|
|
protect the devices from outside access by adding them to the
|
|
<filename>/etc/fbtab</filename> file. See <command>man
|
|
fbtab</command> for more information.</para>
|
|
</note>
|
|
|
|
<para>Follow this simple procedure for any other
|
|
non-<filename>GENERIC</filename> devices which do not have
|
|
entries.</para>
|
|
|
|
<note>
|
|
<para>All SCSI controllers use the same set of <filename>/dev</filename>
|
|
entries, so you do not need to create these. Also, network cards and
|
|
SLIP/PPP pseudo-devices do not have entries in
|
|
<filename>/dev</filename> at all, so you do not have to worry about
|
|
these either.</para>
|
|
</note>
|
|
</sect1>
|
|
|
|
<sect1 id="kernelconfig-trouble">
|
|
<title>If Something Goes Wrong</title>
|
|
|
|
<para>There are four categories of trouble that can occur when
|
|
building a custom kernel. They are:</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term>Config command fails</term>
|
|
|
|
<listitem>
|
|
<para>If the <command>config</command> command fails when you give
|
|
it your kernel description, you have probably made a simple error
|
|
somewhere. Fortunately, <command>config</command> will print the
|
|
line number that it had trouble with, so you can quickly skip to
|
|
it with <command>vi</command>. For example, if you see:
|
|
|
|
<screen>config: line 17: syntax error</screen>
|
|
|
|
you can skip to the problem in <command>vi</command> by typing
|
|
<command>17G</command> in command mode. Make sure the keyword is
|
|
typed correctly, by comparing it to the GENERIC kernel or another
|
|
reference.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>Make command fails</term>
|
|
|
|
<listitem>
|
|
<para>If the <command>make</command> command fails, it usually
|
|
signals an error in your kernel description, but not severe enough
|
|
for <command>config</command> to catch it. Again, look over your
|
|
configuration, and if you still cannot resolve the problem, send
|
|
mail to the &a.questions; with your kernel configuration, and it
|
|
should be diagnosed very quickly.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>Kernel will not boot<anchor id="kernelconfig-noboot"></term>
|
|
|
|
<listitem>
|
|
<para>If your new kernel does not boot, or fails to recognize your
|
|
devices, do not panic! Fortunately, BSD has an excellent mechanism
|
|
for recovering from incompatible kernels. Simply type the name of
|
|
the kernel you want to boot from (i.e.
|
|
<filename>kernel.old</filename>) at the FreeBSD boot prompt
|
|
instead of pressing return. When reconfiguring a kernel, it is
|
|
always a good idea to keep a kernel that is known to work on
|
|
hand.</para>
|
|
|
|
<para>After booting with a good kernel you can check over your
|
|
configuration file and try to build it again. One helpful
|
|
resource is the <filename>/var/log/messages</filename> file
|
|
which records, among other things, all of the kernel
|
|
messages from every successful boot. Also, the
|
|
&man.dmesg.8; command will print the kernel messages from the
|
|
current boot.</para>
|
|
|
|
<note>
|
|
<para>If you are having trouble building a kernel, make sure to
|
|
keep a <filename>GENERIC</filename>, or some other kernel that
|
|
is known to work on hand as a different name that will not get
|
|
erased on the next build. You cannot rely on
|
|
<filename>kernel.old</filename> because when installing a new
|
|
kernel, <filename>kernel.old</filename> is overwritten with the
|
|
last installed kernel which may be non-functional. Also, as
|
|
soon as possible, move the working kernel to the proper
|
|
<filename>kernel</filename> location or commands such as
|
|
&man.ps.1; will not work properly. The
|
|
proper command to “unlock” the kernel file that
|
|
<command>make</command> installs (in order to move another
|
|
kernel back permanently) is:</para>
|
|
|
|
<screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen>
|
|
|
|
<para>And, if you want to “lock” your new kernel into
|
|
place, or any file for that matter, so that it cannot be moved
|
|
or tampered with:</para>
|
|
|
|
<screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>Kernel works, but <command>ps</command> does not work any
|
|
more!</term>
|
|
|
|
<listitem>
|
|
<para>If you have installed a different version of the kernel from
|
|
the one that the system utilities have been built with, for
|
|
example, an experimental “4.0” kernel on a
|
|
3.1-RELEASE system, many system-status commands like &man.ps.1;
|
|
and &man.vmstat.8; will not work any more. You must recompile the
|
|
<filename>libkvm</filename> library as well as these utilities.
|
|
This is one reason it is not normally a good idea to use a
|
|
different version of the kernel from the rest of the operating
|
|
system.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<!--
|
|
Local Variables:
|
|
mode: sgml
|
|
sgml-declaration: "../chapter.decl"
|
|
sgml-indent-data: t
|
|
sgml-omittag: nil
|
|
sgml-always-quote-attributes: t
|
|
sgml-parent-document: ("../handbook.sgml" "part" "chapter")
|
|
End:
|
|
-->
|
|
|