繁体   English   中英

内核模块的配置文件

[英]configuration file for kernel module

我学习了如何编写Linux内核驱动程序,现在我想让用户空间的用户可以更改模块(或任何其他子系统/模块)的行为。

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

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

关键是:如何从内核空间的另一个配置中读取该配置(名称为B)?

也许另一种类型的配置是可能的(我考虑过sysctl,但是我看到没有存储任何字符串,我必须存储某种简单的“列表”)。

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

2)您问,有2个内核模块-A和B,并且您想阅读A在B上的配置。 在这种情况下,无论您拥有proc还是ioctl(记住,proc不是真正的文件系统。您都在打印或读取某些内核变量并从中返回一些值...您可以使用VFS从“ fs”中读取内容在内核中并返回该字符串,但这非常愚蠢,因为您具有用户空间控制权。)最终,您需要将内核模块配置存储到某些变量中。 如果要从另一个模块读取它们,则应使用EXPORT_SYMBOL()关键字公开您的变量,但通常不这样做。

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

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

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

然后,可以从模块A初始化它们,并且每当从B调用它时,都可以在该回调ptr上检查“ null ptr”。

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM