预计所需编译时间: 0.1 SBU 预计所需硬盘空间: 186 MB |
Linux 内核是每一个Linux系统的心脏,它为系统提供生命的脉搏。当打开计算机电源并且引导Linux系统时,最先载入载入的Linux软件就是内核。内核初始化系统的硬件组件,诸如:串口、并口、声卡、网卡IDE控制器、SCSI控制器等等。简而言之,内核让软件能够在硬件上得以运行。
安装的文件: 内核和内核头文件
Linux 依赖于: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.
我们不是要在这里编译一个新内核,这个工作会在完成本章的基本系统软件的进行。由于某些软件需要内核头文件,所以我们现在将内核压缩包解开,拷贝头文件,以便那些需要它们的软件包能找到。
有一个很重要的注意事项,内核源码目录里的文件所有者并不是root. 当你用root来解压一个软件包时(比如我们这里在chroot环境中做的), 解出来的文件最后会拥有打包者电脑上的用户ID和组ID。通常来说,这对于你安装的其他软件包并不是一个大问题,因为你在安装完了以后会删除源码,但是内核头文件总是在机子上保存很长时间,所以就有可能某个用户偶然被分配了相同的ID,他就会拥有对内核头文件的写权限了。
出于这个考虑,你可能想对linux-2.4.22目录运行 chown -R 0:0 命令,确保所有文件都属于root.
为安装头文件做准备:
make mrproper |
这条命令确保内核树(kernel tree)是绝对干净的。内核开发组建议在每次编译内核之前都要运行这个命令,即使是你刚把压缩包解开,最好也运行一下,因为你不能确定打包的文件是绝对干净的。
创建include/linux/version.h 文件:
make include/linux/version.h |
创建特定平台的符号链接 include/asm:
make symlinks |
安装特定平台的头文件:
cp -HR include/asm /usr/include cp -R include/asm-generic /usr/include |
安装跨平台的内核头文件:
cp -R include/linux /usr/include |
有少数几个内核头文件会使用autoconf.h这个头文件。因为我们还没有配置内核,我们需要自己创建这个文件,以避免编译错误。创建一个空的autoconf.h文件:
touch /usr/include/linux/autoconf.h |
过去人们通常是创建从 /usr/include/{linux,asm} 目录到 /usr/src/linux/include/{linux,asm} 的符号链接。这是一种不好的行为,在下面 Linus Torvalds (Linux之父)写到 Linux Kernel Mailing List 信的节选中说:
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. |
Linus 所说的精华部份是头文件应该是 glibc 编译时链接到的. 我们这里的头文件是你后面编译其它包时要用到的,因为它们是与对象(object-code)库文件相匹配的。通过拷贝头文件,我们保证它们在你以后升级内核后能继续使用它们。
注意,附带着说一句,内核代码在 /usr/src/linux 目录里是能正确使用的,只要你没有创建 /usr/include/{linux,asm} 的符号链接。