1 2 3 4 5 6 7 8 9 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
<!-- retain these comments for translator revision tracking -->
<!-- $Id: kernel-baking.xml 69949 2015-05-28 08:48:17Z sthibault $ -->
<sect1 arch="linux-any" id="kernel-baking"><title>Compiling a New Kernel</title>
<para>
Why would someone want to compile a new kernel? It is often not
necessary since the default kernel shipped with &debian; handles most
configurations. Also, &debian; often offers several alternative kernels.
So you may want to check first if there is an alternative kernel image
package that better corresponds to your hardware. However, it can be
useful to compile a new kernel in order to:
<itemizedlist>
<listitem><para>
handle special hardware needs, or hardware conflicts with the
pre-supplied kernels
</para></listitem>
<listitem><para>
use options of the kernel which are not supported in the pre-supplied
kernels (such as high memory support)
</para></listitem>
<listitem><para>
optimize the kernel by removing useless drivers to speed up boot time
</para></listitem>
<listitem><para>
create a monolithic instead of a modularized kernel
</para></listitem>
<listitem><para>
run an updated or development kernel
</para></listitem>
<listitem><para>
learn more about linux kernels
</para></listitem>
</itemizedlist>
</para>
<sect2><title>Kernel Image Management</title>
<para>
Don't be afraid to try compiling the kernel. It's fun and profitable.
</para><para>
To compile a kernel the &debian; way, you need some packages:
<classname>fakeroot</classname>, <classname>kernel-package</classname>,
<classname>linux-source-2.6</classname>
and a few others which are probably already installed (see
<filename>/usr/share/doc/kernel-package/README.gz</filename> for the
complete list).
</para><para>
This method will make a .deb of your kernel source, and, if you have
non-standard modules, make a synchronized dependent .deb of those
too. It's a better way to manage kernel images;
<filename>/boot</filename> will hold the kernel, the System.map, and a
log of the active config file for the build.
</para><para>
Note that you don't <emphasis>have</emphasis> to compile your kernel
the <quote>&debian; way</quote>; but we find that using the packaging system
to manage your kernel is actually safer and easier. In fact, you can get
your kernel sources right from Linus instead of
<classname>linux-source-2.6</classname>,
yet still use the <classname>kernel-package</classname> compilation method.
</para><para>
Note that you'll find complete documentation on using
<classname>kernel-package</classname> under
<filename>/usr/share/doc/kernel-package</filename>. This section just
contains a brief tutorial.
</para><para>
Hereafter, we'll assume you have free rein over your machine and will
extract your kernel source to somewhere in your home directory<footnote>
<para>
There are other locations where you can extract kernel sources and build
your custom kernel, but this is easiest as it does not require special
permissions.
</para>
</footnote>. We'll also assume that your kernel version is
&kernelversion;. Make sure you are in the directory to where you want to
unpack the kernel sources, extract them using
<userinput>tar xf /usr/src/linux-source-&kernelversion;.tar.xz</userinput>
and change to the directory <filename>linux-source-&kernelversion;</filename>
that will have been created.
</para><para>
Now, you can configure your kernel. Run <userinput>make
xconfig</userinput> if X11 is installed, configured and being run; run
<userinput>make menuconfig</userinput> otherwise (you'll need
<classname>libncurses5-dev</classname> installed). Take the time to read
the online help and choose carefully. When in doubt, it is typically
better to include the device driver (the software which manages
hardware peripherals, such as Ethernet cards, SCSI controllers, and so
on) you are unsure about. Be careful: other options, not related to a
specific hardware, should be left at the default value if you do not
understand them. Do not forget to select <quote>Kernel module loader</quote>
in <quote>Loadable module support</quote> (it is not selected by default).
If not included, your &debian; installation will experience problems.
</para><para>
Clean the source tree and reset the <classname>kernel-package</classname>
parameters. To do that, do <userinput>make-kpkg clean</userinput>.
</para><para>
Now, compile the kernel:
<userinput>fakeroot make-kpkg --initrd --revision=1.0.custom kernel_image</userinput>.
The version number of <quote>1.0</quote> can be changed at will; this is just
a version number that you will use to track your kernel builds.
Likewise, you can put any word you like in place of <quote>custom</quote>
(e.g., a host name). Kernel compilation may take quite a while, depending on
the power of your machine.
</para><para>
Once the compilation is complete, you can install your custom kernel
like any package. As root, do
<userinput>dpkg -i
../&kernelpackage;-&kernelversion;-<replaceable>subarchitecture</replaceable>_1.0.custom_&architecture;.deb</userinput>.
The <replaceable>subarchitecture</replaceable> part is an optional
sub-architecture,
<phrase arch="i386"> such as <quote>686</quote>, </phrase>
depending on what kernel options you set.
<userinput>dpkg -i</userinput> will install the
kernel, along with some other nice supporting files. For instance,
the <filename>System.map</filename> will be properly installed
(helpful for debugging kernel problems), and
<filename>/boot/config-&kernelversion;</filename> will be installed,
containing your current configuration set. Your new
kernel package is also clever enough to automatically update your boot
loader to use the new kernel. If you have created a modules package,
you'll need to install that package as well.
</para><para>
It is time to reboot the system: read carefully any warning that the
above step may have produced, then <userinput>shutdown -r now</userinput>.
</para><para>
For more information on &debian; kernels and kernel compilation, see the
<ulink url="&url-kernel-handbook;">Debian Linux Kernel Handbook</ulink>.
For more information on <classname>kernel-package</classname>, read
the fine documentation in <filename>/usr/share/doc/kernel-package</filename>.
</para>
</sect2>
</sect1>
|