【发布时间】:2016-06-07 15:57:44
【问题描述】:
我想在内核模块中为代码audit.c添加新的sysctl参数,这个参数值应该在运行时更改。我需要在哪里添加新的sysctl代码以及如何实现?
【问题讨论】:
标签: linux-kernel kernel
我想在内核模块中为代码audit.c添加新的sysctl参数,这个参数值应该在运行时更改。我需要在哪里添加新的sysctl代码以及如何实现?
【问题讨论】:
标签: linux-kernel kernel
您应该在树层次结构中使用 ctl_table 并在您的模块中处理它。
static struct ctl_table sample_child_table1[] = {
{
.ctl_name = CTL_UNNUMBERED1,
.procname = "sample",
.maxlen = sizeof(int),
.mode = 0444,
.data = &global_var,
.proc_handler = &proc_dointvec_minmax,
.extra1 = &min_val,
.extra2 = &max_val,
},
{}
};
static struct ctl_table sample_parent_table[] = {
{
.ctl_name = CTL_KERN,
.procname = "kernel",
.mode = 0777,
.child = sample_child_table,
{}
},
register_sysctl_table(sample_parent_table)
【讨论】:
.mode 分配和一些名称对其进行了修改。如果您解释了两个表中的每个分配,这个答案会更有用(例如,.extra1 和 .extra2 的意义是什么?min_val 和 max_val 是什么?此外,我相信 @987654327 @ 无效,因为内核中不存在 CTL_UNNUMBERED1。该分配应改为 .ctl_name = CTL_UNNUMBERED。