home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Kernel-HOWTO < prev    next >
Text File  |  1999-06-10  |  55KB  |  1,651 lines

  1.   The Linux Kernel HOWTO
  2.   Brian Ward, bri@cs.uchicago.edu
  3.   v1.0, 5 June 1999
  4.  
  5.   This is a detailed guide to kernel configuration, compilation,
  6.   upgrades, and troubleshooting for ix86-based systems.
  7.   ______________________________________________________________________
  8.  
  9.   Table of Contents
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Read this first! (I mean it)
  70.      1.2 A word on style
  71.  
  72.   2. Important questions and their answers
  73.  
  74.      2.1 What does the kernel do, anyway?
  75.      2.2 Why would I want to upgrade my kernel?
  76.      2.3 What kind of hardware do the newer kernels support?
  77.      2.4 What version of gcc and libc do I need?
  78.      2.5 What's a loadable module?
  79.      2.6 How much disk space do I need?
  80.      2.7 How long does it take?
  81.  
  82.   3. How to actually configure the kernel
  83.  
  84.      3.1 Getting the source
  85.      3.2 Unpacking the source
  86.      3.3 Configuring the kernel
  87.         3.3.1 Kernel math emulation (Processor type and features)
  88.         3.3.2 Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices)
  89.         3.3.3 Networking support (General Setup)
  90.         3.3.4 System V IPC (General Setup)
  91.         3.3.5 Processor family (Processor type and features)
  92.         3.3.6 SCSI support
  93.         3.3.7 Network device support
  94.         3.3.8 Filesystems
  95.            3.3.8.1 But I don't know which filesystems I need!
  96.         3.3.9 Character devices
  97.         3.3.10 Sound
  98.         3.3.11 Other configuration options
  99.         3.3.12 Kernel hacking
  100.      3.4 Now what? (The Makefile)
  101.  
  102.   4. Compiling the kernel
  103.  
  104.      4.1 Cleaning and depending
  105.      4.2 Compile time
  106.      4.3 Other ``make''ables
  107.      4.4 Installing the kernel
  108.  
  109.   5. Patching the kernel
  110.  
  111.      5.1 Applying a patch
  112.      5.2 If something goes wrong
  113.      5.3 Getting rid of the .orig files
  114.      5.4 Other patches
  115.  
  116.   6. Additional packages
  117.  
  118.      6.1 kbd
  119.      6.2 util-linux
  120.      6.3 hdparm
  121.      6.4 gpm
  122.  
  123.   7. Some pitfalls
  124.  
  125.      7.1 make clean
  126.      7.2 Huge or slow kernels
  127.      7.3 The parallel port doesn't work/my printer doesn't work
  128.      7.4 Kernel doesn't compile
  129.      7.5 New version of the kernel doesn't seem to boot
  130.      7.6 You forgot to run LILO, or system doesn't boot at all
  131.      7.7 It says `warning: bdflush not running'
  132.      7.8 I can't get my IDE/ATAPI CD-ROM drive to work
  133.      7.9 It says weird things about obsolete routing requests
  134.      7.10 Firewalling not working in 1.2.0
  135.      7.11 ``Not a compressed kernel Image file''
  136.      7.12 Problems with console terminal after upgrade to 1.3.x
  137.      7.13 Can't seem to compile things after kernel upgrade
  138.      7.14 Increasing limits
  139.  
  140.   8. Note for upgrade to version 2.0.x, 2.2.x
  141.  
  142.   9. Modules
  143.  
  144.      9.1 Installing the module utilities
  145.      9.2 Modules distributed with the kernel
  146.  
  147.   10. Tips and tricks
  148.  
  149.      10.1 Redirecting output of the make or patch commands
  150.      10.2 Conditional kernel install
  151.      10.3 Kernel updates
  152.  
  153.   11. Other relevant HOWTOs that might be useful
  154.  
  155.   12. Misc
  156.  
  157.      12.1 Author
  158.      12.2 To do
  159.      12.3 Contributions
  160.      12.4 Copyright notice, License, and all that stuff
  161.  
  162.  
  163.   ______________________________________________________________________
  164.  
  165.   1.  Introduction
  166.  
  167.  
  168.   Should you read this document? Well, see if you've got any of the
  169.   following symptoms:
  170.  
  171.  
  172.  
  173.   ╖  ``Arg! This wizzo-46.5.6 package says it needs kernel release
  174.      2.8.193 and I still only have release 1.0.9!''
  175.  
  176.   ╖  There's a device driver in one of the newer kernels that you just
  177.      gotta have
  178.  
  179.   ╖  You really have no idea at all how to compile a kernel
  180.  
  181.   ╖  ``Is this stuff in the README really the whole story?''
  182.  
  183.   ╖  You came, you tried, it didn't work
  184.  
  185.   ╖  You need something to give to people who insist on asking you to
  186.      install their kernels for them
  187.  
  188.  
  189.   1.1.  Read this first! (I mean it)
  190.  
  191.   Some of the examples in this document assume that you have GNU tar,
  192.   find, and xargs. These are quite standard; this should not cause
  193.   problems. It is also assumed that you know your system's filesystem
  194.   structure; if you don't, it is critical that you keep a written copy
  195.   of the mount command's output during normal system operation (or a
  196.   listing of /etc/fstab, if you can read it). This information is
  197.   important, and does not change unless you repartition your disk, add a
  198.   new one, reinstall your system, or something similar.
  199.   The latest ``production'' kernel version at the time of this writing
  200.   was 2.2.9, meaning that the references and examples correspond to that
  201.   release. Even though I try to make this document as version-
  202.   independent as possible, the kernel is constantly under development,
  203.   so if you get a newer release, it will inevitably have some
  204.   differences. Again, this should not cause major problems, but it may
  205.   create some confusion.
  206.  
  207.  
  208.   There are two versions of the linux kernel source, ``production'' and
  209.   ``development.'' Production releases are the even-minor-numbered
  210.   releases; 1.2.x was production, 2.0.x is production, as well as 2.2.x.
  211.   These kernels are considered to be the most stable, bug-free versions
  212.   available at the time of release. The development kernels (2.1.x,
  213.   2.3.x, etc) are meant as testing kernels, for people willing to test
  214.   out new and possibly very buggy kernels. You have been warned.
  215.  
  216.  
  217.  
  218.   1.2.  A word on style
  219.  
  220.   Text that looks like this is either something that appears on your
  221.   screen, a filename, or something that can be directly typed in, such
  222.   as a command, or options to a command (if you're looking at a plain-
  223.   text file, it doesn't look any different). Commands and other input
  224.   are frequently quoted (with ` '), which causes the following classic
  225.   punctuation problem: if such an item appears at the end of a sentence
  226.   in quotes, people often type a `.' along with the command, because the
  227.   American quoting style says to put the period inside of the quotation
  228.   marks. Even though common sense (and unfortunately, this assumes that
  229.   the one with the ``common sense'' is used to the so-called American
  230.   style of quotation) should tell one to strip off the punctuation
  231.   first, many people simply do not remember, so I will place it outside
  232.   the quotation marks in such cases. In other words, when indicating
  233.   that you should type ``make config'' I would write `make config', not
  234.   `make config.'
  235.  
  236.  
  237.  
  238.   2.  Important questions and their answers
  239.  
  240.  
  241.  
  242.   2.1.  What does the kernel do, anyway?
  243.  
  244.  
  245.   The Unix kernel acts as a mediator for your programs and your
  246.   hardware.  First, it does (or arranges for) the memory management for
  247.   all of the running programs (processes), and makes sure that they all
  248.   get a fair (or unfair, if you please) share of the processor's cycles.
  249.   In addition, it provides a nice, fairly portable interface for
  250.   programs to talk to your hardware.
  251.  
  252.  
  253.   There is certainly more to the kernel's operation than this, but these
  254.   basic functions are the most important to know.
  255.  
  256.  
  257.  
  258.   2.2.  Why would I want to upgrade my kernel?
  259.  
  260.  
  261.   Newer kernels generally offer the ability to talk to more types of
  262.   hardware (that is, they have more device drivers), they can have
  263.   better process management, they can run faster than the older
  264.   versions, they could be more stable than the older versions, and they
  265.   fix silly bugs in the older versions. Most people upgrade kernels
  266.   because they want the device drivers and the bug fixes.
  267.  
  268.  
  269.  
  270.   2.3.  What kind of hardware do the newer kernels support?
  271.  
  272.  
  273.   See the Hardware-HOWTO. Alternatively, you can look at the `config.in'
  274.   file in the linux source, or just find out when you try `make config'.
  275.   This shows you all hardware supported by the standard kernel
  276.   distribution, but not everything that linux supports; many common
  277.   device drivers (such as the PCMCIA drivers and some tape drivers) are
  278.   loadable modules maintained and distributed separately.
  279.  
  280.  
  281.  
  282.   2.4.  What version of gcc and libc do I need?
  283.  
  284.  
  285.   Linus recommends a version of gcc in the README file included with the
  286.   linux source. If you don't have this version, the documentation in the
  287.   recommended version of gcc should tell you if you need to upgrade your
  288.   libc.  This is not a difficult procedure, but it is important to
  289.   follow the instructions.
  290.  
  291.  
  292.  
  293.   2.5.  What's a loadable module?
  294.  
  295.  
  296.   These are pieces of kernel code which are not linked (included)
  297.   directly in the kernel. One compiles them separately, and can insert
  298.   and remove them into the running kernel at almost any time. Due to its
  299.   flexibility, this is now the preferred way to code certain kernel
  300.   features. Many popular device drivers, such as the PCMCIA drivers and
  301.   the QIC-80/40 tape driver, are loadable modules.
  302.  
  303.  
  304.  
  305.   2.6.  How much disk space do I need?
  306.  
  307.  
  308.   It depends on your particular system configuration. First, the
  309.   compressed linux source is nearly 14 megabytes large at version 2.2.9.
  310.   Many sites keep this even after unpacking.  Uncompressed and built
  311.   with a moderate configuration, it takes up another 67 MB.
  312.  
  313.  
  314.  
  315.   2.7.  How long does it take?
  316.  
  317.   With newer machines, the compilation takes dramatically less time than
  318.   older ones; an AMD K6-2/300 with a fast disk can do a 2.2.x kernel in
  319.   about four minutes. As for old Pentiums, 486s, and 386s, if you plan
  320.   to compile one, be prepared to wait, possibly hours, days..
  321.  
  322.   If this troubles you, and you happen to have a faster machine around
  323.   to compile on, you can build on the fast machines (assuming you give
  324.   it the right parameters, that your ulilities are up-to-date, and so
  325.   on), and then transfer the kernel image to the slower machine.
  326.  
  327.  
  328.  
  329.  
  330.  
  331.   3.  How to actually configure the kernel
  332.  
  333.  
  334.  
  335.   3.1.  Getting the source
  336.  
  337.  
  338.   You can obtain the source via anonymous ftp from ftp.kernel.org in
  339.   /pub/linux/kernel/vx.y, where x.y is the version (eg 2.2), and as
  340.   mentioned before, the ones that end with an odd number are development
  341.   releases and may be unstable.  It is typically labelled linux-
  342.   x.y.z.tar.gz, where x.y.z is the version number. The sites also
  343.   typically carry ones with a suffix of .bz2, which have been compressed
  344.   with bzip2 (these files will be smaller and take less time to
  345.   transfer).
  346.  
  347.   It's best to use ftp.xx.kernel.org where xx is your country code;
  348.   examples being ftp.at.kernel.org for Austria, and ftp.us.kernel.org
  349.   for the United States.
  350.  
  351.  
  352.  
  353.   3.2.  Unpacking the source
  354.  
  355.  
  356.   Log in as or su to `root', and cd to /usr/src.  If you installed
  357.   kernel source when you first installed linux (as most do), there will
  358.   already be a directory called `linux' there, which contains the entire
  359.   old source tree.  If you have the disk space and you want to play it
  360.   safe, preserve that directory. A good idea is to figure out what
  361.   version your system runs now and rename the directory accordingly. The
  362.   command `uname -r' prints the current kernel version.  Therefore, if
  363.   `uname -r' said `1.0.9', you would rename (with `mv') `linux' to
  364.   `linux-1.0.9'.  If you feel mildly reckless, just wipe out the entire
  365.   directory. In any case, make certain there is no `linux' directory in
  366.   /usr/src before unpacking the full source code.
  367.  
  368.  
  369.   Now, in /usr/src, unpack the source with `tar zxpvf linux-
  370.   x.y.z.tar.gz' (if you've just got a .tar  file with no .gz at the end,
  371.   `tar xpvf linux-x.y.z.tar' works.).  The contents of the source will
  372.   fly by. When finished, there will be a new `linux' directory in
  373.   /usr/src. cd to linux and look over the README  file.  There will be a
  374.   section with the label `INSTALLING the kernel'.  Carry out the
  375.   instructions when appropriate -- symbolic links that should be in
  376.   place, removal of stale .o files, etc.
  377.  
  378.   If you have a .bz2 file and the bzip2 program (read about it at
  379.   http://www.muraroa.demon.co.uk/), do this:
  380.  
  381.  
  382.        bz2cat linux-x.y.z.tar.bz2 | tar xvf -
  383.  
  384.  
  385.  
  386.  
  387.   3.3.  Configuring the kernel
  388.  
  389.  
  390.   Note: Some of this is reiteration/clarification of a similar section
  391.   in Linus' README file.
  392.  
  393.  
  394.   The command `make config' while in /usr/src/linux starts a configure
  395.   script which asks you many questions. It requires bash, so verify that
  396.   bash is /bin/bash, /bin/sh, or $BASH.
  397.   However, there are some much more pleasant alternatives to `make
  398.   config' and you may very well find them easier and more comfortable to
  399.   use.  `make menuconfig' is probably the most widely-used. Whatever you
  400.   choose, it's best to get familiar with the interface because you may
  401.   find yourself back at it sooner than you think.  For those ``running
  402.   X,'' you can try `make xconfig' if you have Tk installed (`click-o-
  403.   rama' - Nat). `make menuconfig' is for those who have (n)curses and
  404.   would prefer a text-based menu. These interfaces have a rather clear
  405.   advantage: If you goof up and make a wrong choice during
  406.   configuration, it is simple to go back and fix it.
  407.  
  408.  
  409.   The configuration options will appear in hierarchies with `make
  410.   menuconfig' and `make xconfig'.
  411.  
  412.  
  413.   You are ready to answer the questions, usually with `y' (yes) or `n'
  414.   (no). Device drivers typically have an `m' option.  This means
  415.   ``module,'' meaning that the system will compile it, but not directly
  416.   into the kernel, but as a loadable module. A more comical way to
  417.   describe it is as ``maybe.'' Some of the more obvious and non-critical
  418.   options are not described here; see the section ``Other configuration
  419.   options'' for short descriptions of a few others.  With `make
  420.   menuconfig', the space bar toggles the selection.
  421.  
  422.  
  423.   In 2.0.x and later, there is a `?' option, which provides a brief
  424.   description of the configuration parameter. That information is likely
  425.   to be the most up-to-date. Here are a listing of some of the important
  426.   features, which hierarchy they are in, and brief description.
  427.  
  428.  
  429.  
  430.   3.3.1.  Kernel math emulation (Processor type and features)
  431.  
  432.   If you don't have a math coprocessor (you have a bare 386 or 486SX),
  433.   you must say `y' to this. If you do have a coprocessor and you still
  434.   say `y', don't worry too much -- the coprocessor is still used and the
  435.   emulation ignored. For any halfway modern machine, the answer will be
  436.   no, but don't worry if you say yes accidentally; if not needed, it is
  437.   not used.
  438.  
  439.  
  440.  
  441.   3.3.2.  Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block
  442.   Devices)
  443.  
  444.  
  445.   You probably need to support this; it means that the kernel will
  446.   support standard PC hard disks, which most people have. This driver
  447.   does not include SCSI drives; they come later in the configuration.
  448.  
  449.   You will then be asked about the ``old disk-only'' and ``new IDE''
  450.   drivers.  You want to choose one of them; the main difference is that
  451.   the old driver only supports two disks on a single interface, and the
  452.   new one supports a secondary interface and IDE/ATAPI cdrom drives. The
  453.   new driver is 4k larger than the old one and is also supposedly
  454.   ``improved,'' meaning that aside from containing a different number of
  455.   bugs, it might improve your disk performance, especially if you have
  456.   newer (EIDE-type) hardware.
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.   3.3.3.  Networking support (General Setup)
  464.  
  465.  
  466.   In principle, you would only say `y' if your machine is on a network
  467.   such as the internet, or you want to use SLIP, PPP, term, etc to dial
  468.   up for internet access. However, as many packages (such as the X
  469.   window system) require networking support even if your machine does
  470.   not live on a real network, you should say `y'. Later on, you will be
  471.   asked if you want to support TCP/IP networking; again, say `y' here if
  472.   you are not absolutely sure.
  473.  
  474.  
  475.  
  476.   3.3.4.  System V IPC (General Setup)
  477.  
  478.  
  479.   One of the best definitions of IPC (Interprocess Communication) is in
  480.   the Perl book's glossary. Not surprisingly, some Perl programmers
  481.   employ it to let processes talk to each other, as well as many other
  482.   packages (DOOM, most notably), so it is not a good idea to say n
  483.   unless you know exactly what you are doing.
  484.  
  485.  
  486.  
  487.   3.3.5.  Processor family (Processor type and features)
  488.  
  489.   (in older kernels: Use -m486 flag for 486-specific optimizations)
  490.  
  491.  
  492.   Traditionally, this compiled in certain optimizations for a particular
  493.   processor; the kernels ran fine on other chips, but the kernel was
  494.   perhaps a bit larger. In newer kernels, however, this is no longer
  495.   true, so you should enter the processor for which you are compiling
  496.   the kernel. A ``386'' kernel will work on all machines.
  497.  
  498.  
  499.  
  500.   3.3.6.  SCSI support
  501.  
  502.  
  503.   If you have SCSI devices, say `y'. You will be prompted for further
  504.   information, such as support for CD-ROM, disks, and what kind of SCSI
  505.   adapter you have. See the SCSI-HOWTO for greater detail.
  506.  
  507.  
  508.  
  509.   3.3.7.  Network device support
  510.  
  511.  
  512.   If you have a network card, or you would like to use SLIP, PPP, or a
  513.   parallel port adapter for connecting to the Internet, say `y'. The
  514.   config script will prompt for which kind of card you have, and which
  515.   protocol to use.
  516.  
  517.  
  518.  
  519.   3.3.8.  Filesystems
  520.  
  521.  
  522.   The configure script then asks if you wish to support the following
  523.   filesystems:
  524.  
  525.  
  526.   Standard (minix) - Newer distributions don't create minix filesystems,
  527.   and many people don't use it, but it may still be a good idea to
  528.   configure this one. Some ``rescue disk'' programs use it, and still
  529.   more floppies may have a minix filesystem, since the minix filesystem
  530.   is less painful to use on a floppy.
  531.  
  532.  
  533.   Second extended - This is the standard Linux filesystem. You almost
  534.   definitely have one of these, and need to say `y'.
  535.  
  536.  
  537.   msdos - If you want to use your MS-DOS hard disk partitions, or mount
  538.   MS-DOS formatted floppy disks, say `y'.
  539.  
  540.  
  541.   There are various other foreign operating system filesystem types
  542.   available.
  543.  
  544.  
  545.   /proc - (idea from Bell Labs, I guess). One doesn't make a proc
  546.   filesystem on a disk; this is a filesystem interface to the kernel and
  547.   processes. Many process listers (such as `ps') use it. Try `cat
  548.   /proc/meminfo' or `cat /proc/devices' sometime.  Some shells (rc, in
  549.   particular) use /proc/self/fd  (known as /dev/fd on other systems) for
  550.   I/O. You should almost certainly say `y' to this; many important linux
  551.   tools depend on it.
  552.  
  553.  
  554.   NFS - If your machine lives on a network and you want to use
  555.   filesystems which reside on other systems with NFS, say `y'.
  556.  
  557.  
  558.   ISO9660 - Found on most CD-ROMs. If you have a CD-ROM drive and you
  559.   wish to use it under Linux, say `y'.
  560.  
  561.  
  562.  
  563.   3.3.8.1.  But I don't know which filesystems I need!
  564.  
  565.  
  566.   Ok, type `mount'. The output will look something like this:
  567.  
  568.  
  569.  
  570.  
  571.            blah# mount
  572.            /dev/hda1 on / type ext2 (defaults)
  573.            /dev/hda3 on /usr type ext2 (defaults)
  574.            none on /proc type proc (defaults)
  575.            /dev/fd0 on /mnt type msdos (defaults)
  576.  
  577.  
  578.  
  579.  
  580.   Look at each line; the word next to `type' is the filesystem type. In
  581.   this example, my /  and /usr filesystems are second extended, I'm
  582.   using /proc, and there's a floppy disk mounted using the msdos (bleah)
  583.   filesystem.
  584.  
  585.   You can try `cat /proc/filesystems' if you have /proc currently
  586.   enabled; it will list your current kernel's filesystems.
  587.  
  588.   The configuration of rarely-used, non-critical filesystems can cause
  589.   kernel bloat; see the section on modules for a way to avoid this and
  590.   the ``Pitfalls'' section on why a bloated kernel is undesirable.
  591.  
  592.  
  593.  
  594.  
  595.   3.3.9.  Character devices
  596.  
  597.  
  598.   Here, you enable the drivers for your printer (parallel printer, that
  599.   is), busmouse, PS/2 mouse (many notebooks use the PS/2 mouse protocol
  600.   for their built-in trackballs), some tape drives, and other such
  601.   ``character'' devices. Say `y' when appropriate.
  602.  
  603.  
  604.   Note: gpm is a program which allows the use of the mouse outside of
  605.   the X window system for cut and paste between virtual consoles. It's
  606.   fairly nice if you have a serial mouse, because it coexists well with
  607.   X, but you need to do special tricks for others.
  608.  
  609.  
  610.  
  611.   3.3.10.  Sound
  612.  
  613.  
  614.   If you feel a great desire to hear biff bark, say `y', and you can
  615.   tell the configuration program all about your sound board. (A note on
  616.   sound card configuration: when it asks you if you want to install the
  617.   full version of the driver, you can say `n' and save some kernel
  618.   memory by picking only the features which you deem necessary.)
  619.  
  620.  
  621.   If you are serious about sound card support, have a look at both the
  622.   free drivers at http://www.linux.org.uk/OSS/ and the commercial Open
  623.   Sound System at http://www.opensound.com/.
  624.  
  625.  
  626.  
  627.   3.3.11.  Other configuration options
  628.  
  629.   Not all of the configuration options are listed here because they
  630.   change too often or fairly self-evident (for instance, 3Com 3C509
  631.   support to compile the device drive for this particular ethernet
  632.   card).  There exists a fairly comprehensive list of all the options
  633.   (plus a way to place them into the Configure script) in an effort
  634.   started and maintained by Axel Boldt (boldt@math.ucsb.edu) and it's
  635.   the online help. It's also available as one big file at the
  636.   Documentation/Configure.help in your Linux kernel source tree as of
  637.   version 2.0.
  638.  
  639.  
  640.  
  641.   3.3.12.  Kernel hacking
  642.  
  643.  
  644.   >From Linus' README:
  645.  
  646.   the ``kernel hacking'' configuration details usually result in a
  647.   bigger or slower kernel (or both), and can even make the kernel less
  648.   stable by configuring some routines to actively try to break bad code
  649.   to find kernel problems (kmalloc()).  Thus you should probably answer
  650.   `n' to the questions for a ``production'' kernel.
  651.  
  652.  
  653.  
  654.   3.4.  Now what? (The Makefile)
  655.  
  656.  
  657.   After you finish configuration, a message tells you that your kernel
  658.   has been configured, and to ``check the top-level Makefile for
  659.   additional configuration,'' etc.
  660.  
  661.   So, look at the Makefile. You probably will not need to change it, but
  662.   it never hurts to look. You can also change its options with the
  663.   `rdev' command once the new kernel is in place. If you're feel lost
  664.   when you look at the file, then don't worry about it.
  665.  
  666.  
  667.  
  668.   4.  Compiling the kernel
  669.  
  670.  
  671.  
  672.   4.1.  Cleaning and depending
  673.  
  674.  
  675.   When the configure script ends, it also tells you to `make dep' and
  676.   (possibly) `clean'.  So, do the `make dep'. This insures that all of
  677.   the dependencies, such the include files, are in place. It does not
  678.   take long, unless your computer is fairly slow to begin with.  For
  679.   older versions of the kernel, when finished, you should do a `make
  680.   clean'.  This removes all of the object files and some other things
  681.   that an old version leaves behind. In any case, do not forget this
  682.   step before attempting to recompile a kernel.
  683.  
  684.  
  685.  
  686.   4.2.  Compile time
  687.  
  688.  
  689.   After depending and cleaning, you may now `make bzImage' or `make
  690.   bzdisk' (this is the part that takes a long time.).  `make bzImage'
  691.   will compile the kernel, and leave a file in arch/i386/boot called
  692.   `bzImage' (among other things). This is the new compressed kernel.
  693.   `make bzdisk' does the same thing, but also places the new bzImage on
  694.   a floppy disk which you hopefully put in drive ``A:''.  `bzdisk' is
  695.   fairly handy for testing new kernels; if it bombs (or just doesn't
  696.   work right), just remove the floppy and boot with your old kernel. It
  697.   can also be a handy way to boot if you accidentally remove your kernel
  698.   (or something equally as dreadful). You can also use it to install new
  699.   systems when you just dump the contents of one disk onto the other
  700.   (``all this and more! NOW how much would you pay?'').
  701.  
  702.  
  703.   All even halfway reasonably recent kernels are compressed, hence the
  704.   `bz' in front of the names. A compressed kernel automatically
  705.   decompresses itself when executed.
  706.  
  707.   In older kernels, you don't have the option to build a bzImage; it was
  708.   simply a zImage. That option is at the moment still available,
  709.   however, given the code size of newer kernels, it is now more or less
  710.   mandatory to build a bzImage because the older methods can't handle a
  711.   kernel that's just too large.
  712.  
  713.  
  714.  
  715.   4.3.  Other ``make''ables
  716.  
  717.  
  718.   `make mrproper' will do a more extensive `clean'ing.  It is sometimes
  719.   necessary; you may wish to do it at every patch. `make mrproper' will
  720.   also delete your configuration file, so you might want to make a
  721.   backup of it (.config) if you see it as valuable.
  722.  
  723.  
  724.   `make oldconfig' will attempt to configure the kernel from an old
  725.   configuration file; it will run through the `make config' process for
  726.   you. If you haven't ever compiled a kernel before or don't have an old
  727.   config file, then you probably shouldn't do this, as you will most
  728.   likely want to change the default configuration.
  729.  
  730.  
  731.   See the section on modules for a description of `make modules'.
  732.  
  733.  
  734.  
  735.   4.4.  Installing the kernel
  736.  
  737.   After you have a new kernel that seems to work the way you want it to,
  738.   it's time to install it. Most people use LILO (Linux Loader) for this.
  739.   `make bzlilo' will install the kernel, run LILO on it, and get you all
  740.   ready to boot, BUT ONLY if lilo is configured in the following way on
  741.   your system: kernel is /vmlinuz, lilo is in /sbin, and your lilo
  742.   config (/etc/lilo.conf) agrees with this.
  743.  
  744.  
  745.   Otherwise, you need to use LILO directly. It's a fairly easy package
  746.   to install and work with, but it has a tendency to confuse people with
  747.   the configuration file.  Look at the config file (either
  748.   /etc/lilo/config for older versions or /etc/lilo.conf for new
  749.   versions), and see what the current setup is. The config file looks
  750.   like this:
  751.  
  752.  
  753.  
  754.       image = /vmlinuz
  755.           label = Linux
  756.           root = /dev/hda1
  757.           ...
  758.  
  759.  
  760.  
  761.   The `image =' is set to the currently installed kernel.  Most people
  762.   use /vmlinuz. `label' is used by lilo to determine which kernel or
  763.   operating system to boot, and `root' is the / of that particular
  764.   operating system. Make a backup copy of your old kernel and copy the
  765.   bzImage which you just made into place (you would say `cp bzImage
  766.   /vmlinuz' if you use `/vmlinuz').  Then, rerun lilo -- on newer
  767.   systems, you can just run `lilo', but on older stuff, you might have
  768.   to do an /etc/lilo/install or even an /etc/lilo/lilo -C
  769.   /etc/lilo/config.
  770.  
  771.  
  772.   If you would like to know more about LILO's configuration, or you
  773.   don't have LILO, get the newest version from your favorite ftp site
  774.   and follow the instructions.
  775.  
  776.  
  777.   To boot one of your old kernels off the hard disk (another way to save
  778.   yourself in case you screw up the new kernel), copy the lines below
  779.   (and including) `image = xxx' in the LILO config file to the bottom of
  780.   the file, and change the `image = xxx' to `image = yyy', where `yyy'
  781.   is the full pathname of the file you saved your backup kernel to.
  782.   Then, change the `label = zzz' to `label = linux-backup' and rerun
  783.   lilo. You may need to put a line in the config file saying `delay=x',
  784.   where x is an amount in tenths of a second, which tells LILO to wait
  785.   that much time before booting, so that you can interrupt it (with the
  786.   shift key, for example), and type in the label of the backup boot
  787.   image (in case unpleasant things happen).
  788.  
  789.  
  790.  
  791.  
  792.  
  793.   5.  Patching the kernel
  794.  
  795.  
  796.  
  797.   5.1.  Applying a patch
  798.  
  799.  
  800.   Incremental upgrades of the kernel are distributed as patches. For
  801.   example, if you have version 1.1.45, and you notice that there's a
  802.   `patch46.gz' out there for it, it means you can upgrade to version
  803.   1.1.46 through application of the patch. You might want to make a
  804.   backup of the source tree first (`make clean' and then `cd /usr/src;
  805.   tar zcvf old-tree.tar.gz linux' will make a compressed tar archive for
  806.   you.).
  807.  
  808.  
  809.   So, continuing with the example above, let's suppose that you have
  810.   `patch46.gz' in /usr/src. cd to /usr/src  and do a `zcat patch46.gz |
  811.   patch -p0' (or `patch -p0 < patch46' if the patch isn't compressed).
  812.   You'll see things whizz by (or flutter by, if your system is that
  813.   slow) telling you that it is trying to apply hunks, and whether it
  814.   succeeds or not. Usually, this action goes by too quickly for you to
  815.   read, and you're not too sure whether it worked or not, so you might
  816.   want to use the -s flag to patch, which tells patch to only report
  817.   error messages (you don't get as much of the ``hey, my computer is
  818.   actually doing something for a change!'' feeling, but you may prefer
  819.   this..). To look for parts which might not have gone smoothly, cd to
  820.   /usr/src/linux  and look for files with a .rej extension. Some
  821.   versions of patch (older versions which may have been compiled with on
  822.   an inferior filesystem) leave the rejects with a # extension. You can
  823.   use `find' to look for you;
  824.  
  825.       find .  -name '*.rej' -print
  826.  
  827.  
  828.   prints all files who live in the current directory or any subdirecto¡
  829.   ries with a .rej extension to the standard output.
  830.  
  831.  
  832.   If everything went right, do a `make clean', `config', and `dep' as
  833.   described in sections 3 and 4.
  834.  
  835.  
  836.   There are quite a few options to the patch command. As mentioned
  837.   above, patch -s will suppress all messages except the errors. If you
  838.   keep your kernel source in some other place than /usr/src/linux, patch
  839.   -p1 (in that directory) will patch things cleanly. Other patch options
  840.   are well-documented in the manual page.
  841.  
  842.  
  843.  
  844.   5.2.  If something goes wrong
  845.  
  846.  
  847.   (Note: this section refers mostly to quite old kernels)
  848.  
  849.  
  850.   The most frequent problem that used to arise was when a patch modified
  851.   a file called `config.in' and it didn't look quite right, because you
  852.   changed the options to suit your machine. This has been taken care of,
  853.   but one still might encounter it with an older release.  To fix it,
  854.   look at the config.in.rej  file, and see what remains of the original
  855.   patch.  The changes will typically be marked with `+' and `-' at the
  856.   beginning of the line. Look at the lines surrounding it, and remember
  857.   if they were set to `y' or `n'. Now, edit config.in, and change `y' to
  858.   `n' and `n' to `y' when appropriate. Do a
  859.       patch -p0 < config.in.rej
  860.  
  861.  
  862.   and if it reports that it succeeded (no fails), then you can continue
  863.   on with a configuration and compilation. The config.in.rej file will
  864.   remain, but you can get delete it.
  865.  
  866.  
  867.   If you encounter further problems, you might have installed a patch
  868.   out of order. If patch says `previously applied patch detected: Assume
  869.   -R?', you are probably trying to apply a patch which is below your
  870.   current version number; if you answer `y', it will attempt to degrade
  871.   your source, and will most likely fail; thus, you will need to get a
  872.   whole new source tree (which might not have been such a bad idea in
  873.   the first place).
  874.  
  875.  
  876.   To back out (unapply) a patch, use `patch -R' on the original patch.
  877.  
  878.  
  879.   The best thing to do when patches really turn out wrong is to start
  880.   over again with a clean, out-of-the-box source tree (for example, from
  881.   one of the linux-x.y.z.tar.gz  files), and start again.
  882.  
  883.  
  884.  
  885.   5.3.  Getting rid of the .orig files
  886.  
  887.  
  888.   After just a few patches, the .orig  files will start to pile up. For
  889.   example, one 1.1.51 tree I had was once last cleaned out at 1.1.48.
  890.   Removing the .orig files saved over a half a meg.
  891.  
  892.       find .  -name '*.orig' -exec rm -f {} ';'
  893.  
  894.  
  895.   will take care of it for you. Versions of patch which use # for
  896.   rejects use a tilde instead of .orig.
  897.  
  898.   There are better ways to get rid of the .orig files, which depend on
  899.   GNU xargs:
  900.  
  901.       find .  -name '*.orig' | xargs rm
  902.  
  903.  
  904.   or the ``quite secure but a little more verbose'' method:
  905.  
  906.       find . -name '*.orig' -print0 | xargs --null rm --
  907.  
  908.  
  909.  
  910.  
  911.  
  912.   5.4.  Other patches
  913.  
  914.  
  915.   There are other patches (I'll call them ``nonstandard'') than the ones
  916.   Linus distributes. If you apply these, Linus' patches may not work
  917.   correctly and you'll have to either back them out, fix the source or
  918.   the patch, install a new source tree, or a combination of the above.
  919.   This can become very frustrating, so if you do not want to modify the
  920.   source (with the possibility of a very bad outcome), back out the
  921.   nonstandard patches before applying Linus', or just install a new
  922.   tree. Then, you can see if the nonstandard patches still work. If they
  923.   don't, you are either stuck with an old kernel, playing with the patch
  924.   or source to get it to work, or waiting (possibly begging) for a new
  925.   version of the patch to come out.
  926.  
  927.  
  928.   How common are the patches not in the standard distribution? You will
  929.   probably hear of them. I used to use the noblink patch for my virtual
  930.   consoles because I hate blinking cursors (This patch is (or at least
  931.   was) frequently updated for new kernel releases.). With most newer
  932.   device drivers being developed as loadable modules, though, the
  933.   frequecy of ``nonstandard'' patches is decreasing significantly.
  934.  
  935.  
  936.  
  937.   6.  Additional packages
  938.  
  939.   Your linux kernel has many features which are not explained in the
  940.   kernel source itself; these features are typically utilized through
  941.   external packages. Some of the most common are listed here.
  942.  
  943.  
  944.  
  945.   6.1.  kbd
  946.  
  947.   The linux console probably has more features than it deserves. Among
  948.   these are the ability to switch fonts, remap your keyboard, switch
  949.   video modes (in newer kernels), etc. The kbd package has programs
  950.   which allow the user to do all of this, plus many fonts and keyboard
  951.   maps for almost any keyboard, and is available from the same sites
  952.   that carry the kernel source.
  953.  
  954.  
  955.  
  956.   6.2.  util-linux
  957.  
  958.   Rik Faith (faith@cs.unc.edu) put together a large collection of linux
  959.   utilities which are, by odd coincidence, called util-linux. These are
  960.   now maintained by Andries Brouwer (util-linux@math.uio.no).  Available
  961.   via anonymous ftp from sunsite.unc.edu in /pub/Linux/system/misc, it
  962.   contains programs such as setterm, rdev, and ctrlaltdel, which are
  963.   relevant to the kernel. As Rik says, do not install without thinking;
  964.   you do not need to install everything in the package, and it could
  965.   very well cause serious problems if you do.
  966.  
  967.  
  968.  
  969.   6.3.  hdparm
  970.  
  971.   As with many packages, this was once a kernel patch and support
  972.   programs.  The patches made it into the official kernel, and the
  973.   programs to optimize and play with your hard disk are distributed
  974.   separately.
  975.  
  976.  
  977.  
  978.   6.4.  gpm
  979.  
  980.   gpm stands for general purpose mouse. This program allows you to cut
  981.   and paste text between virtual consoles and do other things with a
  982.   large variety of mouse types.
  983.  
  984.  
  985.  
  986.   7.  Some pitfalls
  987.  
  988.  
  989.  
  990.  
  991.   7.1.  make clean
  992.  
  993.   If your new kernel does really weird things after a routine kernel
  994.   upgrade, chances are you forgot to make clean before compiling the new
  995.   kernel. Symptoms can be anything from your system outright crashing,
  996.   strange I/O problems, to crummy performance. Make sure you do a make
  997.   dep, too.
  998.  
  999.  
  1000.  
  1001.   7.2.  Huge or slow kernels
  1002.  
  1003.   If your kernel is sucking up a lot of memory, is too large, and/or
  1004.   just takes forever to compile even when you've got your new
  1005.   Quadbazillium-III/4400 working on it, you've probably got lots of
  1006.   unneeded stuff (device drivers, filesystems, etc) configured. If you
  1007.   don't use it, don't configure it, because it does take up memory.  The
  1008.   most obvious symptom of kernel bloat is extreme swapping in and out of
  1009.   memory to disk; if your disk is making a lot of noise and it's not one
  1010.   of those old Fujitsu Eagles that sound like like a jet landing when
  1011.   turned off, look over your kernel configuration.
  1012.  
  1013.  
  1014.   You can find out how much memory the kernel is using by taking the
  1015.   total amount of memory in your machine and subtracting from it the
  1016.   amount of ``total mem'' in /proc/meminfo  or the output of the command
  1017.   `free'.
  1018.  
  1019.  
  1020.  
  1021.   7.3.  The parallel port doesn't work/my printer doesn't work
  1022.  
  1023.   Configuration options for PCs are: First, under the category `General
  1024.   Setup', select `Parallel port support' and `PC-style hardware'. Then
  1025.   under `Character devices', select `Parallel printer support'.
  1026.  
  1027.   Then there are the names. Linux 2.2 names the printer devices
  1028.   differently than previous releases. The upshot of this is that if you
  1029.   had an lp1 under your old kernel, it's probably an lp0 under your new
  1030.   one.  Use `dmesg' or look through the logs in /var/log to find out.
  1031.  
  1032.  
  1033.  
  1034.   7.4.  Kernel doesn't compile
  1035.  
  1036.  
  1037.   If it does not compile, then it is likely that a patch failed, or your
  1038.   source is somehow corrupt. Your version of gcc also might not be
  1039.   correct, or could also be corrupt (for example, the include files
  1040.   might be in error). Make sure that the symbolic links which Linus
  1041.   describes in the README are set up correctly. In general, if a
  1042.   standard kernel does not compile, something is seriously wrong with
  1043.   the system, and reinstallation of certain tools is probably necessary.
  1044.  
  1045.  
  1046.   In some cases, gcc can crash due to hardware problems. The error
  1047.   message will be something like ``xxx exited with signal 15'' and it
  1048.   will generally look very mysterious. I probably would not mention
  1049.   this, except that it happened to me once - I had some bad cache
  1050.   memory, and the compiler would occasionally barf at random. Try
  1051.   reinstalling gcc first if you experience problems. You should only get
  1052.   suspicious if your kernel compiles fine with external cache turned
  1053.   off, a reduced amount of RAM, etc.
  1054.  
  1055.  
  1056.  
  1057.   It tends to disturb people when it's suggested that their hardware has
  1058.   problems. Well, I'm not making this up. There is an FAQ for it -- it's
  1059.   at http://www.bitwizard.nl/sig11/.
  1060.  
  1061.  
  1062.  
  1063.   7.5.  New version of the kernel doesn't seem to boot
  1064.  
  1065.  
  1066.   You did not run LILO, or it is not configured correctly. One thing
  1067.   that ``got'' me once was a problem in the config file; it said `boot =
  1068.   /dev/hda1' instead of `boot = /dev/hda' (This can be really annoying
  1069.   at first, but once you have a working config file, you shouldn't need
  1070.   to change it.).
  1071.  
  1072.  
  1073.  
  1074.   7.6.  You forgot to run LILO, or system doesn't boot at all
  1075.  
  1076.  
  1077.   Ooops! The best thing you can do here is to boot off of a floppy disk
  1078.   or CDROM and prepare another bootable floppy (such as `make zdisk'
  1079.   would do).  You need to know where your root (/) filesystem is and
  1080.   what type it is (e.g. second extended, minix). In the example below,
  1081.   you also need to know what filesystem your /usr/src/linux source tree
  1082.   is on, its type, and where it is normally mounted.
  1083.  
  1084.  
  1085.   In the following example, / is /dev/hda1, and the filesystem which
  1086.   holds /usr/src/linux is /dev/hda3, normally mounted at /usr. Both are
  1087.   second extended filesystems. The working kernel image in
  1088.   /usr/src/linux/arch/i386/boot is called bzImage.
  1089.  
  1090.  
  1091.   The idea is that if there is a functioning bzImage, it is possible to
  1092.   use that for the new floppy. Another alternative, which may or may not
  1093.   work better (it depends on the particular method in which you messed
  1094.   up your system) is discussed after the example.
  1095.  
  1096.  
  1097.   First, boot from a boot/root disk combo or rescue disk, and mount the
  1098.   filesystem which contains the working kernel image:
  1099.  
  1100.  
  1101.  
  1102.       mkdir /mnt
  1103.       mount -t ext2 /dev/hda3 /mnt
  1104.  
  1105.  
  1106.  
  1107.   If mkdir tells you that the directory already exists, just ignore it.
  1108.   Now, cd to the place where the working kernel image was. Note that
  1109.  
  1110.   /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot
  1111.  
  1112.  
  1113.   Place a formatted disk in drive ``A:'' (not your boot or root disk!),
  1114.   dump the image to the disk, and configure it for your root filesystem:
  1115.  
  1116.  
  1117.  
  1118.       cd /mnt/src/linux/arch/i386/boot
  1119.       dd if=bzImage of=/dev/fd0
  1120.       rdev /dev/fd0 /dev/hda1
  1121.  
  1122.  
  1123.   cd to / and unmount the normal /usr filesystem:
  1124.  
  1125.  
  1126.       cd /
  1127.       umount /mnt
  1128.  
  1129.  
  1130.  
  1131.   You should now be able to reboot your system as normal from this
  1132.   floppy.  Don't forget to run lilo (or whatever it was that you did
  1133.   wrong) after the reboot!
  1134.  
  1135.  
  1136.   As mentioned above, there is another common alternative. If you
  1137.   happened to have a working kernel image in / (/vmlinuz for example),
  1138.   you can use that for a boot disk. Supposing all of the above
  1139.   conditions, and that my kernel image is /vmlinuz, just make these
  1140.   alterations to the example above: change /dev/hda3 to /dev/hda1 (the /
  1141.   filesystem), /mnt/src/linux to /mnt, and if=bzImage to if=vmlinuz. The
  1142.   note explaining how to derive /mnt/src/linux may be ignored.
  1143.  
  1144.  
  1145.   Using LILO with big drives (more than 1024 cylinders) can cause
  1146.   problems.  See the LILO mini-HOWTO or documentation for help on that.
  1147.  
  1148.  
  1149.  
  1150.   7.7.  It says `warning: bdflush not running'
  1151.  
  1152.  
  1153.   This can be a severe problem. Starting with a kernel release after 1.0
  1154.   (around 20 Apr 1994), a program called `update' which periodically
  1155.   flushes out the filesystem buffers, was upgraded/replaced. Get the
  1156.   sources to `bdflush' (you should find it where you got your kernel
  1157.   source), and install it (you probably want to run your system under
  1158.   the old kernel while doing this). It installs itself as `update' and
  1159.   after a reboot, the new kernel should no longer complain.
  1160.  
  1161.  
  1162.  
  1163.   7.8.  I can't get my IDE/ATAPI CD-ROM drive to work
  1164.  
  1165.   Strangely enough, lots of people cannot get their ATAPI drives
  1166.   working, probably because there are a number of things that can go
  1167.   wrong.
  1168.  
  1169.   If your CD-ROM drive is the only device on a particular IDE interface,
  1170.   it must be jumpered as ``master'' or ``single.'' Supposedly, this is
  1171.   the most common error.
  1172.  
  1173.   Creative Labs (for one) has put IDE interfaces on their sound cards
  1174.   now.  However, this leads to the interesting problem that while some
  1175.   people only have one interface to being with, many have two IDE
  1176.   interfaces built-in to their motherboards (at IRQ15, usually), so a
  1177.   common practice is to make the soundblaster interface a third IDE port
  1178.   (IRQ11, or so I'm told).
  1179.  
  1180.   This causes problems with linux in that versions 1.2.x don't support a
  1181.   third IDE interface (there is support in starting somewhere in the
  1182.   1.3.x series but that's development, remember, and it doesn't auto-
  1183.   probe). To get around this, you have a few choices.
  1184.  
  1185.  
  1186.   If you have a second IDE port already, chances are that you are not
  1187.   using it or it doesn't already have two devices on it. Take the ATAPI
  1188.   drive off the sound card and put it on the second interface. You can
  1189.   then disable the sound card's interface, which saves an IRQ anyway.
  1190.  
  1191.   If you don't have a second interface, jumper the sound card's
  1192.   interface (not the sound card's sound part) as IRQ15, the second
  1193.   interface. It should work.
  1194.  
  1195.  
  1196.  
  1197.   7.9.  It says weird things about obsolete routing requests
  1198.  
  1199.  
  1200.   Get new versions of the route program and any other programs which do
  1201.   route manipulation.  /usr/include/linux/route.h  (which is actually a
  1202.   file in /usr/src/linux) has changed.
  1203.  
  1204.  
  1205.  
  1206.   7.10.  Firewalling not working in 1.2.0
  1207.  
  1208.   Upgrade to at least version 1.2.1.
  1209.  
  1210.  
  1211.  
  1212.   7.11.  ``Not a compressed kernel Image file''
  1213.  
  1214.   Don't use the vmlinux file created in /usr/src/linux as your boot
  1215.   image; [..]/arch/i386/boot/bzImage is the right one.
  1216.  
  1217.  
  1218.  
  1219.   7.12.  Problems with console terminal after upgrade to 1.3.x
  1220.  
  1221.   Change the word dumb to linux in the console termcap entry in
  1222.   /etc/termcap. You may also have to make a terminfo entry.
  1223.  
  1224.  
  1225.  
  1226.   7.13.  Can't seem to compile things after kernel upgrade
  1227.  
  1228.   The linux kernel source includes a number of include files (the things
  1229.   that end with .h) which are referenced by the standard ones in
  1230.   /usr/include. They are typically referenced like this (where xyzzy.h
  1231.   would be something in /usr/include/linux):
  1232.  
  1233.       #include <linux/xyzzy.h>
  1234.  
  1235.  
  1236.   Normally, there is a link called linux in /usr/include to the
  1237.   include/linux directory of your kernel source
  1238.   (/usr/src/linux/include/linux in the typical system). If this link is
  1239.   not there, or points to the wrong place, most things will not compile
  1240.   at all. If you decided that the kernel source was taking too much room
  1241.   on the disk and deleted it, this will obviously be a problem. Another
  1242.   way it might go wrong is with file permissions; if your root has a
  1243.   umask which doesn't allow other users to see its files by default, and
  1244.   you extracted the kernel source without the p (preserve filemodes)
  1245.   option, those users also won't be able to use the C compiler. Although
  1246.   you could use the chmod command to fix this, it is probably easier to
  1247.   re-extract the include files. You can do this the same way you did the
  1248.   whole source at the beginning, only with an additional argument:
  1249.  
  1250.  
  1251.       blah# tar zxvpf linux.x.y.z.tar.gz linux/include
  1252.  
  1253.  
  1254.  
  1255.   Note: ``make config'' will recreate the /usr/src/linux link if it
  1256.   isn't there.
  1257.  
  1258.  
  1259.  
  1260.   7.14.  Increasing limits
  1261.  
  1262.   The following few example commands may be helpful to those wondering
  1263.   how to increase certain soft limits imposed by the kernel:
  1264.  
  1265.   echo 4096 > /proc/sys/kernel/file-max
  1266.   echo 12288 > /proc/sys/kernel/inode-max
  1267.   echo 300 400 500 > /proc/sys/vm/freepages
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.   8.  Note for upgrade to version 2.0.x, 2.2.x
  1274.  
  1275.   Kernel versions 2.0.x and 2.2.x introduced quite a bit of changes for
  1276.   kernel installation. The file Documentation/Changes in the 2.0.x
  1277.   source tree contains information that you should know when upgrading
  1278.   to either of these versions. You will most likely need to upgrade
  1279.   several key packages, such as gcc, libc, and SysVInit, and perhaps
  1280.   alter some system files, so expect this. Don't panic, though.
  1281.  
  1282.  
  1283.  
  1284.   9.  Modules
  1285.  
  1286.   Loadable kernel modules can save memory and ease configuration. The
  1287.   scope of modules has grown to include filesystems, ethernet card
  1288.   drivers, tape drivers, printer drivers, and more.
  1289.  
  1290.  
  1291.  
  1292.   9.1.  Installing the module utilities
  1293.  
  1294.   The module utilities are available from wherever you got your kernel
  1295.   source as modutils-x.y.z.tar.gz; choose the highest patchlevel x.y.z
  1296.   that is equal to or below that of your current kernel. Unpack it with
  1297.   `tar zxvf modutils-x.y.z.tar.gz', cd to the directory it creates
  1298.   (modutils-x.y.z), look over the README, and carry out its installation
  1299.   instructions (which is usually something simple, such as make
  1300.   install). You should now have the programs insmod, rmmod, ksyms,
  1301.   lsmod, genksyms, modprobe, and depmod in /sbin. If you wish, test out
  1302.   the utilities with the ``hw'' example driver in insmod; look over the
  1303.   INSTALL file in that subdirectory for details.
  1304.  
  1305.   insmod inserts a module into the running kernel. Modules usually have
  1306.   a .o extension; the example driver mentioned above is called
  1307.   drv_hello.o, so to insert this, one would say `insmod drv_hello.o'. To
  1308.   see the modules that the kernel is currently using, use lsmod. The
  1309.   output looks like this:
  1310.  
  1311.       blah# lsmod
  1312.       Module:        #pages:  Used by:
  1313.       drv_hello          1
  1314.  
  1315.  
  1316.   `drv_hello' is the name of the module, it uses one page (4k) of mem¡
  1317.   ory, and no other kernel modules depend on it at the moment. To remove
  1318.   this module, use `rmmod drv_hello'. Note that rmmod wants a module
  1319.   name, not a filename; you get this from lsmod's listing. The other
  1320.   module utilities' purposes are documented in their manual pages.
  1321.   9.2.  Modules distributed with the kernel
  1322.  
  1323.   As of version 2.0.30, most of everything is available as a loadable
  1324.   modules. To use them, first make sure that you don't configure them
  1325.   into the regular kernel; that is, don't say y to it during `make
  1326.   config'.  Compile a new kernel and reboot with it. Then, cd to
  1327.   /usr/src/linux again, and do a `make modules'. This compiles all of
  1328.   the modules which you did not specify in the kernel configuration, and
  1329.   places links to them in /usr/src/linux/modules.  You can use them
  1330.   straight from that directory or execute `make modules_install', which
  1331.   installs them in /lib/modules/x.y.z, where x.y.z is the kernel
  1332.   release.
  1333.  
  1334.  
  1335.   This can be especially handy with filesystems. You may not use the
  1336.   minix or msdos filesystems frequently. For example, if I encountered
  1337.   an msdos (shudder) floppy, I would insmod
  1338.   /usr/src/linux/modules/msdos.o, and then rmmod msdos when finished.
  1339.   This procedure saves about 50k of RAM in the kernel during normal
  1340.   operation. A small note is in order for the minix filesystem: you
  1341.   should always configure it directly into the kernel for use in
  1342.   ``rescue'' disks.
  1343.  
  1344.  
  1345.  
  1346.   10.  Tips and tricks
  1347.  
  1348.  
  1349.  
  1350.   10.1.  Redirecting output of the make or patch commands
  1351.  
  1352.  
  1353.   If you would like logs of what those `make' or `patch' commands did,
  1354.   you can redirect output to a file. First, find out what shell you're
  1355.   running: `grep root /etc/passwd' and look for something like
  1356.   `/bin/csh'.
  1357.  
  1358.  
  1359.   If you use sh or bash,
  1360.  
  1361.       (command) 2>&1 | tee (output file)
  1362.  
  1363.  
  1364.   will place a copy of (command)'s output in the file `(output file)'.
  1365.  
  1366.  
  1367.   For csh or tcsh, use
  1368.  
  1369.       (command) |& tee (output file)
  1370.  
  1371.  
  1372.  
  1373.  
  1374.   For rc (Note: you probably do not use rc) it's
  1375.  
  1376.       (command) >[2=1] | tee (output file)
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.   10.2.  Conditional kernel install
  1383.  
  1384.   Other than using floppy disks, there are several methods of testing
  1385.   out a new kernel without touching the old one. Unlike many other Unix
  1386.   flavors, LILO has the ability to boot a kernel from anywhere on the
  1387.   disk (if you have a large (500 MB or above) disk, please read over the
  1388.   LILO documentation on how this may cause problems). So, if you add
  1389.   something similar to
  1390.  
  1391.       image = /usr/src/linux/arch/i386/boot/bzImage
  1392.           label = new_kernel
  1393.  
  1394.  
  1395.   to the end of your LILO configuration file, you can choose to run a
  1396.   newly compiled kernel without touching your old /vmlinuz (after run¡
  1397.   ning lilo, of course). The easiest way to tell LILO to boot a new ker¡
  1398.   nel is to press the shift key at bootup time (when it says LILO on the
  1399.   screen, and nothing else), which gives you a prompt.  At this point,
  1400.   you can enter `new_kernel' to boot the new kernel.
  1401.  
  1402.   If you wish to keep several different kernel source trees on your
  1403.   system at the same time (this can take up a lot of disk space; be
  1404.   careful), the most common way is to name them /usr/src/linux-x.y.z,
  1405.   where x.y.z is the kernel version. You can then ``select'' a source
  1406.   tree with a symbolic link; for example, `ln -sf linux-1.2.2
  1407.   /usr/src/linux' would make the 1.2.2 tree current. Before creating a
  1408.   symbolic link like this, make certain that the last argument to ln is
  1409.   not a real directory (old symbolic links are fine); the result will
  1410.   not be what you expect.
  1411.  
  1412.  
  1413.  
  1414.   10.3.  Kernel updates
  1415.  
  1416.   Russell Nelson (nelson@crynwr.com) summarizes the changes in new
  1417.   kernel releases. These are short, and you might like to look at them
  1418.   before an upgrade. They are available with anonymous ftp from
  1419.   ftp.emlist.com in pub/kchanges or through the URL
  1420.  
  1421.       http://www.crynwr.com/kchanges
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.   11.  Other relevant HOWTOs that might be useful
  1428.  
  1429.  
  1430.   ╖  Sound-HOWTO: sound cards and utilities
  1431.  
  1432.   ╖  SCSI-HOWTO: all about SCSI controllers and devices
  1433.  
  1434.   ╖  NET-2-HOWTO: networking
  1435.  
  1436.   ╖  PPP-HOWTO: PPP networking in particular
  1437.  
  1438.   ╖  PCMCIA-HOWTO: about the drivers for your notebook
  1439.  
  1440.   ╖  ELF-HOWTO: ELF: what it is, converting..
  1441.  
  1442.   ╖  Hardware-HOWTO: overview of supported hardware
  1443.  
  1444.   ╖  Module mini-HOWTO: more on kernel modules
  1445.  
  1446.   ╖  Kerneld mini-HOWTO: about kerneld
  1447.  
  1448.   ╖  BogoMips mini-HOWTO: in case you were wondering
  1449.  
  1450.  
  1451.  
  1452.  
  1453.   12.  Misc
  1454.  
  1455.  
  1456.  
  1457.   12.1.  Author
  1458.  
  1459.  
  1460.   The author and maintainer of the Linux Kernel-HOWTO is Brian Ward
  1461.   (bri@cs.uchicago.edu). Please send me any comments, additions,
  1462.   corrections (Corrections are, in particular, the most important to
  1463.   me.).
  1464.  
  1465.  
  1466.   You can take a look at my `home page' at one of these URLs:
  1467.  
  1468.       http://www.math.psu.edu/bri/
  1469.       http://blah.math.tu-graz.ac.at/~bri/
  1470.  
  1471.  
  1472.  
  1473.  
  1474.   Even though I try to be attentive as possible with mail, please
  1475.   remember that I get a lot of it every day, so it may take a little
  1476.   time to get back to you. Especially when emailing me with a question,
  1477.   please try extra hard to be clear and detailed in your message. If
  1478.   you're writing about non-working hardware (or something like that), I
  1479.   need to know what your hardware configureation is. If you report an
  1480.   error, don't just say ``I tried this but it gave an error;'' I need to
  1481.   know what the error was.  I would also like to know what versions of
  1482.   the kernel, gcc, and libc you're using. If you just tell me you're
  1483.   using this-or-that distribution, it won't tell me much at all. I don't
  1484.   care if you ask simple questions; remember, if you don't ask, you may
  1485.   never get an answer! I'd like to thank everyone who has given me
  1486.   feedback.
  1487.  
  1488.   If your question does not relate to the kernel, or is in some language
  1489.   that I don't understand, I may not answer.
  1490.  
  1491.  
  1492.   If you mailed me and did not get an answer within a resonable amount
  1493.   of time (three weeks or more), then chances are that I accidentally
  1494.   deleted your message or something (sorry). Please try again.
  1495.  
  1496.  
  1497.   I get a lot of mail about thing which are actually hardware problems
  1498.   or issues. That's OK, but please try to keep in mind that I'm not
  1499.   familiar with all of the hardware in the world. I use AMD processors,
  1500.   Adaptec and Sybios SCSI controllers, and IBM SCSI disks.
  1501.  
  1502.  
  1503.   Version -0.1 was written on October 3, 1994. This document is
  1504.   available in SGML, PostScript, TeX, roff, and plain-text formats.
  1505.  
  1506.  
  1507.  
  1508.   12.2.  To do
  1509.  
  1510.   The ``Tips and tricks'' section is a little small. I hope to expand on
  1511.   it with suggestions from others.
  1512.  
  1513.   So is ``Additional packages.''
  1514.  
  1515.   More debugging/crash recovery info needed.
  1516.  
  1517.  
  1518.  
  1519.   12.3.  Contributions
  1520.  
  1521.   A small part of Linus' README (kernel hacking options) is inclusive.
  1522.   (Thanks, Linus!)
  1523.  
  1524.   uc@brian.lunetix.de (Ulrich Callmeier): patch -s and xargs.
  1525.  
  1526.   quinlan@yggdrasil.com (Daniel Quinlan): corrections and additions in
  1527.   many sections.
  1528.  
  1529.   nat@nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, many
  1530.   other things
  1531.  
  1532.   boldt@math.ucsb.edu (Axel Boldt): collected descriptions of kernel
  1533.   configuration options on the net; then provided me with the list
  1534.  
  1535.   lembark@wrkhors.psyber.com (Steve Lembark): multiple boot suggestion
  1536.  
  1537.   kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): some corrections and
  1538.   suggestions
  1539.  
  1540.   rmcguire@freenet.columbus.oh.us (Ryan McGuire): makeables additions
  1541.  
  1542.   dumas@excalibur.ibp.fr (Eric Dumas): French translation
  1543.  
  1544.   simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): Japanese
  1545.   translation
  1546.  
  1547.   jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): Spanish translation
  1548.  
  1549.   mva@sbbs.se (Martin Wahlen): Swedish translation
  1550.  
  1551.   jzp1218@stud.u-szeged.hu (Zoltan Vamosi): Hungarian translation
  1552.  
  1553.   bart@mat.uni.torun.pl (Bartosz Maruszewski): Polish translation
  1554.  
  1555.   donahue@tiber.nist.gov (Michael J Donahue): typos, winner of the
  1556.   ``sliced bread competition''
  1557.  
  1558.   rms@gnu.ai.mit.edu (Richard Stallman): ``free'' documentation
  1559.   concept/distribution notice
  1560.  
  1561.   dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS thing
  1562.  
  1563.   esr@snark.thyrsus.com (Eric Raymond): various tidbits
  1564.  
  1565.  
  1566.   The people who have sent me mail with questions and problems have also
  1567.   been quite helpful.
  1568.  
  1569.  
  1570.  
  1571.   12.4.  Copyright notice, License, and all that stuff
  1572.  
  1573.   Copyright ⌐ Brian Ward, 1994-1999.
  1574.  
  1575.   Permission is granted to make and distribute copies of this manual
  1576.   provided the copyright notice and this permission notice are preserved
  1577.   on all copies.
  1578.  
  1579.  
  1580.   Permission is granted to copy and distribute modified versions of this
  1581.   manual under the conditions for verbatim copying, provided that the
  1582.   derived work is distributed under the terms of a permission notice
  1583.   identical to this one. Translations fall under the catagory of
  1584.   ``modified versions.''
  1585.   Warranty: None.
  1586.  
  1587.  
  1588.   Recommendations: Commercial redistribution is allowed and encouraged;
  1589.   however, it is strongly recommended that the redistributor contact the
  1590.   author before the redistribution, in the interest of keeping things
  1591.   up-to-date (you could send me a copy of the thing you're making while
  1592.   you're at it). Translators are also advised to contact the author
  1593.   before translating. The printed version looks nicer. Recycle.
  1594.  
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.