Timer 如何修改内核计时器\u列表超时
我正在为内核模块中的一些参数实现超时 因此,我使用Timer 如何修改内核计时器\u列表超时,timer,linux-kernel,timeout,linux-device-driver,kernel-module,Timer,Linux Kernel,Timeout,Linux Device Driver,Kernel Module,我正在为内核模块中的一些参数实现超时 因此,我使用struct timer\u list和相关的API来实现一个12秒计时器 因此,正如我使用的IBM developer Works内核计时器指南中提到的: struct timer_list my_timer; init_timer_on_stack(&my_timer); void tick_timer() { my_timer.expires = jiffies + delay * HZ; //delay is globa
struct timer\u list
和相关的API来实现一个12秒计时器
因此,正如我使用的IBM developer Works内核计时器指南中提到的:
struct timer_list my_timer;
init_timer_on_stack(&my_timer);
void tick_timer()
{
my_timer.expires = jiffies + delay * HZ; //delay is global variable int = 12.
my_timer.data=0;
my_timer.function = my_timer_func;
add_timer(&my_timer);
}
因此,每次计时器过期时,我都会在my_timer\u func
中执行工作,并再次调用tick_timer
重置计时器
接下来,我想将delay
实现为一个sysctl条目。
但更改应立即调用勾选计时器
功能,并使用新的延迟
重置计时器。那么,我如何才能检测到这种变化,并删除任何当前计时器或重置它
如果存在任何内核线程来检测
延迟的变化
内核没有检测变量变化的机制。相反,您应该在代码更改变量之前/之后执行相应的操作
添加sysctl条目时,还需要为其设置处理程序(ctl\u table->proc\u handler
)。此处理程序定义了在调用entry的读/写方法时执行的操作。标准的proc\u do*
函数只设置/获取变量的值,所以您应该定义处理程序。大概是这样的:
int my_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
// Call standard helper..
int res = proc_dointvec(table, write, buffer, lenp, ppos);
if(write && !res) {
// Additional actions on successfull write.
}
return res;
}
可以使用mod_timer
功能修改计时器的超时时间