Linux基础之CentOS7.3内核编译

Linux基础之内核编译

内核介绍

  • 在我们的Linux世界虽然版本众多,但是内核却不变
  • 内核就像我们人类的大脑负责,负责整个系统的运行
  • 这次告诉大家怎么编译Linux内核
  • 我们普通光盘里面的内核是已经编译好的,如CentOS ,乌班图,Debian,等等
  • 他们虽然版本各异,但是他们内核都一样
  • 在出厂的时候编译好的内核,已最稳定的方式来编译,所以关闭了很多功能
  • 有些功能我们需要用如今天给大家演示Windows的NTFS文件系统Linux有但是只是出厂的时候没打开
  • 当然编译系统很浪费时间,他还得看计算机的性能,时间的长短也就决定了你的计算机的速度
  • 那我们开始吧

内核编译

  • 编译内核我们首先得要内核包吧
  • 我们可以去www.kernel.org去下载
  • 可以自己选择自己喜欢的内核来编译
  • 我今天这里编译的是最新版linux-4.12.tar.xz版本

环境检查

  • 想要编译得需要编译环境
  • 怎么创建环境
  • 那就是你的yum源和开发组工具包

检查yum源

  • 关于yum的详细配置就不过多介绍
  • 但是我会说说如何检查
  • 命令行输入yum clean all 清除缓存
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel
Cleaning up everything
Cleaning up list of fastest mirrors
  • 命令行输入yum makecache载入缓存
[root@localhost ~]# yum makecache
Loaded plugins: fastestmirror
base                                                 | 3.6 kB     00:00     
epel                                                 | 4.3 kB     00:00     
(1/9): base/group_gz                                   | 155 kB   00:00     
(2/9): base/filelists_db                               | 6.6 MB   00:00     
(3/9): base/other_db                                   | 2.4 MB   00:00     
(4/9): epel/group_gz                                   | 170 kB   00:00     
(5/9): base/primary_db                                 | 5.6 MB   00:00     
(6/9): epel/updateinfo                                 | 757 kB   00:00     
(7/9): epel/filelists_db                               | 7.6 MB   00:00     
(8/9): epel/other_db                                   | 2.1 MB   00:00     
(9/9): epel/primary_db                                 | 4.6 MB   00:00     
Determining fastest mirrors
Metadata Cache Created
  • 如果中间出现错误要好好检查自己的源是否配置完成
  • 还是你用的源有问题等等

开发组包安装或检查

  • 开发组包很重要有GCC等等出名的开发包软件
  • 首先检查你的电脑是否已安装开发包组,Development Tools 这个包组
  • 命令行输入yum grouplist
  • 下面显示我电脑已经安装开发包组
  • Installed Groups 已安装的组 的意思
  • 其他包组不过多介绍
  • 那怎么看电脑有没有安装包组,那就是看Development Tools 就可以了
[root@localhost ~]# yum grouplist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   MATE Desktop
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups: <<<<<<<<<<已安装的包组
   Development Tools
Available Groups:
   CIFS file server
   Compatibility Libraries
   Console Internet Tools
   Desktop
   Desktop Platform
   Desktop Platform Development
   Eclipse
   Educational Software
   Electronic Lab
   FCoE Storage Client
   Fedora Packager
   General Purpose Desktop
   Graphical Administration Tools
   Haskell
   Legacy UNIX Compatibility
   Messaging Client Support
   Messaging Server Support
   Milkymist
   MySQL Database client
   MySQL Database server
   NFS file server
   Network Storage Server
   SNMP Support
   Scientific Support
   Security Tools
   Server Platform
   Server Platform Development
   Smart Card Support
   Storage Availability Tools
   System Administration Tools
   System Management
   TeX support
   TurboGears application framework
   Virtualization
   Web-Based Enterprise Management
   Xfce
   iSCSI Storage Client
Done

开始编译

  • 由于我是用虚拟机演示
  • 需要上传内核,上次命令rz 这个命令是自己用包安装才有
  • 编译的时候千万要注意下自己的硬盘的容量用df 查看下
  • 因为编译的时候会出现很大量的数据流动会到达10G以上
  • 当然你功能越多内核就越大,看个人习惯

