kernel.xml 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
  3. <!ENTITY % general-entities SYSTEM "../general.ent">
  4. %general-entities;
  5. ]>
  6. <sect1 id="ch-bootable-kernel" xreflabel="Linux" role="wrap">
  7. <title>Linux-&linux-version;</title>
  8. <?dbhtml filename="kernel.html"?>
  9. <indexterm zone="ch-bootable-kernel"><primary sortas="a-Linux">Linux</primary></indexterm>
  10. <sect2 role="package"><title/>
  11. <para>The Linux package contains the kernel and the header files.</para>
  12. <segmentedlist>
  13. <segtitle>&buildtime;</segtitle>
  14. <segtitle>&diskspace;</segtitle>
  15. <seglistitem><seg>All default options: 4.20 SBU</seg>
  16. <seg>All default options: 181 MB</seg></seglistitem>
  17. </segmentedlist>
  18. <segmentedlist>
  19. <segtitle>Linux installation depends on</segtitle>
  20. <seglistitem><seg>Bash, Binutils, Coreutils, Findutils,
  21. GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed</seg></seglistitem>
  22. </segmentedlist>
  23. </sect2>
  24. <sect2 role="installation">
  25. <title>Installation of the kernel</title>
  26. <para>Building the kernel involves a few steps: configuration, compilation, and
  27. installation. If you don't like the way this book configures the kernel, view
  28. the <filename>README</filename> file in the kernel source tree for alternative
  29. methods.</para>
  30. <para>Prepare for compilation by running the following command:</para>
  31. <screen><userinput>make mrproper</userinput></screen>
  32. <para>This ensures that the kernel tree is absolutely clean. The kernel team
  33. recommends that this command be issued prior to <emphasis>each</emphasis>
  34. kernel compilation. You shouldn't rely on the source tree being clean after
  35. un-tarring.</para>
  36. <para>Also, ensure that the kernel does not attempt to pass hotplugging events
  37. to userspace until userspace specifies that it is ready:</para>
  38. <screen><userinput>sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c</userinput></screen>
  39. <para>If, in <xref linkend="ch-scripts-console"/>, you decided you want
  40. to compile the keymap into the kernel, issue the command below:</para>
  41. <screen><userinput>loadkeys -m
  42. /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \
  43. <replaceable>[unpacked sources dir]</replaceable>/linux-&linux-version;/drivers/char/defkeymap.c</userinput></screen>
  44. <para>For example, if you have a Dutch keyboard, you would use
  45. <filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para>
  46. <para>Configure the kernel via a menu-driven interface:</para>
  47. <screen><userinput>make menuconfig</userinput></screen>
  48. <para><userinput>make oldconfig</userinput> may be more appropriate in some
  49. situations. See the <filename>README</filename> file for more
  50. information.</para>
  51. <para>If you wish, you may skip kernel configuration by simply copying the
  52. kernel config file, <filename>.config</filename>, from your host system
  53. (assuming it is available) to the unpacked <filename class="directory">linux-&linux-version;</filename>
  54. directory. However, we
  55. don't recommend this option. You're much better off exploring all the
  56. configuration menus and creating your own kernel configuration from
  57. scratch.</para>
  58. <para>For POSIX shared memory support, ensure that the kernel config option
  59. <quote>Virtual memory file system support</quote> is enabled. It resides within
  60. the <quote>File systems</quote> menu and is normally enabled by default.</para>
  61. <para>LFS bootscripts make the assumption that you either compile
  62. both "Support for Host-side USB" and
  63. "USB device filesystem" directly into the kernel, or don't compile them at
  64. all. Bootscripts will not work properly if it is a module (usbcore.ko).</para>
  65. <note><para>NPTL requires the kernel to be compiled with GCC 3.x, in this case
  66. &gcc-version;. Compiling with 2.95.x is known to cause failures in the glibc
  67. testsuite, so do <emphasis>not</emphasis> compile the kernel with gcc 2.95.x
  68. unless you know what you're getting yourself into.</para></note>
  69. <para>Compile the kernel image and modules:</para>
  70. <screen><userinput>make</userinput></screen>
  71. <para>If you intend to use kernel modules, you may need an
  72. <filename>/etc/modprobe.conf</filename> file. Information pertaining
  73. to modules and to kernel configuration in general may be found in the
  74. kernel documentation, which is found in the
  75. <filename>linux-&linux-version;/Documentation</filename> directory.
  76. The
  77. modprobe.conf man page
  78. <!-- removed for review from tldp.org
  79. and the kernel HOWTO at
  80. <ulink url="http://www.tldp.org/HOWTO/Kernel-HOWTO.html"/> -->
  81. may also be of
  82. interest to you.</para>
  83. <para>Be very suspicious while reading other documentation, because it
  84. usually applies to 2.4.x kernels only. As far as the editors know, kernel
  85. configuration issues specific to Hotplug and Udev
  86. are documented nowhere. The problem is that Udev will create a device node
  87. only if Hotplug or a user-written script inserts the corresponding module
  88. into the kernel, and not all modules are detectable by Hotplug. Note
  89. that statements like
  90. <screen>alias char-major-XXX some-module</screen>
  91. in <filename>/etc/modprobe.conf</filename> file don't work with
  92. Udev, and other aliases are often unnecessary with Hotplug.</para>
  93. <para>Because of all those compilcations with Hotplug, Udev and modules, we
  94. strongly recommend you to start with a completely non-modular kernel
  95. configuration, especially if this is the first time you use Udev.</para>
  96. <para>Install the modules, if your kernel configuration uses them:</para>
  97. <screen><userinput>make modules_install</userinput></screen>
  98. <para>If you have a lot of modules and very little space, you may want to
  99. consider stripping and compressing the modules. For most people such compression
  100. isn't worth the trouble, but if you're really pressed for space, then have a look at
  101. <ulink url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para>
  102. <para>Kernel compilation has finished but more steps are required to complete
  103. the installation. Some files need to be copied to the <filename>/boot</filename>
  104. directory.</para>
  105. <para>The path to the kernel image may vary depending on the platform you're
  106. using. Issue the following command to install the kernel:</para>
  107. <screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen>
  108. <para><filename>System.map</filename> is a symbol file for the kernel. It maps
  109. the function entry points of every function in the kernel API (Application Programming Interface), as well as the
  110. addresses of the kernel data structures for the running kernel. Issue the
  111. following command to install the map file:</para>
  112. <screen><userinput>cp System.map /boot/System.map-&linux-version;</userinput></screen>
  113. <para><filename>.config</filename> is the kernel configuration file that was
  114. produced by the <command>make menuconfig</command> step above. It contains all
  115. the config selections for the kernel that was just compiled. It's a good idea
  116. to keep this file for future reference:</para>
  117. <screen><userinput>cp .config /boot/config-&linux-version;</userinput></screen>
  118. <para>It is important to note that the files in the kernel source directory are
  119. not owned by <emphasis>root</emphasis>. Whenever you unpack a package as user
  120. <emphasis>root</emphasis> (like we did here inside chroot), the files end up
  121. having the user and group IDs of whatever they were on the packager's computer.
  122. This is usually not a problem for any other package you install because you
  123. remove the source tree after the installation. But the Linux source tree is
  124. often kept around for a long time, so there's a chance that whatever user ID
  125. the packager used will be assigned to somebody on your machine and then that
  126. person would have write access to the kernel source.</para>
  127. <para>If you are going to keep the kernel source tree around, you may want to
  128. run <userinput>chown -R 0:0</userinput> on the
  129. <filename>linux-&linux-version;</filename> directory to ensure all files are
  130. owned by user <emphasis>root</emphasis>.</para>
  131. </sect2>
  132. <sect2 id="contents-kernel" role="content"><title>Contents of Linux</title>
  133. <segmentedlist>
  134. <segtitle>Installed files</segtitle>
  135. <seglistitem><seg>the kernel, the kernel headers,
  136. and the System.map</seg></seglistitem>
  137. </segmentedlist>
  138. <variablelist><title>Short descriptions</title>
  139. <varlistentry id="kernel">
  140. <term>The <emphasis>kernel</emphasis></term>
  141. <listitem>
  142. <indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm>
  143. <para>is the engine of your Linux system.
  144. When switching on your box, the kernel is the first part of your operating
  145. system that gets loaded. It detects and initializes all the components of your
  146. computer's hardware, then makes these components available as a tree of files
  147. to the software, and turns a single CPU into a multi-tasking machine capable
  148. of running scores of programs seemingly at the same time.</para>
  149. </listitem>
  150. </varlistentry>
  151. <varlistentry id="kernel-headers">
  152. <term>The <emphasis>kernel headers</emphasis></term>
  153. <listitem>
  154. <indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm>
  155. <para>define the interface to the
  156. services that the kernel provides. The headers in your system's
  157. <filename>include</filename> directory should <emphasis>always</emphasis> be
  158. the ones against which Glibc was compiled and should therefore
  159. <emphasis>not</emphasis> be replaced when upgrading the kernel.</para>
  160. </listitem>
  161. </varlistentry>
  162. <varlistentry id="System.map">
  163. <term><filename>System.map</filename></term>
  164. <listitem>
  165. <indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm>
  166. <para>is a list of addresses and symbols. It maps the entry points and addresses
  167. of all the functions and data structures in the kernel.</para>
  168. </listitem>
  169. </varlistentry>
  170. </variablelist>
  171. </sect2>
  172. </sect1>