我需要内核的源代码
英文版由 JohnnyHughes 创建。现时由 AlanBartlett 及 AkemiYagi 维护。
Contents
1. 或许你不需要整个内核的源代码
如果你需要编译一个内核的驱动程序(模块),很可能你并不需要安装整个内核源代码。也许你只需要安装 kernel-devel 这个组件。(然而,假若你肯定须要完整的源代码目录树,请遁从第二部份的指示。)
CentOS-7 只有一个 kernel-devel 组件:
- kernel-devel(64 位元的结构)
(请留意 AltArch i386 特别兴趣小组提供 32 位元 CentOS-7。)
你可以这样安装 kernel-devel 组件:
[root@host]# yum install kernel-devel
如果你的内核因为来自较旧的目录树而未被 yum 列出,你可以手动式地从 CentOS Vault下载它。
请在 7.N.YYMM/os/x86_64/Packages/ 或 7.N.YYMM/updates/x86_64/Packages/ 目录内找寻 kernel-devel-版本.x86_64.rpm
当你安装了合适的 kernel[-类型]-devel-版本.结构.rpm 组件,请尝试编译你的模块。这样做是应该行得通的。假若事实并非如此,请提供反馈给模块的开发者,因为这是设计所有新内核模块时应采用的编译方式。
2. 如果你真的需要整个内核的源代码
如果你真的因为某个原因需要整个内核的源代码,它是有被提供的。
以一个不是 root 用户的户口,创建一个以 ~/rpmbuild 为基础的目录树:
[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} [user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
我们强烈推荐你不要以 root 的身份创建组件。(见:Building Source RPM as non-root under CentOS)
要在 CentOS-7 安装源代码组件及工具:
以 root 的身份安装 asciidoc、audit-libs-devel、bash、bc、binutils、binutils-devel、bison、diffutils、elfutils、elfutils-devel、elfutils-libelf-devel、findutils、flex、gawk、gcc、gettext、gzip、hmaccalc、hostname、java-devel、m4、make、module-init-tools、ncurses-devel、net-tools、newt-devel、numactl-devel、openssl、patch、pciutils-devel、perl、perl-ExtUtils-Embed、pesign、python-devel、python-docutils、redhat-rpm-config、rpm-build、sh-utils、tar、xmlto、xz 及 zlib-devel 组件:
[root@host]# yum install asciidoc audit-libs-devel bash bc binutils binutils-devel bison diffutils elfutils [root@host]# yum install elfutils-devel elfutils-libelf-devel findutils flex gawk gcc gettext gzip hmaccalc hostname java-devel [root@host]# yum install m4 make module-init-tools ncurses-devel net-tools newt-devel numactl-devel openssl [root@host]# yum install patch pciutils-devel perl perl-ExtUtils-Embed pesign python-devel python-docutils redhat-rpm-config [root@host]# yum install rpm-build sh-utils tar xmlto xz zlib-devel
从这些地方找寻内核的源代码组件:
(请以相关的副版本编号、年度及月份取代 N.YYMM。)
以一个不是 root的普通户口,执行以下指令来安装源代码组件:
user@host]$ rpm -i http://vault.centos.org/7.9.2009/updates/Source/SPackages/kernel-3.10.0-1160.11.1.el7.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*/ 这个目录内找得到。
Translation of revision 377