Linux 内核中的宏定义

本文详细介绍了Linux内核中用于汇编、Checker、attribute等方面的宏定义,如__user、__kernel、__iomem等。这些宏主要用于在内核开发中指定变量的属性,如地址空间、类型转换限制、引用计数等。此外,文章还提到了Sparse工具在内核代码检查中的作用,以及如何使用__acquires和__releases等宏确保引用计数的正确性。
摘要由CSDN通过智能技术生成

1. ASSEMBLY

关于__attribute__的宏定义在include\linux\compiler_types.h文件中,首先是宏__ASSEMBLY__,这是在编译阶段使用-D加上去的,也就是-D__ASSEMBLY__AFLAGS这个变量也定义了这个变量:如下:

$ grep AFLAGS `find -name Makefile` | grep __ASSEMBLY__
./arch/powerpc/boot/Makefile:BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -nostdinc
./arch/powerpc/platforms/cell/spufs/Makefile:SPU_AFLAGS	:= -c -D__ASSEMBLY__ -I$(srctree)/include -D__KERNEL__
./arch/mips/boot/compressed/Makefile:KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
./arch/arm64/kernel/vdso32/Makefile:VDSO_AFLAGS += -D__ASSEMBLY__
./arch/x86/boot/Makefile:KBUILD_AFLAGS	:= $(KBUILD_CFLAGS) -D__ASSEMBLY__
./arch/x86/boot/compressed/Makefile:KBUILD_AFLAGS  := $(KBUILD_CFLAGS) -D__ASSEMBLY__
./arch/x86/realmode/rm/Makefile:KBUILD_AFLAGS	:= $(KBUILD_CFLAGS) -D__ASSEMBLY__
./arch/s390/Makefile:KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
./Makefile:KBUILD_AFLAGS   := -D__ASSEMBLY__ -fno-PIE

用在这里,是因为汇编代码里,不会用到类似于__user这样的属性(关于__user这样的属性是怎么回子事,本文后面会提到),因为这样的属性是在定义函数的时候加的,这样避免不必要的在编译汇编代码时候的引用。

2. CHECKER

当编译内核代码的时候,使用make C=1或C=2的时候,会调用一个叫Sparse的工具,这个工具对内核代码进行检查,怎么检查呢,就是靠对那些声明过Sparse这个工具所能识别的特性的内核函数或是变量进行检查。在调用Sparse这个工具的同时,在Sparse代码里,会加上#define __CHECKER__ 1的字样。换句话说,就是,如果使用Sparse对代码进行检查,那么内核代码就会定义__CHECKER__宏,否则就不定义。

所以这里就能看出来,类似于__attribute__((noderef, address_space(1)))这样的属性就是Sparse这个工具所能识别的了。

接下来就正式进入__attribute__属性,

【文章福利】小编推荐自己的Linux内核技术交流群: 【977878001】整理一些个人觉得比较好得学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100进群领取,额外赠送一份 价值699的内核资料包(含视频教程、电子书、实战项目及代码)

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值