uname -a告诉“内核版本”是3.10.0
[root@iZbp16uggk8lf3x949ewxiZ ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@iZbp16uggk8lf3x949ewxiZ ~]# uname -a
Linux iZbp16uggk8lf3x949ewxiZ 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/LinuxLINUX_VERSION_CODE还说当前的内核版本是3.10.0
[root@iZbp16uggk8lf3x949ewxiZ ~]# grep -rni "LINUX_VERSION_CODE" /usr/include/
/usr/include/linux/version.h:1:#define LINUX_VERSION_CODE 199168但是当我找到一个核函数时,tcp_rtx_synack存在
[root@iZbp16uggk8lf3x949ewxiZ ~]# cat /proc/kallsyms | grep tcp_rtx_synack
ffffffff952a0700 t tcp_rtx_synack.part.26
ffffffff952a0730 T tcp_rtx_synack
ffffffff95721f90 r __ksymtab_tcp_rtx_synack
ffffffff95739e78 r __kcrctab_tcp_rtx_synack
ffffffff95765c36 r __kstrtab_tcp_rtx_synack3.17 辛纳克 func tcp_rtx_synack存在
3.16 辛纳克 func tcp_rtx_synack不存在
这意味着我的centos内核版本至少是3.17而不是3.10。
我正在编写eBPF,它需要更精确的内核版本信息,因为函数和数据结构与每个内核版本不同。
我在不同的云提供程序上购买了两个VM,两个VM都像上面这样显示。
发布于 2022-05-16 08:31:27
CentOS和RHEL一样,包含各种补丁的后端(特性、修复等)。到较旧的内核版本。因此,您不能依赖内核版本来知道哪些特性或函数可用。
相反,您可以从userspace (例如,使用bpftool feature probe)或用CO进行BTF检测。来探测可用的特性。
https://stackoverflow.com/questions/72256058
复制相似问题