在我看Per CPU 变量的过程中偶遇一个方法,记录一下。
原文:微信文章
我观察到,我看的那部分代码里有如下定义
static DEFINE_PER_CPU(struct cpuhp_cpu_state, cpuhp_state) = {
.fail = CPUHP_INVALID,
};
然后我一点点展开。。。(Five years later…)
#define DEFINE_PER_CPU(type, name) \
DEFINE_PER_CPU_SECTION(type, name, "")
#define DEFINE_PER_CPU_SECTION(type, name, sec) \
__PCPU_ATTRS(sec) __typeof__(type) name
#define __PCPU_ATTRS(sec) \
__percpu __attribute__((section(PER_CPU_BASE_SECTION sec))) \
PER_CPU_ATTRIBUTES
#define PER_CPU_BASE_SECTION ".data..percpu"
太多了,尼玛有完没完了到底 😊. 遂立即使用新方法。步骤如下:
- 找到该文件对应的.o.cmd后缀的文件
- 打开该文件,在该文件中找到以gcc编译命令开头的一大串编译命令
gcc -巴拉巴拉一大堆
- 在gcc命令后增加
-save-temps=obj
选项
gcc -save-temps=obj -巴拉巴拉一大堆
- 新的命令拿到kernel中去运行,会发现与.c同一目录出现一后缀为.i的同名新文件,即可在该文件找到对应宏展开