【问题标题】:How to add new /proc/sys/kernel entries?如何添加新的 /proc/sys/kernel 条目?
【发布时间】:2016-06-07 15:57:44
【问题描述】:

我想在内核模块中为代码audit.c添加新的sysctl参数,这个参数值应该在运行时更改。我需要在哪里添加新的sysctl代码以及如何实现?

【问题讨论】:

    标签: linux-kernel kernel


    【解决方案1】:

    您应该在树层次结构中使用 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)
    

    【讨论】:

    • 您似乎从 Vitalik Nikolyenko 的 sysctl pdf 中获取了这个示例,并且您通过更改 .mode 分配和一些名称对其进行了修改。如果您解释了两个表中的每个分配,这个答案会更有用(例如,.extra1.extra2 的意义是什么?min_valmax_val 是什么?此外,我相信 @987654327 @ 无效,因为内核中不存在 CTL_UNNUMBERED1。该分配应改为 .ctl_name = CTL_UNNUMBERED
    • @buratino:你从哪里抓起并不重要,也不管每个人是否都能准确理解示例。重要的是“答案是否给出了继续前进的指针”。我不记得我从哪里复制的,但我修改并增强了一些个人有趣的东西。
    • 如果您确实从某个地方获取了代码,那很好。我认为如果您链接原始来源会很有帮助,它比您拥有的更详细。然而,重要的是您的示例不会为 Sowndarya 编译,因为 CTL_UNNUMBERED1 在 vanilla 内核中不存在。这在你的回答中值得一提。
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多