5.16.16内核源码包编译

编程入门 行业动态 更新时间:2024-10-05 23:23:19

5.16.16<a href=https://www.elefans.com/category/jswz/34/1769575.html style=内核源码包编译"/>

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.rpm

pahole --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内核源码包编译

本文发布于:2024-02-28 09:53:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769373.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内核   源码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!