内核源码包编译"/>
5.16.16内核源码包编译
一、内核编译背景
由于现有的内核没有开启ebpf和intel rdt相关的选项,所以需要自己编译支持这两个功能的内核,还需要内核支持一些常用的模块。
二、参考elrepo config-5.16.16-1.el7.elrepo.x86_64配置文件,如果没有可以自己找一个虚拟机安装5.16.16 elrerpo版本,配置会保存在/boot/config-5.16.16-1.el7.elrepo.x86_64
2.1、查看elrepo已经安装的内核文件数量(在已经安装好的系统中)
cd /lib/modules/5.16.16-1.el7.elrepo.x86_64/
- ko文件表示已经安装的内核和一些模块,一共4050个
find ./ -name "*.ko" |wc -l
4050
2.2、根据config-5.16.16-1.el7.elrepo.x86_64,自己下载5.16.16源码包,并安装elrepo的配置编译
1、下载linux-5.16.16.tar.xz 源码包
2、解压并进入
tar xf linux-5.16.16.tar.xz && cd linux-5.16.16
3、把elrepo的配置文件复制到当前的.config文件中:
cp config-5.16.16-1.el7.elrepo.x86_64 .config
4、把当前的配置反向编译到内核:
make oldconfig
make -j128 bzImage
make modules
make modules_install
make install
此时已经在当前操作系统安装好了5.16.16版本的内核:
重新设置内核的引用文件并重启:
#重新配置grub文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#查看当前内核的所有可选择的版本:
cat /etc/grub2.cfg |grep "menuentry"
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (5.16.16) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-5.16.16-advanced-162864d0-b0a8-4f83-a31a-5c61cc30a72c' {
menuentry 'CentOS Linux (5.16.16.old) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-5.16.16.old-advanced-162864d0-b0a8-4f83-a31a-5c61cc30a72c' {
menuentry 'CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-162864d0-b0a8-4f83-a31a-5c61cc30a72c' {
menuentry 'CentOS Linux (0-rescue-96cda20aadbd4c6abe909684b9082be7) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-96cda20aadbd4c6abe909684b9082be7-advanced-162864d0-b0a8-4f83-a31a-5c61cc30a72c' {#重新设置内核版本为5.16.16:
grub2-set-default 'CentOS Linux (5.16.16) 7 (Core)'
重启并确认当前的模块数:
reboot
此时会发现和elrepo一样的内核数量:
cd /lib/modules/5.16.16-1.el7.elrepo.x86_64/
- ko文件表示已经安装的内核和一些模块,一共4050个
find ./ -name "*.ko" |wc -l
4050
三、配置ebpf和intel rdt的配置:
ebpf需要开启的配置:
CONFIG_DEBUG_INFO_BTF
CONFIG_BPF
CONFIG_BPF_SYSCALL
CONFIG_BPF_JIT
CONFIG_BPF_LSM
CONFIG_X86_CPU_RESCTRL
通过对比现有的配置需要开启的配置有以下三个:
CONFIG_DEBUG_INFO_BTF
CONFIG_X86_CPU_RESCTRL
CONFIG_BPF_JIT
查看如何开启的方法:
Netfilter nf_tables tproxy support - CONFIG_NFT_TPROXY - nft_tproxy.ko - kernelconfig.io
开启ebpf内核配置的过程:
CONFIG_DEBUG_INFO_BTF
make menuconfig
QA:
1、解决 CONFIG_DEBUG_INFO_BTF 无法编译的错误: make -j 128
DESCEND objtool
DESCEND bpf/resolve_btfids
CALL scripts/atomic/check-atomics.sh
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
AR init/built-in.a
LD vmlinux.o
MODPOST vmlinux.symvers
MODINFO modules.builtin.modinfo
GEN modules.builtin
BTF: .tmp_vmlinux.btf: pahole version v1.9 is too old, need at least v1.16
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1161: vmlinux] Error 1解决方法:
去阿里云下载:
阿里巴巴开源镜像站-阿里云官网开发者社区_云计算社区
wget dwarves-1.17-1.el7.src镜像-dwarves-1.17-1.el7.src下载地址-dwarves-1.17-1.el7.src安装教程-阿里巴巴开源镜像站rpmbuild --rebuild dwarves-1.17-1.el7.src.rpm
rpm -evh libdwarves1-devel-1.10-1.el7.x86_64
rpm -evh libdwarves1-1.10-1.el7.x86_64
rpm -Uvh libdwarves1-1.17-1.el7.x86_64.rpm
rpm -Uvh dwarves-1.17-1.el7.x86_64.rpmpahole --version
v1.17
重新编译安装:
make -j128 bzImage
make modules
make modules_install
make install
重新设置内核链接并重启:
查看对应的配置开启情况:
cd /lib/modules/5.16.16/build
grep "BPF" .config |grep -v "^#"
CONFIG_BPF=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_BPF_LSM=y
CONFIG_CGROUP_BPF=y
CONFIG_NETFILTER_XT_MATCH_BPF=m
CONFIG_NET_CLS_BPF=m
CONFIG_NET_ACT_BPF=m
CONFIG_LWTUNNEL_BPF=y
CONFIG_BPF_EVENTS=y#CONFIG_DEBUG_INFO_BTF
grep "CONFIG_DEBUG_INFO_BTF" .config |grep -v "^#"
CONFIG_DEBUG_INFO_BTF=y#CONFIG_X86_CPU_RESCTRL
grep "CONFIG_X86_CPU_RESCTRL" .config |grep -v "^#"
CONFIG_X86_CPU_RESCTRL=y
rdt的配置开启情况(具体开启的步骤和EBPF CONFIG_X86_CPU_RESCTRL重合):
更多推荐
5.16.16内核源码包编译
发布评论