LDP/LDP/retired/LFS/chapter06/kernel-exp-headers.xml

43 lines
2.0 KiB
XML

<sect2><title>&nbsp;</title><para>&nbsp;</para></sect2>
<sect2>
<title>Why we copy the kernel headers and don't symlink them</title>
<para>In the past it was common practice to symlink the
<filename class="directory">/usr/include/{linux,asm}</filename> directories
to <filename class="directory">/usr/src/linux/include/{linux,asm}</filename>.
This was a <emphasis>bad</emphasis> practice, as the following extract from a
post by Linus Torvalds to the Linux Kernel Mailing List points out:</para>
<screen>I would suggest that people who compile new kernels should:
- not have a single symbolic link in sight (except the one that the
kernel build itself sets up, namely the "linux/include/asm" symlink
that is only used for the internal kernel compile itself)
And yes, this is what I do. My /usr/src/linux still has the old 2.2.13
header files, even though I haven't run a 2.2.13 kernel in a _loong_
time. But those headers were what Glibc was compiled against, so those
headers are what matches the library object files.
And this is actually what has been the suggested environment for at
least the last five years. I don't know why the symlink business keeps
on living on, like a bad zombie. Pretty much every distribution still
has that broken symlink, and people still remember that the linux
sources should go into "/usr/src/linux" even though that hasn't been
true in a _loong_ time.</screen>
<para>The essential part is where Linus states that the header files should be
<emphasis>the ones which Glibc was compiled against</emphasis>. These are
the headers that should be used when you later compile other packages, as they
are the ones that match the object-code library files. By copying the headers,
we ensure that they remain available if later you upgrade your kernel.</para>
<para>Note, by the way, that it is perfectly all right to have the kernel sources
in <filename class="directory">/usr/src/linux</filename>, as long as you don't
have the <filename class="directory">/usr/include/{linux,asm}</filename>
symlinks.</para>
</sect2>