Centos7 内核编译及 RPM 包的制作

Centos7 内核编译及 RPM 包的制作

源码编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
yum -y groups install "Development Tools"
yum install ncurses-devel make gcc bc openssl-devel

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.14.105.tar.gz

tar zxvf linux-4.14.105.tar.gz

cp /boot/config-`uname -r` ./linux-4.14.105/.config

cd linux-4.14.105

make menuconfig #进入后直接保存保存配置
make oldconfig

make kernelversion
make INSTALL_MOD_STRIP=1 all -j32

make INSTALL_MOD_STRIP=1 modules_install
# ls -lh /lib/modules

make INSTALL_MOD_STRIP=1 install
# ls -lh /boot

通过以上命令可以完成内核的编译。

Use the INSTALL_MOD_STRIP option for removing debugging symbols:

1
make INSTALL_MOD_STRIP=1 modules_install

打包 ——RPM

1
yum -y install rpm-build 
1
make rpm-pkg -j32 

编译完成在 ~/rpmbuild/RPMS/x86_64/ 目录下生成 rpm 安装包:

1
2
3
4
ls -lh ~/rpmbuild/RPMS/x86_64/
-rw-r--r-- 1 root root 515M 10月 10 06:28 /root/rpmbuild/RPMS/x86_64/kernel-4.14.105-1.x86_64.rpm
-rw-r--r-- 1 root root 135M 10月 10 06:30 /root/rpmbuild/RPMS/x86_64/kernel-devel-4.14.105-1.x86_64.rpm
-rw-r--r-- 1 root root 1.2M 10月 10 06:28 /root/rpmbuild/RPMS/x86_64/kernel-headers-4.14.105-1.x86_64.rpm

为啥 rpm 包这么大,官方 rpm 包一般五六十兆大小???

主要是编译生成的 ko 文件增大所致,应该包含了 debug 信息和符号表
make INSTALL_MOD_STRIP=1 rpm-pkg

安装

1
rpm -iUv ~/rpmbuild/RPMS/x86_64/kernel-*.rpm
1
yum install ~/rpmbuild/RPMS/x86_64/kernel-*.rpm

内核编译命令

编译内核生成 centos rpm 或 ubuntu deb 包

1
2
3
4
5
make rpm          #生成带源码的RPM包
make rpm-pkg #生成带源码的RPM包,同上
make binrpm-pkg #生成包含内核和驱动的RMP包
make deb-pkg #生成带源码的debian包
make bindeb-pkg #生成包含内核和驱动的debian包

rpm-pkg: 每次编译前会先 clean, 重复编译会很慢

linux 内核 make help:

1
2
3
4
5
6
7
8
9
10
11
12
13
Kernel packaging:
rpm-pkg - Build both source and binary RPM kernel packages
binrpm-pkg - Build only the binary kernel RPM package
deb-pkg - Build both source and binary deb kernel packages
bindeb-pkg - Build only the binary kernel deb package
tar-pkg - Build the kernel as an uncompressed tarball
targz-pkg - Build the kernel as a gzip compressed tarball
tarbz2-pkg - Build the kernel as a bzip2 compressed tarball
tarxz-pkg - Build the kernel as a xz compressed tarball
perf-tar-src-pkg - Build perf-4.14.105.tar source tarball
perf-targz-src-pkg - Build perf-4.14.105.tar.gz source tarball
perf-tarbz2-src-pkg - Build perf-4.14.105.tar.bz2 source tarball
perf-tarxz-src-pkg - Build perf-4.14.105.tar.xz source tarball
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
make clean            #删除编译中间文件,但是保留配置
make mrproper #删除包括配置文件的所有构建文件
make distclean #执行mrproper所做的一切,并删除备份文件

make menuconfig #文本图形方式配置内核
make oldconfig #基于当前的.config文件提示更新内核
make defconfig #生成默认的内核配置
make allmodconfig #所有的可选的选项构建成模块
make allyesconfig #生成全部选择是内核配置
make noconfig #生成全部选择否的内核配置

make all #构建所有目标
make bzImage #构建内核映像
make modules #构建所有驱动
make dir/ #构建指定目录
make dir/file.[s|o|i] #构建指定文件
make dir/file.ko #构建指定驱动

make install #安装内核
make modules_install #安装驱动

make xmldocs #生成xml文档
make pdfdocs #生成pdf文档
maek htmldocs #生成html文档

参考

我需要内核的源代码

我需要创建一个自设的内核

Building Source RPM as non-root under CentOS*

kernel 4.18.18 rpm 制作

Linux kernel 编译指南