diff options
Diffstat (limited to 'share/doc/handbook/kernelconfig.sgml')
-rw-r--r-- | share/doc/handbook/kernelconfig.sgml | 1285 |
1 files changed, 0 insertions, 1285 deletions
diff --git a/share/doc/handbook/kernelconfig.sgml b/share/doc/handbook/kernelconfig.sgml deleted file mode 100644 index 4310d28..0000000 --- a/share/doc/handbook/kernelconfig.sgml +++ /dev/null @@ -1,1285 +0,0 @@ -<!-- $Id: kernelconfig.sgml,v 1.27 1997/02/22 12:58:42 peter Exp $ --> -<!-- The FreeBSD Documentation Project --> -<!-- <!DOCTYPE linuxdoc PUBLIC '-//FreeBSD//DTD linuxdoc//EN'> --> - <chapt><heading>Configuring the FreeBSD Kernel<label id="kernelconfig"></heading> - - <p><em>Contributed by &a.jehamby;.<newline>6 October 1995.</em> - - 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. - - <sect><heading>Why build a custom kernel?</heading> - - <p>Building a custom kernel is one of the most important - rites of passage every Unix system administrator must - learn. This process, while time-consuming, will provide - many benefits to your FreeBSD system. Unlike the GENERIC - 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 <em>your</em> PC's hardware. This has a number of - benefits: - - <itemize> - - <item>It will take less time to boot because it does not - have to spend time probing for hardware which you - do not have. - - <item>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. - - <item>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 <em>not</em> present - in the GENERIC kernel. - - </itemize></p> - - <sect><heading>Building and Installing a Custom Kernel<label id="kernelconfig:building"></heading> - - <p>First, let us take a quick tour of the kernel build - directory. All directories mentioned will be relative to - the main <tt>/usr/src/sys</tt> directory, which is also - accessible through <tt>/sys</tt>. There are a number of - subdirectories here representing different parts of the - kernel, but the most important, for our purposes, are - <tt>i386/conf</tt>, where you will edit your custom - kernel configuration, and <tt>compile</tt>, 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 <tt>i386</tt> - directory deals with PC hardware only, while everything - outside the <tt>i386</tt> directory is common to all - platforms which FreeBSD could potentially be ported to. - - <quote><em/Note:/ If there is <em>not</em> a - <tt>/usr/src/sys</tt> directory on your system, then the - kernel source has not been been installed. Follow the - instructions for installing packages to add this package - to your system.</quote> - - Next, move to the <tt>i386/conf</tt> directory and copy - the GENERIC configuration file to the name you want to - give your kernel. For example: -<tscreen><verb> -# cd /usr/src/sys/i386/conf -# cp GENERIC MYKERNEL -</verb></tscreen> - 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 MYKERNEL for - the purpose of this example. - - <quote><em/Note:/ You must execute these and all of the - following commands under the root account or you will get - ``permission denied'' errors.</quote> - - Now, edit MYKERNEL with your favorite text editor. If - you are just starting out, the only editor available will - probably be <tt>vi</tt>, which is too complex to explain - here, but is covered well in many books in the <ref - id="bibliography" name="bibliography">. Feel free to change the - comment lines at the top to reflect your configuration or the - changes you have made to differentiate it from GENERIC. - - 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 GENERIC - configuration file might seem overwhelming to you, so - follow the descriptions in the <ref - id="kernelconfig:config" name="Configuration File"> - section slowly and carefully. - - <quote><em/Note:/ If you are trying to upgrade your kernel from an - older version of FreeBSD, you will probably have to get a new - version of <tt>config(8)</tt> from the same place you got the new - kernel sources. It is located in <tt>/usr/src/usr.sbin</tt>, so - you will need to download those sources as well. Re-build and install - it before running the next commands.</quote> - - When you are finished, type the following to compile and - install your kernel: -<tscreen><verb> -# /usr/sbin/config MYKERNEL -# cd ../../compile/MYKERNEL -# make depend -# make -# make install -</verb></tscreen> - The new kernel will be copied to the root directory as - <tt>/kernel</tt> and the old kernel will be moved to - <tt>/kernel.old</tt>. Now, shutdown the system and - reboot to use your kernel. In case something goes wrong, - there are some <ref id="kernelconfig:trouble" name= - "troubleshooting"> instructions at the end of this - document. Be sure to read the section which explains how - to recover in case your new kernel <ref - id="kernelconfig:noboot" name="does not boot">. - - <quote><em/Note:/ If you have added any new devices (such - as sound cards) you may have to add some <ref - id="kernelconfig:nodes" name="device nodes"> to your - <tt>/dev</tt> directory before you can use them.</quote> - - <sect><heading>The Configuration File<label id="kernelconfig:config"></heading> - - <p>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 <tt>#</tt> is considered a comment and ignored. - The following sections describe each keyword, generally in the - order they are listed in GENERIC, although some related - keywords have been grouped together in a single section (such - as Networking) even though they are actually scattered - throughout the GENERIC file. <label id="kernelconfig:options"> - An exhaustive list of options and more detailed explanations - of the device lines is present in the LINT configuration file, - located in the same directory as GENERIC. If you are in doubt - as to the purpose or necessity of a line, check first in LINT. - - <p>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 <tt>-D</tt> switch - for the <tt>CFLAGS</tt> line of the kernel Makefile. Naturally, - this caused a creeping optionism, with nobody really knowing - which option has been referenced in what files. - - <p>In the new scheme, every <tt>#ifdef</tt> that is intended to - be dependent upon an option gets this option out of an - <tt>opt_<em>foo</em>.h</tt> declaration file created in the - compile directory by <tt>config</tt>. The list of valid options - for <tt>config</tt> lives in two files: options that do not - depend on the architecture are listed in - <tt>/sys/conf/options</tt>, architecture-dependent ones - in <tt>/sys/<em>arch</em>/conf/options.<em>arch</em></tt>, - with <em>arch</em> being for example <tt>i386</tt>. - - <sect1><heading>Mandatory Keywords</heading> - - <p>These keywords are required in every kernel you build. - - <descrip> - - <tag>machine ``i386''</tag> - - <p>The first keyword is <tt>machine</tt>, which, - since FreeBSD only runs on Intel 386 and compatible - chips, is i386. - - <quote><em>Note:</em> that any keyword which - contains numbers used as text must be enclosed in - quotation marks, otherwise <tt>config</tt> gets - confused and thinks you mean the actual number - 386.</quote> - - <tag>cpu ``<em>cpu_type</em>''</tag> - - <p>The next keyword is <tt>cpu</tt>, which includes - support for each CPU supported by FreeBSD. The - possible values of <tt><em>cpu_type</em></tt> - include: - <itemize> - <item>I386_CPU - <item>I486_CPU - <item>I586_CPU - <item>I686_CPU - </itemize> - and multiple instances of the <tt>cpu</tt> line may - be present with different values of - <tt><em>cpu_type</em></tt> as are present in the - GENERIC kernel. For a custom kernel, it is best to - specify only the cpu you have. If, for example, - you have an Intel Pentium, use <tt>I586_CPU</tt> - for <tt><em>cpu_type</em></tt>. - - <tag>ident <em>machine_name</em></tag> - - <p>Next, we have <tt>ident</tt>, which is the - identification of the kernel. You should change - this from GENERIC to whatever you named your - kernel, in this example, MYKERNEL. The value you - put in <tt>ident</tt> 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 <tt>machine</tt> and <tt> cpu</tt>, enclose - your kernel's name in quotation marks if it - contains any numbers. - - Since this name is passed to the C compiler as a - <tt>-D</tt> switch, do not use names like <tt> - DEBUG</tt>, or something that could be confused - with another machine or CPU name, like <tt>vax</tt>. - - <tag>maxusers <em>number</em></tag> - - <p>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 - <tt>maxusers</tt> to at least four, especially if - you are using the X Window System or compiling software. The - reason is that the most important table set by - <tt>maxusers</tt> is the maximum number of - processes, which is set to <bf><tt>20 + 16 * - maxusers</tt></bf>, so if you set <tt>maxusers</tt> - to one, 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 <tt>man</tt> page will - start up nine processes to filter, decompress, and - view it. Setting <tt>maxusers</tt> to 4 will allow - you to have up to 84 simultaneous processes, which - should be enough for anyone. If, however, you see - the dreaded ``proc table full'' 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. - - <quote><em/Note:/ <tt>maxuser</tt> does - <em>not</em> 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 - <em>does</em> limit the number of simultaneous - <em>remote logins</em> is <ref - id="kernelconfig:ptys" name="pseudo-device pty - 16">.</quote> - - <tag>config <em>kernel_name</em> root on <em>root_device</em></tag> - - <p>This line specifies the location and name of the - kernel. Traditionally the kernel is called - <tt>vmunix</tt> but in FreeBSD, it is aptly named - <tt>kernel</tt>. You should always use - <tt>kernel</tt> for <em>kernel_name</em> 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 - <tt>wd0</tt> for systems with non-SCSI drives, or - <tt>sd0</tt> for systems with SCSI drives. - - </descrip> - - <sect1><heading>General Options</heading> - - <p>These lines provide kernel support for various - filesystems and other options. - - <descrip> - - <label id="kernelconfig:mathemu"> - - <tag>options MATH_EMULATE</tag> - - <p>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. - - <quote><em>Note:</em> The normal math co-processor - emulation routines that come with FreeBSD are - <em>not</em> 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 - <tt>GPL_MATH_EMULATE</tt> to use the superior GNU - math support, which is not included by default - for licensing reasons.</quote> - - <tag>options ``COMPAT_43''</tag> - - <p>Compatibility with 4.3BSD. Leave this in; some - programs will act strangely if you comment this - out. - - <tag>options BOUNCE_BUFFERS</tag> - - <p>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. - - <tag>options UCONSOLE</tag> - - <p>Allow users to grab the console, useful for X - Windows. For example, you can create a console - xterm by typing <tt>xterm -C</tt>, which will - display any `write', `talk', and other messages you - receive, as well as any console messages sent by the - kernel. - - <tag>options SYSVSHM</tag> - - <p>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. - - <tag>options SYSVSEM</tag> - - <p>Support for System V - semaphores. Less commonly used but only adds a few - hundred bytes to the kernel. - - <tag>options SYSVMSG</tag> - - <p>Support for System V - messages. Again, only adds a few hundred bytes to - the kernel. - - <quote><em/Note:/ The <tt>ipcs(1)</tt> command will - tell will list any processes using each of - these System V facilities.</quote> - - </descrip> - - <sect1><heading>Filesystem Options</heading> - - <p>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 - <tt>FFS</tt> if you boot from a hard drive, or - <tt>NFS</tt> 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 Loadable Kernel Module directory - <tt>/lkm</tt> the first time you mount a partition of - that type. - - <descrip> - - <tag>options FFS</tag> - - <p>The basic hard drive - filesystem; leave it in if you boot from the hard - disk. - - <tag>options NFS</tag> - - <p>Network Filesystem. Unless - you plan to mount partitions from a Unix file - server over Ethernet, you can comment this out. - - <tag>options MSDOSFS</tag> - - <p>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 <tt>mtools</tt> 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). - - <tag>options ``CD9660''</tag> - - <p>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. - - <tag>options PROCFS</tag> - - <p>Process filesystem. This - is a pretend filesystem mounted on /proc which - allows programs like <tt>ps(1)</tt> to give you - more information on what processes are running. - - <tag>options MFS</tag> - - <p>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 - <tt>/tmp</tt> directory, since many programs store - temporary data here. To mount an MFS RAM disk on - <tt>/tmp</tt>, add the following line to - <tt>/etc/fstab</tt> and then reboot or type - <tt>mount /tmp</tt>: -<tscreen><verb> -/dev/wd1s2b /tmp mfs rw 0 0 -</verb></tscreen> - - <quote><em/Note:/ Replace the <tt>/dev/wd1s2b</tt> - with the name of your swap partition, which will - be listed in your <tt>/etc/fstab</tt> as follows: -<tscreen><verb> -/dev/wd1s2b none swap sw 0 0 -</verb></tscreen> - </quote> - - <quote><em/Note:/ <!-- MFS is currently a bit - limited (for example, I noticed that two programs - can not access the <tt>/tmp</tt> device - simultaneously). As such, you may want to avoid - it for now. --> Also, the <tt>MFS</tt> filesystem - can <em>not</em> be dynamically loaded, so you - <em>must</em> compile it into your kernel if you - want to experiment with it.</quote> - - <tag>options QUOTA</tag> - - <p>Enable disk quotas. If you - have a public access system, and do not want users - to be able to overflow the <tt>/home</tt> - partition, you can establish disk quotas for each - user. Refer to the - <ref id="quotas" name="Disk Quotas"> - section for more information. - - </descrip> - - <sect1><heading>Basic Controllers and Devices</heading> - - <p>These sections describe the basic disk, tape, and - CD-ROM controllers supported by FreeBSD. There are - separate sections for <ref id="kernelconfig:scsi" - name="SCSI"> controllers and <ref - id="kernelconfig:network" name="network"> cards. - - <descrip> - - <tag>controller isa0</tag> - - <p>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. - - <tag>controller pci0</tag> - - <p>Include this if you have a - PCI motherboard. This enables auto-detection of - PCI cards and gatewaying from the PCI to the ISA - bus. - - <tag>controller fdc0</tag> - - <p>Floppy drive controller: - <tt>fd0</tt> is the ``A:'' floppy drive, and - <tt>fd1</tt> is the ``B:'' drive. <tt>ft0</tt> is - a QIC-80 tape drive attached to the floppy - controller. Comment out any lines corresponding to - devices you do not have. - - <quote><em/Note:/ QIC-80 tape support requires a - separate filter program called <tt>ft(8)</tt>, see - the manual page for details.</quote> - - <tag>controller wdc0</tag> - - <p>This is the primary IDE - controller. <tt>wd0</tt> and <tt>wd1</tt> are the - master and slave hard drive, respectively. - <tt>wdc1</tt> 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). - - <tag>device wcd0<label id="kernelconfig:atapi"></tag> - - <p>This device - provides IDE CD-ROM support. Be sure to leave - <tt>wdc0</tt> uncommented, and <tt/wdc1/ 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 <tt>options ATAPI</tt>. - - <tag>device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr</tag> - - <p><tt>npx0</tt> is the interface to the floating point math - unit in FreeBSD, either the hardware co-processor or the - software math emulator. It is <em/NOT/ optional. - - <tag>device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr</tag> - - <p>Wangtek and Archive - QIC-02/QIC-36 tape drive support - - <tag>Proprietary CD-ROM support</tag> - - <p>The following - drivers are for the so-called <em>proprietary</em> - CD-ROM drives. These drives have their own - controller card or might plug into a sound card - such as the SoundBlaster 16. They are <em>not</em> - IDE or SCSI. Most older single-speed and - double-speed CD-ROMs use these interfaces, while - newer quad-speeds are likely to be <ref - id="kernelconfig:atapi" name="IDE"> or <ref - id="kernelconfig:scsi" name="SCSI">. - - <descrip> - - <tag>device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr</tag> - - <p>Mitsumi CD-ROM (LU002, - LU005, FX001D). - - <tag>device scd0 at isa? port 0x230 bio</tag> - - <p>Sony CD-ROM (CDU31, CDU33A). - - <tag>controller matcd0 at isa? port ? bio</tag> - - <p>Matsushita/Panasonic CD-ROM (sold by Creative - Labs for SoundBlaster). - - </descrip> - - </descrip> - - <sect1><heading>SCSI Device Support<label id="kernelconfig:scsi"></heading> - - <p>This section describes the various SCSI controllers - and devices supported by FreeBSD. - - <descrip> - - <tag>SCSI Controllers</tag> - - <p>The next ten or so lines include support for - different kinds of SCSI controllers. Comment out - all except for the one(s) you have: - - <descrip> - - <tag>controller bt0 at isa? port ``IO_BT0'' bio irq ? vector btintr</tag> - - <p>Most Buslogic controllers - - <tag>controller uha0 at isa? port ``IO_UHA0'' bio irq ? drq 5 vector uhaintr</tag> - - <p>UltraStor 14F and 34F - - <tag>controller ahc0</tag> - - <p>Adaptec 274x/284x/294x - - <tag>controller ahb0 at isa? bio irq ? vector ahbintr</tag> - - <p>Adaptec 174x - - <tag>controller aha0 at isa? port ``IO_AHA0'' bio irq ? drq 5 vector ahaintr</tag> - - <p>Adaptec 154x - - <tag>controller aic0 at isa? port 0x340 bio irq 11 vector aicintr -</tag> - - <p>Adaptec 152x and sound cards using Adaptec AIC-6360 (slow!) - - <tag>controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr -</tag> - - <p>ProAudioSpectrum cards using NCR 5380 or Trantor T130 - - <tag>controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr</tag> - - <p>Seagate ST01/02 8 bit controller (slow!) - - <tag>controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr</tag> - - <p>Western Digital WD7000 controller - - <tag>controller ncr0</tag> - - <p>NCR 53C810, 53C815, 53C825, 53C860, 53C875 PCI SCSI controller - - </descrip> - - <tag>options ``SCSI_DELAY=15''</tag> - - <p>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. - - <tag>controller scbus0</tag> - - <p>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. - - <tag>device sd0</tag> - - <p>Support for SCSI hard - drives. - - <tag>device st0</tag> - - <p>Support for SCSI tape - drives. - - <tag>device cd0</tag> - - <p>Support for SCSI CD-ROM - drives. - - <p>Note that the number <bf>0</bf> 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. - - If you want to ``wire down'' specific target IDs to - particular devices, refer to the appropriate section - of the LINT kernel config file. - - </descrip> - - <sect1><heading>Console, Bus Mouse, and X Server Support</heading> - - <p>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. - - <descrip> - - <tag>device sc0 at isa? port ``IO_KBD' tty irq 1 vector scintr</tag> - - <p><tt>sc0</tt> is the default - console driver, which resembles an SCO console. - Since most full-screen programs access the console - through a terminal database library like - <em>termcap</em>, it should not matter much whether - you use this or <tt>vt0</tt>, the VT220 compatible - console driver. When you log in, set your TERM - variable to ``scoansi'' if full-screen programs - have trouble running under this console. - - <tag>device vt0 at isa? port ``IO_KBD'' tty irq 1 vector pcrint</tag> - - <p>This is a VT220-compatible - console driver, backwards compatible to VT100/102. - It works well on some laptops which have hardware - incompatibilities with <tt>sc0</tt>. Also, set - your TERM variable to ``vt100'' or ``vt220'' when - you log in. This driver might also prove useful - when connecting to a large number of different - machines over the network, where the <em>termcap</em> - or <em>terminfo</em> entries for the <tt>sc0</tt> - device are often not available -- ``vt100'' should be - available on virtually any platform. - - <descrip> - - <tag>options ``PCVT_FREEBSD=210''</tag> - - <p>Required - with the <tt>vt0</tt> console driver. - - <tag>options XSERVER</tag> - - <p>Only applicable with the <tt>vt0</tt> console driver. - This includes code - required to run the <tt>XFree86</tt> X Window - Server under the <tt>vt0</tt> console driver. - - </descrip> - - <tag>device mse0 at isa? port 0x23c tty irq 5 vector ms</tag> - - <p>Use this device if you have a Logitech or - ATI InPort bus mouse card. - - <quote><em/Note:/ If you have a serial mouse, - ignore these two lines, and instead, make sure - the appropriate <ref id="kernelconfig:serial" - name="serial"> port is enabled (probably - COM1).</quote> - - <tag>device psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 vector psmintr</tag> - - <p>Use this device if your - mouse plugs into the PS/2 mouse port. - - </descrip> - - <sect1><heading>Serial and Parallel Ports</heading> - - <p>Nearly all systems have these. If you are attaching a - printer to one of these ports, the <ref id="printing" - name="Printing"> section of the handbook is very - useful. If you are using modem, <ref id="dialup" - name="Dialup access"> provides extensive detail on - serial port configuration for use with such devices. - - <descrip> - - <tag>device sio0 at isa? port ``IO_COM1'' tty irq 4 vector siointr<label id="kernelconfig:serial"></tag> - - <p><tt>sio0</tt> - through <tt>sio3</tt> 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 <tt>sio(4)</tt> 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 <tt>0x*2e8</tt>, 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. - - 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. - - <tag>device lpt0 at isa? port? tty irq 7 vector lptintr</tag> - - <p><tt>lpt0</tt> through <tt>lpt2</tt> - 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. - - </descrip> - - <sect1><heading>Networking<label id="kernelconfig:network"></heading> - - <p>FreeBSD, as with Unix in general, places a - <em>big</em> 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. - - <descrip> - - <tag>options INET</tag> - 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. - - <tag>Ethernet cards</tag> - - <p>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): - - <descrip> - - <tag>device de0</tag> - - <p>Ethernet adapters based on Digital Equipment DC21040, - DC21041 or DC21140 chips - - <tag>device fxp0</tag> - - <p>Intel EtherExpress Pro/100B - - <tag>device vx0</tag> - - <p>3Com 3C590 and 3C595 (buggy) - - <tag>device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr</tag> - - <p>Cronyx/Sigma multiport - sync/async (with Cisco or PPP framing) - - <tag>device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr</tag> - - <p>Western Digital and SMC 80xx and 8216; Novell NE1000 - and NE2000; 3Com 3C503; HP PC Lan Plus (HP27247B and HP27252A) - - <tag>device el0 at isa? port 0x300 net irq 9 vector elintr</tag> - - <p>3Com 3C501 (slow!) - - <tag>device eg0 at isa? port 0x310 net irq 5 vector egintr</tag> - - <p>3Com 3C505 - - <tag>device ep0 at isa? port 0x300 net irq 10 vector epintr</tag> - - <p>3Com 3C509 (buggy) - - <tag>device fe0 at isa? port 0x240 net irq ? vector feintr</tag> - - <p>Fujitsu MB86960A/MB86965A Ethernet - - <tag>device fea0 at isa? net irq ? vector feaintr</tag> - - <p>DEC DEFEA EISA FDDI adapter - - <tag>device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr</tag> - - <p>AT&T StarLAN 10 and EN100; 3Com 3C507; - unknown NI5210 - - <tag>device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768 vector ixintr</tag> - - <p>Intel EtherExpress 16 - - <tag>device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr</tag> - - <p>Digital Equipment EtherWorks 2 and EtherWorks - 3 (DEPCA, DE100, DE101, DE200, DE201, DE202, - DE203, DE204, DE205, DE422) - - <tag>device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr</tag> - - <p>Lance/PCnet cards (Isolan, Novell NE2100, - NE32-VL) - - <tag>device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr</tag> - - <p>IBM/National Semiconductor PCMCIA ethernet - controller. - - <tag>device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr</tag> - - <p>3Com PCMCIA Etherlink III - - </descrip> - - <quote><em/Note:/ 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.</quote> - - <tag>pseudo-device loop</tag> - - <p><tt>loop</tt> is the - generic loopback device for TCP/IP. If you telnet - or FTP to <em>localhost</em> - (a.k.a. <tt>127.0.0.1</tt>) it will come back at - you through this pseudo-device. Mandatory. - - <tag>pseudo-device ether</tag> - - <p><tt>ether</tt> is only - needed if you have an Ethernet card and includes - generic Ethernet protocol code. - - <tag>pseudo-device sl <em>number</em></tag> - - <p><tt>sl</tt> 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 <em>number</em> after - <tt>sl</tt> specifies how many simultaneous SLIP - sessions to support. This handbook has more - information on setting up a SLIP <ref id="slipc" - name="client"> or <ref id="slips" name="server">. - - <tag>pseudo-device ppp <em>number</em></tag> - - <p><tt>ppp</tt> 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 <tt>tun</tt> and offers - more flexibility and features such as demand - dialing. If you still want to use this PPP driver, - read the <ref id="ppp" name="kernel-mode PPP"> - section of the handbook. As with the <tt>sl</tt> - device, <em>number</em> specifies how many - simultaneous PPP connections to support. - - <tag>pseudo-device tun <em>number</em></tag> - - <p><tt>tun</tt> 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 <tt>tun</tt> - specifies the number of simultaneous PPP sessions - to support. See the <ref id="userppp" - name="user-mode PPP"> section of the handbook for - more information. - - <tag>pseudo-device bpfilter <em>number</em></tag> - - <p>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 - <tt>tcpdump(1)</tt> program. Note that - implementation of this capability can seriously - compromise your overall network security. - The <em>number</em> 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. - - </descrip> - - <sect1><heading>Sound cards</heading> - - <p>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 - <em>every</em> device) as follows: - - <descrip> - - <tag>controller snd0</tag> - - <p>Generic sound driver code. - Required for all of the following sound cards - except <tt>pca</tt>. - - <tag>device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr</tag> - - <p>ProAudioSpectrum digital audio and MIDI. - - <tag>device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr</tag> - - <p>SoundBlaster digital audio. - - <quote><em/Note:/ If your SoundBlaster is on a - different IRQ (such as 5), change <tt>irq 7</tt> - to, for example, <tt>irq 5</tt> and remove the - <tt>conflicts</tt> keyword. Also, you must add - the line: <tt>options ``SBC_IRQ=5''</tt></quote> - - <tag>device sbxvi0 at isa? drq 5</tag> - - <p>SoundBlaster 16 digital 16-bit audio. - - <quote><em/Note:/ If your SB16 is on a different - 16-bit DMA channel (such as 6 or 7), change the - <tt>drq 5</tt> keyword appropriately, and then - add the line: <tt>options - "SB16_DMA=6"</tt></quote> - - <tag>device sbmidi0 at isa? port 0x330</tag> - - <p>SoundBlaster 16 MIDI interface. If you have a - SoundBlaster 16, you must include this line, or the - kernel will not compile. - - <tag>device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr</tag> - - <p>Gravis Ultrasound. - - <tag>device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr</tag> - - <p>Microsoft Sound System. - - <tag>device opl0 at isa? port 0x388 conflicts</tag> - - <p>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 - <tt>playmidi</tt> (in the ports collection). - - <tag>device mpu0 at isa? port 0x330 irq 6 drq 0</tag> - - <p>Roland MPU-401 stand-alone card. - - <tag>device uart0 at isa? port 0x330 irq 5 vector ``m6850intr''</tag> - - <p>Stand-alone 6850 UART for MIDI. - - <tag>device pca0 at isa? port ``IO_TIMER1'' tty<label id="kernelconfig:pcaudio"></tag> - - <p>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). - - </descrip> - - <quote><em/Note:/ There is some additional - documentation in - <tt>/usr/src/sys/i386/isa/sound/sound.doc</tt>. - Also, if you add any of these devices, be sure to - create the sound <ref id="kernelconfig:nodes" - name="device nodes">.</quote> - - <sect1><heading>Pseudo-devices</heading> - - <p>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 <ref - id="kernelconfig:network" name="network-related"> - pseudo-devices are in that section, while the remainder - are here. - - <descrip> - - <tag>pseudo-device gzip</tag> - - <p><tt>gzip</tt> allows you to run FreeBSD programs - that have been compressed with <tt>gzip</tt>. The - programs in <tt>/stand</tt> are compressed so it - is a good idea to have this option in your kernel.</p> - - <tag>pseudo-device log</tag> - - <p><tt>log</tt> is used for logging of kernel error - messages. Mandatory. - - - <tag>pseudo-device pty <em>number</em><label id="kernelconfig:ptys"></tag> - - <p><tt>pty</tt> is a ``pseudo-terminal'' or simulated - login port. It is used by incoming <bf>telnet</bf> - and <bf>rlogin</bf> sessions, xterm, and some other - applications such as emacs. The <em>number</em> - indicates the number of <tt>pty</tt>s to create. - If you need more than GENERIC default of 16 - simultaneous xterm windows and/or remote logins, be - sure to increase this number accordingly, up to a - maximum of 64. - - <tag>pseudo-device snp <em>number</em></tag> - - <p>Snoop device. This pseudo-device allows one - terminal session to watch another using the - <tt>watch(8)</tt> command. Note that - implementation of this capability has important - security and privacy implications. The - <em>number</em> after snp is the total number of - simultaneous snoop sessions. Optional. - - <tag>pseudo-device vn</tag> - - <p>Vnode driver. Allows a file to be treated as a - device after being set up with the - <tt>vnconfig(8)</tt> 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. - - <tag>pseudo-device ccd <em>number</em></tag> - - <p>Concatenated disks. This pseudo-device allows you to - concatenate multiple disk partitions into one large - ``meta''-disk. The <em>number</em> after ccd is the - total number of concatenated disks (not total number of - disks that can be concatenated) that can be created. - (See <tt>ccd(4)</tt> and <tt>ccdconfig(8)</tt> man pages - for more details.) Optional. - - </descrip> - - <sect1><heading>Joystick, PC Speaker, Miscellaneous</heading> - - <p>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 <em>every</em> device): - - <descrip> - - <tag>device joy0 at isa? port ``IO_GAME''</tag> - - <p>PC joystick device. - - <tag>pseudo-device speaker</tag> - - <p>Supports IBM BASIC-style noises through the PC - speaker. Some fun programs which use this are - <tt>/usr/sbin/spkrtest</tt>, which is a shell - script that plays some simple songs, and - <tt>/usr/games/piano</tt> which lets you play songs - using the keyboard as a simple piano (this file - only exists if you have installed the <em>games</em> - package). Also, the excellent text role-playing - game NetHack (in the ports collection) can be - configured to use this device to play songs when - you play musical instruments in the game. - - <p>See also the <ref id="kernelconfig:pcaudio" - name="pca0"> device. - - </descrip> - - <sect><heading>Making Device Nodes<label id="kernelconfig:nodes"></heading> - - <p>Almost every device in the kernel has a corresponding - ``node'' entry in the <tt>/dev</tt> 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 <tt>/dev/MAKEDEV</tt>, which is - executed when you first install the operating system, - creates nearly all of the device nodes supported. - However, it does not create <em>all</em> 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: - - Suppose you add the IDE CD-ROM support to the kernel. - The line to add is: -<tscreen><verb> -controller wcd0 -</verb></tscreen> - This means that you should look for some entries that - start with <tt>wcd0</tt> in the <tt>/dev</tt> directory, - possibly followed by a letter, such as `c', or preceded - by the letter 'r', which means a `raw' device. It turns - out that those files are not there, so I must change to - the <tt>/dev</tt> directory and type: -<tscreen><verb> -# sh MAKEDEV wcd0 -</verb></tscreen> - When this script finishes, you will find that there are - now <tt>wcd0c</tt> and <tt>rwcd0c</tt> entries in - <tt>/dev</tt> so you know that it executed correctly. - - For sound cards, the command: -<tscreen><verb> -# sh MAKEDEV snd0 -</verb></tscreen> - creates the appropriate entries. Note: 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 - <tt>/etc/fbtab</tt> file. See <tt>man fbtab</tt> for - more information. - - Follow this simple procedure for any other non-GENERIC - devices which do not have entries. - - <quote><em/Note:/ All SCSI controllers use the same set - of <tt>/dev</tt> entries, so you do not need to create - these. Also, network cards and SLIP/PPP pseudo-devices - do not have entries in <tt>/dev</tt> at all, so you do - not have to worry about these either.</quote> - -<sect><heading>If Something Goes Wrong<label id="kernelconfig:trouble"></heading> - - <p>There are four categories of trouble that can occur when - building a custom kernel. They are: - - <descrip> - - <tag>Config command fails</tag> - - <p>If the <tt>config</tt> - command fails when you give it your kernel - description, you have probably made a simple error - somewhere. Fortunately, <tt>config</tt> will print - the line number that it had trouble with, so you can - quickly skip to it with <tt>vi</tt>. For example, if - you see: -<tscreen><verb> -config: line 17: syntax error -</verb></tscreen> - you can skip to the problem in <tt>vi</tt> by typing - ``17G'' in command mode. Make sure the keyword is - typed correctly, by comparing it to the GENERIC - kernel or another reference. - - <tag>Make command fails</tag> - - <p>If the <tt>make</tt> - command fails, it usually signals an error in your - kernel description, but not severe enough for - <tt>config</tt> 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. - - <tag>Kernel will not boot<label id="kernelconfig:noboot"></tag> - - <p>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. ``kernel.old'') 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. - - After booting with a good kernel you can check over - your configuration file and try to build it again. - One helpful resource is the - <tt>/var/log/messages</tt> file which records, among - other things, all of the kernel messages from every - successful boot. Also, the <tt>dmesg(8)</tt> command - will print the kernel messages from the current boot. - - <quote><em/Note:/ If you are having trouble building - a kernel, make sure to keep a GENERIC, 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 <tt>kernel.old</tt> - because when installing a new kernel, - <tt>kernel.old</tt> is overwritten with the last - installed kernel which may be non-functional. - Also, as soon as possible, move the working kernel - to the proper ``kernel'' location or commands such - as <tt>ps(1)</tt> will not work properly. The - proper command to ``unlock'' the kernel file that - <tt>make</tt> installs (in order to move another - kernel back permanently) is: -<tscreen><verb> -# chflags noschg /kernel -</verb></tscreen> - 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: -<tscreen><verb> -# chflags schg /kernel -</verb></tscreen> - </quote> - - <tag>Kernel works, but <tt>ps</tt> does not work any more!</tag> - - <p>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 - ``2.2.0'' kernel on a 2.1.0-RELEASE system, many - system-status commands like <tt>ps(1)</tt> and - <tt>vmstat(8)</tt> will not work any more. You must - recompile the <tt>libkvm</tt> 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. - - </descrip> |