CentOS7 内核编译

2017-12-08  本文已影响0人  茫子

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. 重启并加载新的内核,大功告成
上一篇下一篇

猜你喜欢

热点阅读