有一些内核变量(例如tcp_frto
)可以通过使用sysctl net.ipv4.tcp_frto
或cat /proc/sys/net/ipv4/tcp_frto
等命令从用户空间访问。
可以从bash命令行读取并轻松更改。但我想从我正在编写的内核模块中更改它们。
如何从模块中读取和写入这些变量?
(Linux源代码使用sysctl_tcp_frto
来访问在tcp.h
文件中声明的变量。也许可以导出变量名称,然后可以通过模块找到,但我不想要更改源并再次编译它。我正在尝试制作可加载内核模块(LKM),而不是每次都编译源代码。
答案 0 :(得分:1)
除非Linux内核变量是全局的(使用EXPORT_SYMBOL
或其变体之一),否则不能在其范围之外读取它。
由于存在使用 procfs 访问tcp_frto
的替代方法,您可以使用VFS函数在Linux内核模块中执行相同操作,如 { {3}} 强>
这个 sample code snippets 详细描述了这是如何工作的以及为什么它通常不是一个好主意(除非调试除外)。