C 内核模块的配置文件

C 内核模块的配置文件,c,linux-kernel,kernel,linux-device-driver,kernel-module,C,Linux Kernel,Kernel,Linux Device Driver,Kernel Module,我学习如何编写linux内核驱动程序,现在我想让用户从用户空间改变我的模块或任何其他子系统/模块的行为 我想在任何类型的配置文件/系统中以文件/系统中的值的形式存储任何值字符串列表-更改模块的行为 我考虑过procfs,我可以创建一个模块来创建/proc/file,并对来自用户空间的读/写操作做出反应 问题是:如何从内核空间中的另一个模块(命名为B)读取该配置 也许另一种配置是可能的,我考虑过sysctl,但我发现没有存储字符串,我必须存储某种简单的列表。1通常,如果是配置和一些参数列表,ioc

我学习如何编写linux内核驱动程序,现在我想让用户从用户空间改变我的模块或任何其他子系统/模块的行为

我想在任何类型的配置文件/系统中以文件/系统中的值的形式存储任何值字符串列表-更改模块的行为

我考虑过procfs,我可以创建一个模块来创建/proc/file,并对来自用户空间的读/写操作做出反应

问题是:如何从内核空间中的另一个模块(命名为B)读取该配置


也许另一种配置是可能的,我考虑过sysctl,但我发现没有存储字符串,我必须存储某种简单的列表。

1通常,如果是配置和一些参数列表,ioctl更受欢迎,建议使用它

你在问,有两个内核模块-A和B,你想在B上读取A的配置,对吗?在这种情况下,无论您有什么proc或ioctl记忆,proc都不是真正的文件系统。您正在打印或读取并返回一些内核变量的值。。。您可以通过在内核中使用VFS从fs读取内容并返回字符串,但这非常愚蠢,因为您拥有用户空间控制。最终,您需要将内核模块配置存储到一些变量中。如果您想从另一个模块中读取它们,您的变量应该通过使用EXPORT_SYMBOL关键字来公开,但通常我们不会这样做

在返回配置值的符号上创建一些API,并公开这些API,然后从另一个模块调用它。由于模块依赖性,您可能需要小心

最简单的方法是,创建一些回调ptr并在内核源代码下定义它。然后,当模块A初始化时,配置回调ptr,并从模块B调用它。在这种情况下,您将摆脱模块依赖关系

或者,在模块B上创建回调指针,使模块B成为内置模块,并公开回调ptr

然后,从模块A,您可以初始化它们,无论何时从B调用它,您都可以在回调ptr上检查null ptr

希望它能帮助你