前面说到的内核模块参数是在加载模块时使用,而这次我们要说一种在模块加载后修改数据的方法,其是基于后期要说到的procfs而设计的,它是应用程序设置和获取运行时内核配置参数的一种方法,一般相应的参数对应/proc/sys目录,除了使用系统内置的sysctl工具操作,也可直接对/proc/sys目录下的结点直接操作。
对于sysctl会使用到如下函数来注册和释放:
1.注册sysctl
struct ctl_table_header *register_sysctl_table(struct ctl_table *table) ;
2.释放sysctl
void unregister_sysctl_table(struct ctl_table_header * header) ;
这两个函数在fs/proc/proc_sysctl.c中实现,在include/linux/sysctl.h中声明,从两个函数可以看到两者是通过ctl_table_header结构体连通的,该结构体不详说,接下来看看ctl_table这个结构体,在include/linux/sysctl.h有如下内容:
struct ctl_table
{