C 编译内核模块时缺少符号

C 编译内核模块时缺少符号,c,linux-kernel,kernel,C,Linux Kernel,Kernel,编译使用头的简单内核模块时,编译器会大叫缺少符号: WARNING: "__tracepoint_tlb_flush" undefined! WARNING: "rdpmc_always_available" undefined! 添加以下简单语句: struct static_key rdpmc_always_available = STATIC_KEY_INIT_FALSE; 解决了rpdmpc\u始终可用缺少符号的问题。我很确定添加这一行不是一个好主意,因为内核需要已经有了它 我找

编译使用头
的简单内核模块时,编译器会大叫缺少符号:

WARNING: "__tracepoint_tlb_flush"  undefined!
WARNING: "rdpmc_always_available" undefined!
添加以下简单语句:

 struct static_key rdpmc_always_available = STATIC_KEY_INIT_FALSE;
解决了
rpdmpc\u始终可用
缺少符号的问题。我很确定添加这一行不是一个好主意,因为内核需要已经有了它

我找不到其他符号的解决方案

代码非常简单:

#include <linux/sched.h>
#include <asm/mmu_context.h>

int __init init_m(void)
{
    switch_mm(NULL, NULL, NULL);
    return 0;
}
#包括
#包括
int\uu init\u m(无效)
{
开关_mm(NULL,NULL,NULL);
返回0;
}
我知道这行不通,我只是想弄清楚如何修复这些警告符号。
\

在内核源代码目录中运行
grep-sIrHn tlb_flush*| grep TRACE
命令,可以显示
\u tracepoint\u tlb_flush
的声明位置和使用方式。它在文件中,在
TRACE\u EVENT\u条件下声明(tlb_flush,
line.顺便说一句,我不确定声明您自己的
rdpmc_始终可用是个好主意,您可以破坏模块的逻辑。看。另外,如果您需要任何进一步的帮助,请向我们提供您的模块代码。@SamProtsenko,似乎有人应该学习
git grep
命令,忘记tarballs的源代码(除了无用地使用双grep)。@AndyShevchenko这是真的:)旧习惯很难改掉。但是我不使用tarball,我广泛地使用Git。使用
Git grep
上面的命令变成了这个命令:
Git grep-e tlb_flush-和\-e TRACE \-'.*.[ch]