【linux内核】linux内核定时器
linux内核定时器
代码位置:kernel/time/timer.c
函数原型:
int mod_timer(struct timer_list *timer, unsigned long expires);
功能:修改已有定时器的到期时间。如果定时器已经在运行,它会重新设置到期时间;如果定时器未在运行,它会启动这个定时器。
返回值:
- 如果定时器之前已经在激活状态,则返回非零(true)。
- 如果定时器之前没有激活,则返回 0(false)。
[初始化定时器]
|
v
timer_setup(&timer, callback)
|
v
+----------------+
| 定时器未激活 |
+----------------+
|
| add_timer(&timer) / mod_timer(&timer, jiffies + X)
v
+----------------+
| 定时器激活 |
+----------------+
|
| 到期时间到 (expires)
v
+----------------+
| 执行 callback |
+----------------+
|
| 若需要再次触发,可再次调用 mod_timer()
v
[循环或结束]
|
| del_timer_sync(&timer)
v
+----------------+
| 定时器已删除 |
+----------------+
from_timer 是 Linux 内核里处理 定时器回调时获取宿主结构指针 的一个辅助宏,常用于从 struct timer_list 指针中反向得到包含它的结构体。定义在内核头文件 linux/timer.h:
#define from_timer(var, callback_timer, timer_fieldname) \
container_of(callback_timer, typeof(*var), timer_fieldname)
实例:
struct my_data {
int value;
struct timer_list timer;
};
void my_timer_callback(struct timer_list *t)
{
struct my_data *data = from_timer(data, t, timer);
// do something with data
}
void init_timer_example(struct my_data *data)
{
timer_setup(&data->timer, my_timer_callback, 0);
mod_timer(&data->timer, jiffies + HZ); // 1 second later
}
参考资料

浙公网安备 33010602011771号