source: chapter06/kernel-headers.xml@ e23384c4

Last change on this file since e23384c4 was 673b0d8, checked in by Matthew Burgess <matthew@…>, 20 years ago
  • Merged newxml into HEAD

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

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