从内核模块更改内核变量/参数

时间:2013-08-08 12:51:26

标签: linux-kernel kernel-module kernel

有一些内核变量(例如tcp_frto)可以通过使用sysctl net.ipv4.tcp_frtocat /proc/sys/net/ipv4/tcp_frto等命令从用户空间访问。

可以从bash命令行读取并轻松更改。但我想从我正在编写的内核模块中更改它们。

如何从模块中读取和写入这些变量?

(Linux源代码使用sysctl_tcp_frto来访问在tcp.h文件中声明的变量。也许可以导出变量名称,然后可以通过模块找到,但我不想要更改源并再次编译它。我正在尝试制作可加载内核模块(LKM),而不是每次都编译源代码。

1 个答案:

答案 0 :(得分:1)

除非Linux内核变量是全局的(使用EXPORT_SYMBOL或其变体之一),否则不能在其范围之外读取它。

由于存在使用 procfs 访问tcp_frto的替代方法,您可以使用VFS函数在Linux内核模块中执行相同操作,如 { {3}}

这个 sample code snippets 详细描述了这是如何工作的以及为什么它通常不是一个好主意(除非调试除外)。