内核模块的配置文件

configuration file for kernel module

我学习了如何编写 linux 内核驱动程序,现在我想为用户 space 提供改变我的模块(或任何其他子系统/模块)行为的可能性。

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

我考虑过 procfs,我可以创建创建 /proc/file 的模块并对用户 space 的 read/write 操作做出反应。

问题是:如何从另一个读取该配置,将其命名为 B,内核中的模块 space?

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

1) 通常,如果是配置和一些参数列表,ioctl比较流行,推荐使用。

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

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

最简单的方法是创建一些回调指针并在内核源代码下定义它。然后在模块A初始化的时候,配置callback ptr,在模块B中调用,这样就摆脱了模块依赖。

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

然后,您可以从模块 A 初始化它们,并且无论何时从 B 调用它,您都可以检查 "null ptr" 回调指针。

希望对您有所帮助。