设为首页 收藏本站
查看: 1247|回复: 0

[经验分享] Centos 7 源码编译安装内核4.14.12

[复制链接]

尚未签到

发表于 2018-4-20 06:49:15 | 显示全部楼层 |阅读模式
  为什么要编译内核
  需要新功能的支持:
  在生产环境中,突然会需要使用一些新的功能,但是原有的内核并不支持此功能,这是就需要重新编译出一个新的内核来提供对此新功能的支持,比如虚拟化、iptables功能必须要在2.4.X以上版本的内核中才支持。
  原核心太过于臃肿:
  原来安装的内核中,有很多不常用甚至基本上用不到的功能支持,而这些功能又会使内核文件变得很大,这时要将此变成一个简化切功能够用的内核就需要进行重新编译。
  与硬件搭配的稳定性:
  很多情况下,系统内核中默认一般默认支持的CPU类型为Inter,但在其它厂商,如AMD或者是较新的CPU硬件上使用此系统,可能就不能很好的支持,且不稳定。因此就需要重新编译内核来支持最新的硬件驱动。
  其它特殊需求:
  linux除了在pc机上运行,当然也能支持一些其它设备,比如嵌入式的APM、智能手机等,这时或许就要进行重新编译支持的CPU架构来支持这些特殊需求。
  总结一点:kernel的作业就是所需要的硬件支持,因此在此基础上只加需要的功能,来实现内核文件的短小精干。
  实验环境:VMware Workstation Pro 14(试用版)
  系统平台:
  CentOS Linux release 7.4.1708 (Core)       内核  3.10.0-693.el7.x86_64
  步骤如下:
  内核源码官网,请下载标记为stable的版本
  https://www.kernel.org/
  本次编译的源码版本为
  
  stable:
  4.14.12
  2018-01-05


  1.准备编译环境
  a.至少准备10GB的磁盘剩余空间
  b.# yum -y groups install "Development Tools"
  # yum -y install ncurses-devel elfutils-libelf-devel bc openssl-devel.x86_64
  

  2.解压源码包
  #tar xvf linux-4.14.12.tar.xz
  源码包解压后的大小为979M
  3.在当前已经安装的系统中的/boot目录下存在一个名为conf-xxx 的文件,那个文件其实就是核心功能列表选择文件,如
  -rw-r--r--.  1 root root   140894 Aug 22 17:21 config-3.10.0-693.el7.x86_64
  copy当前系统内核中的config-xxx文件到需要编译的内核目录下。这一步不是必须的,可以用来参考之前系统的内核选项。
  #cp config-3.10.0-693.el7.x86_64 /kernel/linux-4.14.12
  

  4.所有操作均在源码编译目录内进行
  #cd /kernel/linux-4.14.12/
  

  编码内核选择界面(生成.config的方法):
  make help
  支持更新模式进行配置
  make menuconfig
  基于curses的文本窗口界面
  make gconfig
  基于GTK(GOME)环境窗口界面
  make xconfig
  基于QT(KDE) 环境的窗口界面
  make oldconfig
  透过已经存在的./.config文件内容,
  并使用该文件内设定值为默认值,
  只将新版本核心的新功能列出让用户选择,
  可以简化核心功能挑选过程。对与升级内核很好选择。
  make defconfig
  基于内核为目标平台执行提供的“默认”配置进行配置
  make allyesconfig
  所有选项均回答为”yes”
  make allnoconfig
  所有选项均回答为”no”
  make mrproper
  清理所有编译生成的文件、 config及某些备份文件
  make clean
  清理大多数编译生成的文件,但会保留config文件等
  make distclean
  mrproper、 patches以及编辑器备份文件
  

  5.使用make menuconfig 命令进行菜单化界面来选择内核功能:
DSC0000.jpg DSC0001.jpg

