CentOS7 内核编译

CentOS 7 内核编译

本文是参考CentOS官网说明文件,详细内容请参考以下链接
https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source 内核源码生成
https://wiki.centos.org/zh/HowTos/Custom_Kernel 内核编译

原理

内核编译需要正确版本的内核源码,以及正确的内核选项。

  1. CentOS7的内核源码是通过rpm包生成的,如果需要内核源码来进行编译,直接安装rpm是不行的,还得配置一下。
  2. 有了正确的内核源码后,需要通过正确生成内核的.config文件,这样才能正确编译rpm包
  3. 对了,CentOS7是通过kernel*.rpm包来更新内核的

生成可编译的内核源码

  1. 需要安装一些开发库
 # yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
 # yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
 # yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
  1. 切换用户
  后续操作,使用非root用户进行后续操作,切记
  1. 在用户的home目录下创建一些目录,生成一些配置
   $ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
   $ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

4.安装源码组件,kernel-xxxxxxxxx.src.rpm请在 http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/
(请以相关的副版本编号、年度及月份取代 N.YYMM。)下载

  $ rpm -i kernel-xxxxxxxxx.src.rpm 2>&1 | grep -v exist
  1. 解压源码并生成源码
   $ cd ~/rpmbuild/SPECS
   $ rpmbuild -bp --target=$(uname -m) kernel.spec
  1. 现在内核的源代码目录树可以在 ~/rpmbuild/BUILD/kernel/linux/ 这个目录内找得到

编译内核

  1. 切换用户
后续操作,使用非root用户进行后续操作,切记
  1. 生成内核配置文件
    进到 ~/rpmbuild/BUILD/kernel-/linux-/ 目录,然后选择复制 configs/ 目录内的配置文件或 /boot/ 目录内的现有内核配置文件,并命名为 .config。
    这里选用了 /boot/目录内的配置,为了保持和现有的系统内核一致
  $ cd ~/rpmbuild/BUILD/kernel-*/linux-*/
  $ cp /boot/config-`uname -r` .config
  1. 设置内核
  $ make oldconfig   
  $ make menuconfig  设置你所需要的选项
接着在.config文件的第一行加入uname -i的输出,比如:x86_64,使文件第一行如下
# x86_64

注意 #号和文字之间有空格

修改完后更新config文件

$ cp .config configs/kernel-3.10.0-`uname -m`.config
$ cp configs/* ~/rpmbuild/SOURCES
  1. 更新spec文件,进入rpmbuild/SPECS目录,修改kernel.spec文件,替换如下行。
  # % define buildid .local  ----> %define buildid .xxxx
__注意__ 删除#号, %和define之间无空格,xxx自定义

5.编译内核
进入~/rpmbuild/SPECS目录

$ rpmbuild -bb --target=`uname -m` --without kabichk kernel.spec 2> build-err.log | tee build-out.log

漫长的编译后: ~/rpmbuild/RPMS/uname -m/ 目录内找到生成的rpm包们

安装和启动

1.使用root账户: yum localinstall ~/rpmbuild/RPMS/uname -m/kernel*.rpm

  1. 重启并加载新的内核,大功告成
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容