从当前模块获取 Linux 内核模块名称

Get Linux Kernel module name from current module

我正在编写一些内核模块,但对于调试输出,我想(自动)打印出哪个内核模块正在生成输出。是否有函数或变量可用于获取正在执行的模块的名称?

在内核模块的代码中,THIS_MODULE指向代表这个模块的结构体。您可以使用此结构的 name 字段来提取当前模块名称:

printk("Current module name: %s\n", THIS_MODULE->name);

如果您的代码可以编译(取决于配置)作为 模块 内核的一部分 ,那么在后一种情况 THIS_MODULE 将为 NULL,因此您无法访问其字段。对于此类代码,您可以改用 module_name 宏:

printk("Current module name: %s\n", module_name(THIS_MODULE));

在内核核心代码(不是模块)中宏被扩展为字符串 "kernel".