<!-- $Id: kernelconfig.sgml,v 1.3 1999-07-28 20:26:07 nik Exp $ -->
<!-- The FreeBSD Documentation Project -->

  <sect>
    <heading>Kernel Configuration<label id="kernelconfig"></heading>

    <sect1>
      <heading>
        I'd like to customize my kernel. Is it difficult?
        <label id="make-kernel">
      </heading>

      <p>Not at all! Check out the <url url="../handbook/kernelconfig.html"
      name="kernel config section of the Handbook">.

      <p><bf/NOTE:/ I recommend making a dated snapshot of your kernel
      in <tt/kernel.YYMMDD/ after you get it all working, that way if
      you do something dire the next time you play with your configuration
      you can boot that kernel instead of having to go all the way back
      to <tt/kernel.GENERIC/. This is particularly important if you're
      now booting off a controller that isn't supported in the GENERIC
      kernel (yes, personal experience).

    <sect1>
      <heading>
        My kernel compiles fail because <tt/&lowbar;hw&lowbar;float/ is missing.
      </heading>

      <p>Let me guess. You removed <htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?npx(4)" name="npx0"> from your
      kernel configuration file because you don't have a math co-processor,
      right? Wrong! :-)  The <tt/npx0/ is <bf/MANDATORY/. Even if you don't
      have a mathematic co-processor, you <bf/must/ include the <tt/npx0/
      device.

    <sect1>
      <heading>Interrupt conflicts with multi-port serial code.</heading>

      <p><bf/Q./ When I compile a kernel with multi-port serial code, it
      tells me that only the first port is probed and the rest skipped due to
      interrupt conflicts.  How do I fix this?

      <p><bf/A./ The problem here is that FreeBSD has code built-in to keep
      the kernel from getting trashed due to hardware or software
      conflicts.  The way to fix this is to leave out the IRQ settings
      on all but one port.  Here is a example:

      <verb>
        #
        # Multiport high-speed serial line - 16550 UARTS
        #
        device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
        device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
        device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
        device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
      </verb>

    <sect1>
      <heading>How do I enable support for QIC-40/80 drives?</heading>

      <p>You need to uncomment the following line in the generic config
      file (or add it to your config file), add a ``<tt/flags 0x1/''
      on the <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?fdc(4)"
      name="fdc"> line and recompile.

      <verb>
controller  fdc0  at isa? port "IO_FD1" bio irq 6 drq 2 flags 0x1 vector fdintr
disk        fd0   at fdc0 drive 0                       ^^^^^^^^^
disk        fd1   at fdc0 drive 1
#tape       ft0   at fdc0 drive 2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      </verb>

      <p>Next, you create a device called <tt>/dev/ft0</tt> by going into
      <tt>/dev</tt> and run the following command:

      <verb>
        sh ./MAKEDEV ft0
      </verb>

      <p>for the first device. <tt/ft1/ for a second one and so on.

      <p>You will have a device called <tt>/dev/ft0</tt>, which you can
      write to through a special program to manage it called
      ``<tt/ft/'' - see the man page on <htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?ft" name="ft">
      for further details.

      <p>Versions previous to <tt/-current/ also had some trouble dealing
      with bad tape media; if you have trouble where <tt/ft/ seems to
      go back and forth over the same spot, try grabbing the latest
      version of <tt/ft/ from <tt>/usr/src/sbin/ft</tt> in
      <tt/-current/ and try that.

  </sect>