美文网首页
CentOS7 内核编译

CentOS7 内核编译

作者: 茫子 | 来源:发表于2017-12-08 17:02 被阅读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. 重启并加载新的内核,大功告成

    相关文章

      网友评论

          本文标题:CentOS7 内核编译

          本文链接:https://www.haomeiwen.com/subject/pyneixtx.html