基于发行版本内核打造自己的内核

Linux当中最核心的部分就是内核,这个也是最基础,最可能被忽视的一部分,随便找一个刚入职的运维,学习个两三天,网上找些资料也能能自己安装编译内核了,很多运维的初期培训就是做的这些学习,为什么在网上已经有这么多文章的情况下,还要写一篇关于内核的文章,这是因为,我想讲的是如何去选择内核

一般来说,找内核的时候都会去下面这个网站进行选择

https://www.kernel.org/

很多人在问我的时候,都会问,我该怎么去选择哪个版本的内核,一般来说我的回答是这样的

选取最后一个长期支持版本,或者最后一个稳定的版本

一般来说,选择这两个版本基本不会出太大的问题,并且即使有问题,后面做小版本的升级也不是很难的事情,当然这是基于你对自定义内核很有兴趣,或者需要自己去裁剪,增加一些东西的时候,用我上面说的两个版本都没有问题,下面是一个其他的选择

最近把linus的just for fun看完了,也基本上了解了linux大概的发展历程,linux走向成功也有一定的原因是围绕在其周围的一些商业公司,红帽是其中最成功的一个公司,当然还有其他各种发型版本,开源版本和商业版本的最大区别在于服务上面,商业公司能够提供专业的服务,开源并不意味着免费,其中很大一部分是学习成本,然后其次就是包装和推广了,最终才是一个完整的产品

开源有开源的规矩,当然这个规矩在中国不一定行得通,大部分公司不会将开源修改的东西回馈回去,而能够回馈回去的,基本都是技术非常领先的公司,这些公司核心在于自己的技术,以及对产品的把控,所以也就不介意源代码的开源了,并且乐意去引领行业的发展

当然这个对于红帽这样级别的公司,代码当然是会开源的,而其发行版本的内核,其实都是经过了一些修改的,并且这些修改也都是会开源出来的,只是大部分时候我们并没有去关注它,这就是本篇的重点

获取源代码

http://vault.centos.org/7.2.1511/os/Source/SPackages/

centos版本

红帽的内核源码之前托管在ftp上的,现在全部放到了订阅中心了,这里进入红帽订阅中心,进行rpm包的搜索,找到需要的部分,选择下载即可

https://access.redhat.com/downloads/content/kernel/3.10.0-514.el7/x86_64/fd431d51/package

image_1b39jfbj2178udi87sdptj13809.png-137.5kB

这里我们是要选择的是源码包,因为可能需要自己加些内核模块进去
安装源码包

1
rpm -ivh kernel-3.10.0-514.el7.src.rpm 

安装后默认会放到下面的目录下面,如果你有自定义的目录,也可以直接解压rpm,解压的方法是,下面命令默认会将文件解压到当前目录

1
rpm2cpio kernel-3.10.0-514.el7.src.rpm |cpio -div

检查文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@lab8106 ~]# ll  /root/rpmbuild/SOURCES/
total 82804
-rwxr-xr-x 1 root root 3118 Oct 19 23:20 check-kabi
-rw-r--r-- 1 root root 150 Oct 19 23:20 cpupower.config
-rw-r--r-- 1 root root 294 Oct 19 23:20 cpupower.service
-rw-r--r-- 1 root root 0 Oct 19 23:20 extra_certificates
-rw-r--r-- 1 root root 121660 Oct 19 23:20 kernel-3.10.0-ppc64.config
-rw-r--r-- 1 root root 121951 Oct 19 23:20 kernel-3.10.0-ppc64-debug.config
-rw-r--r-- 1 root root 121229 Oct 19 23:20 kernel-3.10.0-ppc64le.config
-rw-r--r-- 1 root root 121531 Oct 19 23:20 kernel-3.10.0-ppc64le-debug.config
-rw-r--r-- 1 root root 58278 Oct 19 23:20 kernel-3.10.0-s390x.config
-rw-r--r-- 1 root root 57895 Oct 19 23:20 kernel-3.10.0-s390x-debug.config
-rw-r--r-- 1 root root 30834 Oct 19 23:20 kernel-3.10.0-s390x-kdump.config
-rw-r--r-- 1 root root 137690 Oct 19 23:20 kernel-3.10.0-x86_64.config
-rw-r--r-- 1 root root 137991 Oct 19 23:20 kernel-3.10.0-x86_64-debug.config
-rw-rw-r-- 1 root root 8582 Oct 19 22:19 kernel-abi-whitelists-514.tar.bz2
-rw-rw-r-- 1 root root 83660860 Oct 19 22:19 linux-3.10.0-514.el7.tar.xz
-rw-r--r-- 1 root root 0 Oct 19 23:20 linux-kernel-test.patch
-rw-r--r-- 1 root root 1757 Oct 19 23:20 Makefile.common
-rw-r--r-- 1 root root 34277 Oct 19 23:20 Module.kabi_ppc64
-rw-r--r-- 1 root root 34277 Oct 19 23:20 Module.kabi_ppc64le
-rw-r--r-- 1 root root 31748 Oct 19 23:20 Module.kabi_s390x
-rw-r--r-- 1 root root 36881 Oct 19 23:20 Module.kabi_x86_64
-rw-r--r-- 1 root root 1198 Oct 19 23:20 rheldup3.x509
-rw-r--r-- 1 root root 1176 Oct 19 23:20 rhelkpatch1.x509
-rw-r--r-- 1 root root 977 Oct 19 23:20 securebootca.cer
-rw-r--r-- 1 root root 899 Oct 19 23:20 secureboot.cer
-rwxr-xr-x 1 root root 507 Oct 19 23:20 sign-modules
-rw-r--r-- 1 root root 361 Oct 19 23:20 x509.genkey

##打包内核

如果需要修改默认的内核选项,就修改这个文件

1
vim /root/rpmbuild/SOURCES/kernel-3.10.0-x86_64.config

然后开始编译内核rpm包

1
rpmbuild -ba /root/rpmbuild/SPECS/kernel.spec 

然后内核包就生成了,在下面目录当中取rpm包即可

/root/rpmbuild/RPMS/x86_64/