home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd2.bin / docu / ascii / suselxen / slxen-13.txt < prev    next >
Text File  |  2000-03-11  |  19KB  |  437 lines

  1.       Part V
  2.  
  3. The Kernel and Its
  4.    Parameters
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.                       315
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.                                                                          Chapter 13
  23.                                                                    The Kernel
  24.  
  25. The standard SuSE kernel, which is written to disk after installation (and
  26. which is found in a correctly installed system under /boot), is configured
  27. to support as wide a range of hardware and other kernel features as possible.
  28. For this reason this kernel is not specifically tuned to your own hardware. If
  29. you have made the right selection during the installation or update, then this
  30. kernel will be specifically optimised for your processor.
  31. However, it is possible that this kernel may not be ideal for your purposes,
  32. most of which relate to network server and routing tasks. In addition, a small
  33. amount of RAM will be wasted as a small number of unnecessary drivers are
  34. loaded.
  35. Thus, there are some advantages to building a kernel of your own. Further-
  36. more, creating your own kernel can, in some cases, provides access to exotic
  37. hardware which is not supported by our standard kernels (e. g., exotic bus-
  38. mice). Additionally, kernel configuration provides a view into the current
  39. status of development of the Linux kernel.
  40. Several Makefiles are provided with the kernel to help automate the pro-
  41. cess. These Makefiles handle nearly all the details for you. The only thing
  42. you have to do by hand is to make selections which correspond to hardware
  43. settings and other kernel features.
  44. Installation support is not provided for kernels that are not included with
  45. SuSE Linux (see Section H.1.2 page 493); we will be pleased to help
  46. you, however, in the context of our Professional Services (see Section H.3
  47. page 497).
  48.  
  49.  The description below is based on kernel series 2.2.x. Many of the issues
  50.  mentioned here will be valid for 2.0.x but they might differ in the details!'
  51.  
  52.  
  53. 13.1 Kernel Sources
  54.  
  55. To build a kernel the following packages must be installed: the kernel sources
  56. (obviously!), (package lx suse), the C compiler (package gcc), the GNU
  57. binutils (package binutils) and the include files for the C compiler (pack-
  58. age libc). They are located in series D (Development) on the CD-ROM.
  59. It is highly recommended to install the C compiler in any case, since the C
  60. language is inseparable from UNIX operating systems.
  61.  
  62.                                                                                   317
  63.  
  64.  
  65.  
  66. 13. The Kernel
  67.  
  68.                   The kernel sources are located in /usr/src/linux. If you plan to experi-
  69.                   ment with different kernel sources, you can unpack them in different directo-
  70.                   ries under the directory /usr/src and create a symbolic link, /usr/src/
  71.                   linux , to the current kernel source. This is what YaST does automatically.
  72.                   Since there is a lot of software that relies on the sources being in /usr/src/
  73.                   linux, you should maintain this directory as a symbolic link to your current
  74.                   kernel source to provide an error-free compilation of system programs which
  75.                   need to access the kernel sources.
  76.  
  77.                   13.2 Kernel Modules
  78.                   Many drivers and features no longer have to be compiled directly into the
  79.                   kernel, but can be loaded at runtime via kernel modules. Which drivers are
  80.                   to be compiled into the kernel, and which are loaded as runtime modules, is
  81.                   defined in the kernel configuration.
  82.                   Kernel modules are located at /lib/modules/<version> , where
  83.                   <version> is the actual kernel version.
  84.                   The use of this feature decreases the size and RAM requirements of the ker-
  85.                   nel, which is quite desirable. For this reason, it is best to use this feature
  86.                   wherever it is reasonable. Basically, components which are not required for
  87.                   the system to boot up may be built as modules. This makes sure that the ker-
  88.                   nel doesn't get too big to be loadable by the BIOS or a bootloader. Drivers
  89.                   which are required for boot, such as ext2, the SCSI drivers on a SCSI-based
  90.                   system, and similar items should be compiled into the kernel. In contrast,
  91.                   items such as isofs, msdos, or sound, which are not needed for starting
  92.                   up your computer system, may be built as modules.
  93.  
  94.                   Handling Modules
  95.                   The following commands are available for your use:
  96.                    * insmod
  97.                      insmod loads the requested module after searching for it in a subdirectory
  98.                      of /lib/modules/<version>. It is preferable, however, to use
  99.                      modprobe (see below) rather than insmod, which should no longer
  100.                      be necessary.
  101.                    * rmmod
  102.                      Unloads the requested module. This is only possible if this module is
  103.                      no longer needed. It is not possible to unload the isofs module (the
  104.                      CD-ROM filesystem), for example, while a CD is still mounted.
  105.                    * depmod
  106.                      Creates the file modules.dep in /lib/modules/<version>
  107.                      where dependencies of all of the modules are defined. This is necessary
  108.                      to ensure that all dependent modules are loaded along with the selected
  109.                      ones. If START KERNELD is set in /etc/rc.config, this file is
  110.                      created each time the system is started.
  111.                    * modprobe
  112.                      Loads or unloads a given module, while taking into account dependen-
  113.                      cies of this module. This command is extremely powerful and can be
  114.  
  115. 318
  116.  
  117.  
  118.  
  119.                                                                          13.2. Kernel Modules
  120.  
  121.     used for a lot of things (e. g., probing all modules of a given type un-
  122.     til one is successfully loaded). In contrast to insmod, modprobe checks
  123.     /etc/modules.conf and is the preferred way for loading modules.
  124.     For detailed information on this topic, please refer to the corresponding
  125.     manual page.
  126.  * lsmod
  127.     Shows you which modules are currently loaded and by how many other
  128.     modules they are being used. Modules started by the kernel daemon are
  129.     tagged by autoclean, which shows that these modules will be removed
  130.     automatically when they reach their idle time limit.
  131.  
  132. /etc/modules.conf
  133. Loading of modules is further influenced by /etc/modules.conf. see
  134. also manpage for depmod (man depmod). NOTE: From SuSE Linux
  135. 6.3 the file name was changed from /etc/conf.modules to /etc/
  136. modules.conf.
  137. In this file the parameters for modules which access hardware directly can be
  138. entered, as such modules may need system-specific options (e. g. CD-ROM-
  139. driver or network driver). The parameters entered here are in principle iden-
  140. tical to those at the boot prompt of the kernel (e. g. for LILO (see Chapter 14
  141. page 325), but they differ in a number of details. If loading a module failed,
  142. you can try again after specifying your hardware in /etc/modules.conf.
  143.  
  144. Kmod ¡ The "Kernel Module Loader"
  145. From version 2.2.x, the kernel module loader is the most elegant way to use
  146. modules, and replaces the old kernel daemon (kerneld). This kernel feature
  147. allows the kernel to launch modprobe directly and ensures that the necessary
  148. modules are loaded as soon as this is required by the kernel.
  149. To use the kernel module loader, you must set the corresponding variable in
  150. the kernel configuration `Kernel module loader' (CONFIG KMOD)
  151. The drivers needed to access the root filesystem should be compiled directly
  152. into the kernel. So you should not configure your SCSI driver or your filesys-
  153. tem (normally: ext2) as modules!
  154.  
  155.  Because SuSE Linux however, now uses initrd initial ramdisk
  156.  and integrates the SCSI driver, for example, using this method, you
  157.  must make sure when compiling your own kernel you adjust the vari-
  158.  able INITRD MODULES in the file /etc/rc.config (Section 17.6
  159.  page 402) and comment out the initrd line in /etc/lilo.conf (see
  160.  Section 16.2.5 page 381). If you don't do this the kernel will hang when
  161.  you boot.
  162.  
  163. Kernel modules come in handy for rarely used functionality, such as
  164. parport and printer support, drivers for floppy drives and filesystems
  165. that are rarely used).
  166. The Kmod is not designed to automatically unload modules; the potential
  167. saving in memory is only marginal for the RAM capacity of computers today;
  168.  
  169.                                                                                          319
  170.  
  171.  
  172.  
  173. 13. The Kernel
  174.  
  175.                   see also /usr/src/linux/Documentation/kmod.txt. For reasons
  176.                   of performance it is better for server machines, which have special tasks to
  177.                   perform, and need only a few drivers, to have a "monolithic" kernel.
  178.  
  179.                   13.3 Kernel Configuration
  180.                   The configuration of the kernel that was set up during installation or during
  181.                   an update can be taken from the file /usr/src/linux/.config (see
  182.                   Section 2.2.9 page 33) This file, however, describes only the kernel, and not
  183.                   the modules, which come from the package kernmod. If you also want to
  184.                   compile new modules, you must select these manually.
  185.                   Configuring the kernel can be done in three different ways:
  186.  
  187.                   1. On the command line
  188.                   2. In a menu in text mode
  189.                   3. In a menu under the X Window System
  190.  
  191.                   Here is a short overview of these three methods.
  192.  
  193.                   Configuring on the Command Line
  194.                   To configure the kernel, just change to /usr/src/linux and enter:
  195.                      earth:/usr/src/linux # make config
  196.                   You are asked to choose the options that you want supported by the kernel
  197.                                                                                                   
  198.                   you are about to build. There are two or three possible answers here:  y  
  199.                                                                                              ,  n  
  200.                        
  201.                   or  m  
  202.                        . `m' means that this device is not compiled directly into the kernel but
  203.                   as a module instead. Any driver that is needed to boot the system should be
  204.                   integrated into the kernel, and not be loaded as a module. If you press any
  205.                   other key, you get a short help text about the current option.
  206.  
  207.                   Configuring in Text Mode
  208.                   A much more convenient way of configuring the kernel can be achieved by
  209.                   typing:
  210.                      earth:/usr/src/linux # make menuconfig
  211.                   With make menuconfig, you can review your changes, go through the ques-
  212.                   tions in your own preferred order, and in the event of a mistake, you do not
  213.                   have to go through all the questions again.
  214.  
  215.                   Configuring Under the X Window System
  216.                   If you have installed and configured the X Window System (package xf86)
  217.                   and Tcl/Tk (package tcl and package tk), you can use:
  218.                      earth:/usr/src/linux # make xconfig
  219.                   as an alternative. You will be presented with a GUI (Graphical User Interface)
  220.                   which makes kernel configuration very user-friendly. You should have started
  221.                   the X Window System as `root' or you will have to take additional steps
  222.                   into consideration (e. g., taking over the display from another user).
  223.  
  224. 320
  225.  
  226.  
  227.  
  228.                                                               13.4. Settings in the Kernel Configuration
  229.  
  230. 13.4 Settings in the Kernel Configuration
  231. All the individual configuration possibilities of the kernel cannot be covered Help Texts
  232. here in detail. Please make use of the numerous help texts available on kernel
  233. configuration. The latest kernel documentation is always in /usr/src/
  234. linux/Documentation.
  235.  
  236. 13.5 Compiling the Kernel
  237.  
  238.  You may remove the comment in the main Makefile (app. line 74).
  239.  That's the line containing: INSTALL PATH=/boot. This lets you install
  240.  your own kernel to /boot.
  241.  
  242. We recommend that you compile a "bzImage". As a rule this avoids the
  243. problem of the kernel getting too large, as can easily happen if you select
  244. too many features and create a "zImage" (messages such as "kernel too
  245. big" or "System is too big") are then typical. After adapting the
  246. kernel configuration to your needs, start compilation by entering:
  247.     earth:/usr/src/linux # make dep
  248.            earth:/usr/src/linux # make clean
  249.            earth:/usr/src/linux # make bzImage
  250.  
  251. These three commands can be entered on one line as well. They are started
  252. one after the other. This might be useful if you want to compile a kernel
  253. overnight, for example. Just enter:
  254.     earth:/usr/src/linux # make dep clean bzImage
  255. Depending on your system, it now takes from just a few minutes (AMD
  256. Athlon / Intel Pentium III)1 to up to several hours for a 386 with 8 MB.
  257. While compiling, you can still work on one of the other consoles. After a
  258. successful compilation, you will find the kernel in the directory /usr/src/
  259. linux/arch/i386/boot The kernel image ¡ the file which contains the
  260. kernel ¡ is called
  261. bzImage
  262. If this file does not exist, then your compile was not successful. The error
  263. may have been lost in all the output. You can verify if mistakes were made
  264. by entering:
  265.     earth:/usr/src/linux # make bzImage
  266.  
  267. and watch for error messages. But do not panic: errors are very rare!
  268. If you are using the Bash shell you may enter:
  269.     earth:/usr/src/linux # make bzImage 2>&1 | tee ker-
  270.     nel.out
  271. for writing the compilation output to kernel.out. Using the Tcsh this
  272. command is invoked as:
  273.     earth:/usr/src/linux # make bzImage |& tee kernel.out
  274. 1 A very popular test for hardware and software is to compile the kernel with make -j. You
  275. will need quite a lot of RAM (more than 100 MB). This launches a compiler for each source file.
  276.  
  277.                                                                                                     321
  278.  
  279.  
  280.  
  281. 13. The Kernel
  282.  
  283.                   If you have configured parts of your kernel to be loaded as modules you need
  284.                   to launch the compilation of modules after you have compiled the kernel.
  285.                   This may be achieved by typing:
  286.                       earth:/usr/src/linux # make modules
  287.                   After the modules have been compiled successfully, you must install them
  288.                   into the appropriate directories (/lib/modules/<Version>) by enter-
  289.                   ing:
  290.                       earth:/usr/src/linux # make modules install
  291.  
  292.                   13.6 Installing the Kernel
  293.                   After having compiled a kernel, you have to make sure that it is available
  294.                   for use from now on. If you use LILO, you have to run it again, so that
  295.                   the new kernel is recognized. Normally, you can just copy the new kernel
  296.                   to /boot/vmlinuz and invoke LILO: After you have compiled the kernel
  297.                   you must ensure that it can be booted. If you use LILO, then this must be re-
  298.                   installed. In the simplest case, copy the the new kernel to /boot/vmlinuz
  299.                   (see Section 13.5 on the preceding page) and then run LILO to protect
  300.                   yourself from unpleasant surprises, however, it is recommended that you
  301.                   initially retain the old kernel (/boot/vmlinuz.old), so that you can still
  302.                   boot it if the new kernel does not function as expected:
  303.                      earth:/usr/src/linux # cp /boot/vmlinuz /boot/vmlinuz.old
  304.                      earth:/usr/src/linux # cp arch/i386/boot/bzImage /boot/vmlinuz
  305.                      earth:/usr/src/linux # lilo
  306.                   The Makefile target make bzlilo performs these three steps, by the way,
  307.                   in one go.
  308.                   Now the compiled modules still need to be installed; by entering
  309.                      earth:/usr/src/linux # make modules install
  310.                   you can have these copied to the correct target directories in /lib/
  311.                   modules/<Version>.
  312.                   To accomplish this, enter an additional label to /etc/lilo.conf , such
  313.                   as old-linux. Select /boot/vmlinuz.old as the boot image, or ker-
  314.                   nel to boot, and copy the old kernel to /boot/vmlinuz.old. This will
  315.                   allow you to boot the old kernel if the new one happens to fail, by entering
  316.                   old-linux at the kernel boot: prompt. This is thoroughly described in
  317.                   Chapter 4 page 103.
  318.                   When you have adapted /etc/lilo.conf to your needs, you can enter:
  319.                       earth:/usr/src/linux # lilo
  320.                   If you boot Linux via DOS using linux.bat (loadlin), you have to copy
  321.                   the kernel to /dosc/loadlin/bzimage (or to the directory where you
  322.                   have installed loadlin) for it to become active at the next boot.
  323.                   Furthermore, the file /System.map contains kernel symbols which are
  324.                   needed by the modules to launch kernel functions correctly. This file depends
  325.                   on the current kernel. Therefore, you should copy /usr/src/linux/
  326.                   System.map2 to the root directory (/). If you create your kernel using
  327.                   make zlilo, this is done for you automatically.
  328.                   2 This file is created every time you create a new kernel.
  329.  
  330. 322
  331.  
  332.  
  333.  
  334.                                                                    13.7. Creating a Boot Disk
  335.  
  336. If you get an error message like "System.map does not match
  337. current kernel", then probably System.map has not been copied.
  338.  
  339. 13.7 Creating a Boot Disk
  340. If you want to create a boot disk with the new kernel, you can use the follow-
  341. ing command:
  342.    earth:/usr/src/linux # make bzdisk
  343.  
  344. 13.8 Cleaning Your Hard Drive After Compilation
  345. If you are low on hard disk space, you can regain some of the hard drive space
  346. used during compilation, with:
  347.    earth: # cd /usr/src/linux
  348.    earth:/usr/src/linux # make clean
  349. If there is plenty of space and you plan to compile a new kernel from the same
  350. sources, you might skip the last step. A new compilation will then be faster,
  351. as only those parts of the system which must change based on your choices
  352. are re-compiled.
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.                                                                                          323
  382.  
  383.  
  384.  
  385. 13. The Kernel
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433. 324
  434.  
  435.  
  436.  
  437.