<!-- $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/_hw_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>