DSC0002.jpg

  左右箭头键:用来移动选择最下面的select、exit、help、save、load几个按钮
  上下箭头键:可移动上面的菜单来选中对应的功能选项,选项后与--> 表示内部有子菜单需要选择。
  选定项目:使用上下键选择设定的项目,并使用左右键选择select按钮,然后按回车就可进入项目中 的子菜单选择。
  挑选功能:在项目的功能名称前面,有 [ ]或者 < > 才可以使用 空格键 来选择。
  挑选说明:
[ ]: 不编译此项

[M]: 表示编译成模块,也就是存放在/lib/modules/内核版本号/

  < * > [ * ] : 表示编译进核心,也就是/boot下的vmlinuz-内核版本号  文件
  功能选择的建议:
  核心一定要的功能,直接编译进核心内;
  可能以后会用到的功能,尽量编译成模块;
  离开选择项:左右键选择Exit按回车即可
  一些编译项目如下:
  
  • 64-bit kernel  
      General setup  --->             基本的linux核心功能,最相关的驱动程序、版本说明 核心说明代码

  • Enable loadable module support  --->         模块加载和卸载
      -*- Enable the block layer  --->                 块设备的支持
       Processor type and features  --->            处理器类型和其功能选择
      Power management and ACPI options  --->      电源管理和ACPI选项
       Bus options (PCI etc.)  --->                 总线选项和PCI插槽
        Executable file formats / Emulations  --->   编译后执行档的格式

  • Networking support  --->           核心网络功能
      Device Drivers  --->                 设备驱动
      Firmware Drivers  --->
       File systems  --->                           文件系统的支持
       Kernel hacking  --->
      Security options  --->                 安全相关模块
      -*- Cryptographic API  --->

  • Virtualization  --->
      Library routines  --->
      这里以编译2个功能为演示
      (Hunk-2018v1.0) Local version - append to kernel release 追加内核版本
      
  • Automatically append version information to the version string   自动追加版本号
      DOS/FAT/NT Filesystems  ---> 核心层支持NTFS 文件系统格式读写

      都选择好核心功能后,记得选择SAVE保存
      

      6.编译
      要想快一点,可以查询当前系统CPU有几个核
      #lscpu
      CPU(s):                4
      为了防止意外发生,开启一个screen窗口,命令功能请自行man
      #screen -S kernel
      #make -j 4
      编译好之后的源码目录为9.8G
      #make -j 4 modules
      7.编译后安装
      #make modules_install
      #make install
      安装好之后,会在/boot内生成对应的内核相关文件
    DSC0003.jpg

      模块目录也会生成/lib/modules/4.14.12Hunk-2018v1.0
    DSC0004.jpg

      #cat /boot/grub2/grub.cfg
      menuentry 'CentOS Linux (4.14.12Hunk-2018v1.0) 7 (Core)'
      8.检查无误后,重启以便使用新内核

      #uname -r
      4.14.12hunk-2018-1.0
      至此,内核编译安装成功。
      

      编译中的一些选择
      全编译: make [-j #]
      编译内核的一部分功能:
      (a) 只编译某子目录中的相关代码
      进入源码文件夹内
      # make dir/   注意,不要进到那个需要编译指定部分功能的子目录。
      (b) 只编译一个特定的模块
      cd /usr/src/linux
      # make dir/file.ko
      例如:只为e1000编译驱动:
      # make drivers/net/ethernet/intel/e1000/e1000.ko
      

      卸载内核
       删除/lib/modules/目录下不需要的内核库文件
      #rm -rf 4.14.12hunk-2018-1.0/
       删除源码目录
       删除/boot目录下启动的内核和内核映像文件
      #rm *-4*
      rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img’? y
      rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img.gz’? y
      rm: remove regular file ‘System.map-4.14.12hunk-2018-1.0’? y
      rm: remove regular file ‘vmlinuz-4.14.12hunk-2018-1.0’? y
       更改grub的配置文件,删除不需要的内核启动列表
      # vim /boot/grub2/grub.cfg

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449311-1-1.html 上篇帖子: centos7安装confluence遇到的问题 下篇帖子: CentOS 7 编译安装LAMP
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表