【Linux 驱动根据LINUX_VERSION_CODE内核版本区分代码】

Linux 驱动根据LINUX_VERSION_CODE内核版本区分代码

实例代码:

#include <generated/uapi/linux/version.h>

#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 60)
        //LINUX kernel 小于5.10.60版本需要做的事情
#else
        //LINUX kernel 大于等于5.10.60版本需要做的事情
#endif

分析实例代码

Linux内核Makfile部分分析

#include <generated/uapi/linux/version.h>

头文件是编译kernel 内核的时候自动生成的。咱们可以打开我们使用内核的顶层Makefile,简化代码如下所示(关键部分已经通过注释进行解释)

#内核的顶层Makefile中部分代码
#version_h 指定要生成的version.h的路径
version_h := include/generated/uapi/linux/version.h
old_version_h := include/linux/version.h

$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
$(version_h): FORCE
	$(call filechk,version.h) #调用filechk函数生成version.h文件
	$(Q)rm -f $(old_version_h)#删除老文件

filechk 函数

filechk 定义在Linux内核 scripts/Kbuild.include中(作者使用的linux kernel 5.10.144,其他版本的kernel 内核相差不大)

 59 define filechk
 60         $(Q)set -e;                                             \
 61         mkdir -p $(dir $@);                                     \
 62         trap "rm -f $(dot-target).tmp" EXIT;                    \
 63         { $(filechk_$(1)); } > $(dot-target).tmp;               \
 64         if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then   \
 65                 $(kecho) '  UPD     $@';                        \
 66                 mv -f $(dot-target).tmp $@;                     \
 67         fi
 68 endef

该函数其实分析的意义不大,大家只要知道是定成Makefile调用filechk函数生成version.h文件即可

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值