linux4.4内核模块sys_ctl编程

module源码:

#include
#include
#include
#include
 
static char path[] = "net/test";
static int zero = 0;
static int two = 2;
int sysctl_tcp_new;
 
static struct ctl_table_header *header;
 
static struct ctl_table new[] = {
    {
        .procname = "tcp_new",
        .data = &sysctl_tcp_new,
        .maxlen = sizeof(int),
        .mode = 0644,
        .proc_handler = proc_dointvec_minmax,
        .extra1 = &zero,
        .extra2 = &two
    },
    { }
};
 
static int __init sysctl_module_init(void)
{
    header = register_sysctl(path, new);
    if(!header) {
        printk(KERN_ERR"register_sysctl() failed.\n");
        return -1;
    }
    return 0;
}
 
static void __exit sysctl_module_exit(void)
{
    if(header)
        unregister_sysctl_table(header);
}
 
module_init(sysctl_module_init);
module_exit(sysctl_module_exit);
MODULE_AUTHOR("zhangsk");
MODULE_LICENSE("GPL");
 

makefile

obj-m := sc.o  
KERNEL_DIR := /lib/modules/$(shell uname -r)/build  
PWD := $(shell pwd)  
all:  
    make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules  
clean:  
    rm *.o *.ko *.mod.c  
.PHONY:clean  

 

命令:

sysctl -w net.test.tcp_new=1

sysctl  net.test.tcp_new

 

你可能感兴趣的:(linux基地)