C 如何在两个Linux内核模块之间共享全局变量?

C 如何在两个Linux内核模块之间共享全局变量?,c,linux,linux-kernel,C,Linux,Linux Kernel,我正在尝试在USB连接和断开连接时获取通知。 所以我试着实现信号。我在debugfs中创建了一个文件“file1”。然后我提供了一个简单的写文件操作 在用户空间中有一个用户空间应用程序,它将在debugfs的“file1”中写入PID 在内核空间中,我可以使用上面提到的write方法获得通过的PID。但是我想在另一个内核模块中使用这个PID。所以我试着使用EXPORT_SYMBOL(),但如果不包含公共头文件,则会出现编译错误。如果包含头文件,当我刷新图像时,我会看到PID为“0” 谁能告诉我,

我正在尝试在USB连接和断开连接时获取通知。 所以我试着实现信号。我在debugfs中创建了一个文件“file1”。然后我提供了一个简单的写文件操作

在用户空间中有一个用户空间应用程序,它将在debugfs的“file1”中写入PID

在内核空间中,我可以使用上面提到的write方法获得通过的PID。但是我想在另一个内核模块中使用这个PID。所以我试着使用
EXPORT_SYMBOL(),但如果不包含公共头文件,则会出现编译错误。如果包含头文件,当我刷新图像时,我会看到PID为“0”

谁能告诉我,这条路对吗?或者告诉我哪里出了问题。或者,当PID写入文件时,我可以在不同的内核模块中得到通知。如果是这样,怎么做?

导出符号()
是正确的方法。我不太明白你所说的“如果我不包括公共头文件”是什么意思。听起来好像您在共享头文件中包含了
EXPORT\u SYMBOL()
,这不是您想要做的。您希望执行以下操作:

module1.c(编译成module1.ko)

然后在module2.c中(编译成module2.ko,必须在module1.ko之后插入module2.ko)


插入第一个模块后,您可以通过执行
grep my_exported_变量/proc/kallsyms
检查符号是否已导出,前提是您的系统上有
/proc/kallsyms
。如果没有看到变量,module2.ko的insmod将无法处理未解析的符号。

不太清楚您实际想要完成什么,但对我来说,您在这里所做的(或至少尝试做的)听起来非常错误。但是,请提供更多信息和您目前拥有的相关代码,以及问题的具体位置。
int my_exported_variable;

EXPORT_SYMBOL(my_exported_variable);

// The rest of module1.c
extern int my_exported_variable; // Note the extern, it is declaring but not defining it, the definition is in module1

// The rest of module2.c