编译事项

  • 内核编译很多东西是和硬件相关的如、网卡、声卡、硬盘,文件系统驱动,大部分是很多和硬件打交道的功能和模块
  • 这里我们是用菜单选项来编译,我们在他的基础之上来编译
  • 在出厂的时候没有NTFS,我们就在他的基础上加个NTFS就可以了
  • 那怎么加,我们可以参考当前操作系统
  • 那怎么参考,在/boot下面有个vmlinuz-3.10.0-327.el7.x86_64,我们可以参考他来编译,在他现有的模板之上加个NTFS,或等等功能
- [root@localhost ~]# ll /boot/vmlinuz-3.10.0-327.el7.x86_64 
-rwxr-xr-x. 1 root root 5156528 Nov 19  2015 /boot/vmlinuz-3.10.0-327.el7.x86_64
- 那为什么要用他,因为这个模板对应的有个配置文件在/boot/config 里面,里面给我们说了当前那些模块打到里面去了,那些没有打进去
[root@localhost ~]# ll /boot/config-3.10.0-327.el7.x86_64 
-rw-r--r--. 1 root root 126426 Nov 19  2015 /boot/config-3.10.0-327.el7.x86_64
  • 注意他的功能启用方式有两种,一种是打到/boot/vmlinu文件里面去,还有些不是常用的我们可以放到/lib/modules里面,这里目录里面也放了一些驱动模块
  • 编译内核你可以放到核心文件里也可以放在模块里面,还有一个选择就是不要这个功能

编译开始

  • 那我们开始
  • 我的内核包已经上传到我虚拟机里面的家目录里面
[root@localhost ~]# ls
anaconda-ks.cfg  linux-4.12.tar.xz
  • 我们来看下他的大小用ll -h命令
[root@localhost ~]# ll
total 96868
-rw-------. 1 root root     1147 Jul  5 17:13 anaconda-ks.cfg
-rw-r--r--. 1 root root 99186576 Jul 11 08:47 linux-4.12.tar.xz
4.12.tar.xz
  • 我们先解压内核包用tar xfv命令,由于界面过长截图最后一张
[root@localhost ~]# tar xfv linux-4.12.tar.xz 
linux-4.12/virt/kvm/arm/vgic/vgic-v3.c
linux-4.12/virt/kvm/arm/vgic/vgic.c
linux-4.12/virt/kvm/arm/vgic/vgic.h
linux-4.12/virt/kvm/async_pf.c
linux-4.12/virt/kvm/async_pf.h
linux-4.12/virt/kvm/coalesced_mmio.c
linux-4.12/virt/kvm/coalesced_mmio.h
linux-4.12/virt/kvm/eventfd.c
linux-4.12/virt/kvm/irqchip.c
linux-4.12/virt/kvm/kvm_main.c
linux-4.12/virt/kvm/vfio.c
linux-4.12/virt/kvm/vfio.h
linux-4.12/virt/lib/
linux-4.12/virt/lib/Kconfig
linux-4.12/virt/lib/Makefile
linux-4.12/virt/lib/irqbypass.c
 
  • 解压完毕以后可以用ls命令查看
[root@localhost ~]# ls
anaconda-ks.cfg  linux-4.12  linux-4.12.tar.xz
  • 还可以用du -sh命令查看下解压的文件有多大
[root@localhost ~]# du -sh linux-4.12
842M    linux-4.12

编译功能模块

  • 在/boot/config下 这是我们生成功能模块的配置文件,在里面已经启动了一些功能,或没有启用的
 [root@localhost boot]# ls /boot/config-3.10.0-327.el7.x86_64 
/boot/config-3.10.0-327.el7.x86_64
  • 用vim命令打开,我们进里面去看下
[root@localhost boot]# vim  /boot/config-3.10.0-327.el7.x86_64 
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 3.10.0-327.el7.x86_64 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
  • y的意思是打到核心文件里面,那就是打到vmlinuz里面去了
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
  • #号开头的就是功能没启动
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
  • m 的就是打到模块里
  • 我们这篇是要添加NTSF,我们看看NTFS是什么状态
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
# CONFIG_NTFS_FS is not set    《《《没有启用状态

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
  • 那接下来我们来如何利于这个模板,编译安装
  • 说简单来就是直接把他,复制到我们刚才解压缩的路径
  • 用cp命令,注意复制的时候一定要改名
