本文参考于CentOS官网的《I need the Kernel Source》。
1. 或许你不需要整个内核的源代码
如果你只是需要编译一个内核的驱动程序(模块),很可能你并不需要安装整个内核源代码。只需要安装 kernel-devel 这个组件即可(然而,假若你需要完整的源代码目录树,请看第二部分)。
运行下面的命令即可安装 kernel-devel 组件:
[root@host]# yum install kernel-devel
安装成功后,便可编译你的模块了。
但这样安装后是看不到内核源代码的,内核目录下全都是kconfig和makefile文件。
2. 如果你真的需要整个内核的源代码
如果你真的因为某个原因需要整个内核的源代码,它是有被提供的。
以一个 不是 root 的用户,创建一个以 ~/rpmbuild 为基础的目录树:
以一个 不是 root 的用户,创建一个以 ~/rpmbuild 为基础的目录树:
[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
CentOS官网是不建议以 root 的身份创建这个目录的。(见:
http://www.owlriver.com/tips/non-root/)
要在 CentOS-7 安装源代码组件及工具:
以 root 的身份安装 rpm-build、redhat-rpm-config、asciidoc、hmaccalc、perl-ExtUtils-Embed、pesign、xmlto、audit-libs-devel、binutils-devel、elfutils-devel、elfutils-libelf-devel、ncurses-devel、newt-devel、numactl-devel、pciutils-dedvel、python-devel 及 zlib-devel 组件:
[root@host]# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
[root@host]# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
[root@host]# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
可以到下面这个链接下载内核源代码组件:
以一个不是 root的普通户口,执行以下指令来安装源代码组件:
[user@host]$ rpm -i http://vault.centos.org/7/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm 2>&1 | grep -v exist
要在 CentOS-6 安装源代码组件及工具:
以 root 的身份安装 rpm-build、redhat-rpm-config、asciidoc、bison、hmaccalc、patchutils、perl-ExtUtils-Embed、xmlto、audit-libs-devel、binutils-devel、elfutils-devel、elfutils-libelf-devel、newt-devel、python-devel 及 zlib-devel 组件:
[root@host]# yum install rpm-build redhat-rpm-config asciidoc bison hmaccalc patchutils perl-ExtUtils-Embed xmlto
[root@host]# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
[root@host]# yum install newt-devel python-devel zlib-devel
以一个不是 root 用户的户口,执行以下指令来安装源代码组件:
[user@host]$ rpm -i http://vault.centos.org/6.9/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm 2>&1 | grep -v exist
现在源代码组件已经安装了,请解压及预备源代码文件:
[user@host]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
$(uname -m) 这个值将目标结构设置为你的现有内核的结构。一般来说这是可行的,因为多数人的系统框架都是i686 或 x86_64。
现在内核的源代码目录树可以在 ~/rpmbuild/BUILD/kernel*/linux*/ 这个目录内找得到。