【发布时间】:2018-01-08 12:18:21
【问题描述】:
我正在尝试从内核模块访问 tcp_input.c 中定义的 tcp_pacing_ss_ratio。可以在用户空间中使用 sysctl 命令修改该变量。 但是它不会被导出,也不能直接从模块中引用。
从内核模块访问 sysctl 条目的最简单方法是什么?
【问题讨论】:
标签: c linux linux-kernel kernel
我正在尝试从内核模块访问 tcp_input.c 中定义的 tcp_pacing_ss_ratio。可以在用户空间中使用 sysctl 命令修改该变量。 但是它不会被导出,也不能直接从模块中引用。
从内核模块访问 sysctl 条目的最简单方法是什么?
【问题讨论】:
标签: c linux linux-kernel kernel
使用这个系统调用有 早已灰心丧气,如此不受欢迎,很可能 在未来的内核版本中消失。从 Linux 2.6.24 开始,使用 此系统调用会导致内核日志中出现警告。去掉它 现在从您的程序中; 改用 /proc/sys 接口。
在您的情况下,这将是 /proc/sys/net/ipv4/tcp_pacing_ss_ratio,您可以使用 kernel_write 编写。查看sysctl(2)'s implementation for example usage。
【讨论】:
sysctl(2) 系统调用本身使用kernel_write,所以你可能做错了什么......如果你包含标题,你应该能够直接获取/设置init_net.ipv4.sysctl_tcp_pacing_ss_ratio。我倾向于认为那会是“好的”,因为 procfs 助手似乎就是这样做的。我认为正确的方法是kernel_write。
int。您可以像使用任何普通变量 (init_net.ipv4.sysctl_tcp_pacing_ss_ratio = 200) 一样使用它。