[root@localhost boot]# cp  /boot/config-3.10.0-327.el7.x86_64  /root/linux-4.12/.config
  • 复制和改名成功以后接下来我们用比较直观的菜单来定制内核选项
  • 首先切入我们解压的那个文件夹下面,然后执行命令make menuconfig
  • 执行这个命令需要安装ncurses-devel 才能打开菜单 ,因为他是个图形界面
  • 安装玩以后在执行mek menuconfig 命令,但是你用的是CRT或者是Xshell必须全屏不然打不开,这个软件
snipaste_20170712_171649.png
  • 带箭头的就表示他地下有子菜单
  • 在菜单里面*就是打到核心里面吗,M开头就是模块里面,什么都没有表示没有启用
  • 接下来我们来改文件系统,选择File systems项
snipaste_20170712_171658.png
  • 进入以后我们选择DOS/FAT/NT选项以后在回车
snipaste_20170712_171705.png
  • 回车以后在里面选择NTFS选项,用空格来切换来选择打到核心还是模块里面
  • 我们已模块的方式来进行
snipaste_20170712_171718.png
  • 选择完毕以后用EXC退出,如果你改动了他会提示你保存按yes就可以了
snipaste_20170712_171731.png
  • 这时候配置文件已经存到新的.config文件里面去了
  • 如果有兴趣可以比较下,这里不过多操作
  • 接下来正在进入编译过程中,时间很长,耐心等待,可能编译过程中,会遇到很多问题,耐心解决
  • 进入编译过程之前,我们先看下我们几颗CPU,用lscpu
[root@localhost linux-4.12]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
Stepping:              9
CPU MHz:               2594.107
BogoMIPS:              5188.21
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3
  • 我一共4颗,4线程的方式,为了计算速度我会全用上
  • 用命令make -j 4 ,但是一定要在我们解压的文件夹里面运行
  • 好了走起
[root@localhost linux-4.12]# make -j 4
  • 运气不好没有第一次成功,他的意思是缺少包,那我们就安装
  HOSTCC  scripts/sign-file
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
 #include <openssl/opensslv.h>
  • 他说的是缺少 openssl-devel这个包
- [root@localhost linux-4.12]# yum -y install openssl-devel
  • 好了在走起

  • 编译完成我好像花了快30分钟

  IHEX2FW firmware/emi26/firmware.fw
  IHEX2FW firmware/emi26/bitstream.fw
  IHEX2FW firmware/emi62/loader.fw
  IHEX2FW firmware/emi62/bitstream.fw
  IHEX2FW firmware/emi62/spdif.fw
  IHEX2FW firmware/emi62/midi.fw
  H16TOFW firmware/edgeport/boot.fw
  H16TOFW firmware/edgeport/boot2.fw
  H16TOFW firmware/edgeport/down.fw
  H16TOFW firmware/edgeport/down2.fw
  IHEX2FW firmware/whiteheat_loader.fw
  IHEX2FW firmware/whiteheat.fw
  IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
  IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
  • 接下来开始安装运行make modules_install
[root@localhost linux-4.12]# make modules_install
  • 接下他们会安装在/lib/modules里面,看里面已经有了两个内核,这只是文件复制还没有安装
[root@localhost linux-4.12]# ls /lib/modules
3.10.0-327.el7.x86_64  4.12.0-1.0-li-linux
  • 接下来我们要把内核拷贝到我们/boo下,同时修改grub文件
  • 执行命令make intsall
[root@localhost linux-4.12]# make install
sh ./arch/x86/boot/install.sh 4.12.0-1.0-li-linux arch/x86/boot/bzImage \
    System.map "/boot"
  • 我来重启运行reboot
snipaste_20170712_171740.png
  • 第一条就是我编译的内核

  • 编译内核完成

  • 虽然内核编译内核完成但是我们系统里面的程序不知道支持新内核不

  • 所以生产过程中,升级内核需要谨慎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容