分享

zh/HowTos/I need the Kernel Source

 冬木*细雪 2015-04-05

我需要内核的源代码

英文版由 JohnnyHughes 创建。现时由 AlanBartlettAkemiYagi 维护。

1. 或许你不需要整个内核的源代码

如果你需要编译一个内核的驱动程序(模块),很可能你并不需要安装整个内核源代码。也许你只需要安装 kernel-devel 这个组件。(然而,假若你肯定须要完整的源代码目录树,请遁从第二部份的指示。)

CentOS-7 只有一个 kernel-devel 组件:

  • kernel-devel(64 位元的结构)

CentOS-6 只有一个 kernel-devel 组件:

  • kernel-devel(32 及 64 位元的结构)

CentOS-5 总共有三个 kernel-devel 组件:

  • kernel-devel(32 及 64 位元的结构)
  • kernel-xen-devel(32 及 64 位元的结构)
  • kernel-PAE-devel(只支持 32 位元的结构)

如果你使用标准内核(举个例说),你可以这样安装 kernel-devel:

[root@host]# yum install kernel-devel

你可以用这个指令来断定使用中的内核版本:

[root@host]# uname -r

它的输出会有以下的样子:

2.6.18-402.el5xen

在这个样例里,所安装的内核是 xen,而安装相关的 kernel-devel 组件的方法是:

[root@host]# yum install kernel-xen-devel

<!> 请确定你所安装的 kernel-devel 组件吻合你所采用的内核。详情请参阅这条常见问题

如果你的内核因为来自较旧的目录树而未被 yum 列出,你可以手动式地从 CentOS Vault下载它。

CentOS-7:请在 7.N.YYMM/os/???/Packages/ 或 7.N.YYMM/updates/???/Packages/ 目录内找寻 kernel-devel-版本.x86_64.rpm

CentOS-6:请在 6.N/os/arch/Packages/ 或 6.N/updates/arch/Packages/ 目录内找寻 kernel-devel-版本.结构.rpm

CentOS-5:请在 5.N/os/arch/CentOS/ 或 5.N/updates/arch/RPMS/ 目录内找寻kernel[-类型]-devel-版本.结构.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 的身份安装 rpm-build、redhat-rpm-config、asciidoc、hmaccalc、perl-ExtUtils-Embed、pesign、xmlto、audit-libs-devel、binutils-devel、elfutils-devel、elfutils-libelf-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 newt-devel numactl-devel pciutils-devel python-devel zlib-devel

从这些地方找寻内核的源代码组件:

(请以相关的副版本编号、年度及月份取代 N.YYMM。)

以一个不是 root的普通户口,执行以下指令来安装源代码组件:

[user@host]$ rpm -i http://vault./7.1.1503/updates/Source/SPackages/kernel-3.10.0-229.1.2.el7.src.rpm 2>&1 | grep -v exist


要在 CentOS-6 安装源代码组件及工具

以 root 的身份安装 rpm-build、redhat-rpm-config、asciidoc、hmaccalc、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 hmaccalc 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

从这些地方找寻内核的源代码组件:

(请以相关的副版本编号取代 N。)

以一个不是 root 用户的户口,执行以下指令来安装源代码组件:

[user@host]$ rpm -i http://vault./6.6/updates/Source/SPackages/kernel-2.6.32-504.12.2.el6.src.rpm 2>&1 | grep -v exist


要在 CentOS-5 安装源代码组件及工具

以 root 的身份安装 rpm-build、redhat-rpm-config 及 unifdef 组件:

[root@host]# yum install rpm-build redhat-rpm-config unifdef

从这些地方找寻内核的源代码组件:

(请以相关的更新版本编号取代 N。)

以一个不是 root 用户的户口,执行以下指令来安装源代码组件:

[user@host]$ rpm -i http://vault./5.11/updates/SRPMS/kernel-2.6.18-402.el5.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 229~ 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多