source: chapter06/kernel-headers.xml@ 9da62ab

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.0 6.1 6.1.1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk v5_1 v5_1_1 xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 9da62ab was 2081905, checked in by Alex Gronenwoud <alex@…>, 20 years ago

Simplifying the second copying of the kernel headers.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@3229 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 3.3 KB
Line 
1<sect1 id="ch-system-kernel-headers">
2<title>Installing Linux-&kernel-version; headers</title>
3<?dbhtml filename="kernelheaders.html" dir="chapter06"?>
4
5<screen>&buildtime; &kernel-time-headers;
6&diskspace; &kernel-compsize-headers;</screen>
7
8<sect2><title>&nbsp;</title><para>&nbsp;</para></sect2>
9
10<sect2>
11<title>Installation of the kernel headers</title>
12
13<para>We won't be compiling a new kernel yet -- we'll do that when we have
14finished the installation of all the packages. But the libraries installed in
15the next section need to refer to the kernel header files in order to know how
16to interface with the kernel. Instead of unpacking the kernel sources again,
17making the version file and the symlinks and so on, we will simply copy the
18headers from the temporary tools directory in one swoop:</para>
19
20<screen><userinput>cp -a /tools/include/{asm,asm-generic,linux} /usr/include</userinput></screen>
21
22<para>A few kernel header files refer to the <filename>autoconf.h</filename>
23header file. Since we have not yet configured the kernel, we need to create
24this file ourselves in order to avoid a compilation failure of Sysklogd.
25Create an empty <filename>autoconf.h</filename> file with:</para>
26
27<screen><userinput>touch /usr/include/linux/autoconf.h</userinput></screen>
28
29</sect2>
30
31<sect2><title>&nbsp;</title><para>&nbsp;</para></sect2>
32
33<sect2>
34<title>Why we copy the kernel headers</title>
35
36<para>In the past it was common practice to symlink the
37<filename class="directory">/usr/include/{linux,asm}</filename> directories
38to <filename class="directory">/usr/src/linux/include/{linux,asm}</filename>.
39This was a <emphasis>bad</emphasis> practice, as the following extract from a
40post by Linus Torvalds to the Linux Kernel Mailing List points out:</para>
41
42<screen>I would suggest that people who compile new kernels should:
43
44 - not have a single symbolic link in sight (except the one that the
45 kernel build itself sets up, namely the "linux/include/asm" symlink
46 that is only used for the internal kernel compile itself)
47
48And yes, this is what I do. My /usr/src/linux still has the old 2.2.13
49header files, even though I haven't run a 2.2.13 kernel in a _loong_
50time. But those headers were what Glibc was compiled against, so those
51headers are what matches the library object files.
52
53And this is actually what has been the suggested environment for at
54least the last five years. I don't know why the symlink business keeps
55on living on, like a bad zombie. Pretty much every distribution still
56has that broken symlink, and people still remember that the linux
57sources should go into "/usr/src/linux" even though that hasn't been
58true in a _loong_ time.</screen>
59
60<para>The essential part is where Linus states that the header files should be
61<emphasis>the ones which Glibc was compiled against</emphasis>. These are
62the headers that should be used when you later compile other packages, as they
63are the ones that match the object-code library files. By copying the headers,
64we ensure that they remain available if later you upgrade your kernel.</para>
65
66<para>Note, by the way, that it is perfectly all right to have the kernel sources
67in <filename class="directory">/usr/src/linux</filename>, as long as you don't
68have the <filename class="directory">/usr/include/{linux,asm}</filename>
69symlinks.</para>
70
71</sect2>
72
73</sect1>
74
Note: See TracBrowser for help on using the repository browser.