linux 5.0版本以上驱动开发–定时操作
低分辨率定时器
调用的结构题
struct timer_list {
struct hlist_node entry;
unsigned long expires;
void (*function)(struct timer_list *);
u32 flags;
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
u32 flags 结构图成员参数
字段用于存储定时器的标志,其中的标志位可以表示不同的定时器属性。以下是可能的一些标志位及其含义:
TIMER_IRQSAFE: 表示定时器回调函数可以在中断上下文中安全执行。如果设置了这个标志,表示定时器回调函数可以在中断处理程序中调用。
TIMER_CPUPINNED: 表示定时器和其回调函数绑定到特定的 CPU 上。这有助于确保定时器在特定 CPU 上执行,而不是在多个 CPU 之间跳跃。
TIMER_DEFERRABLE: 表示定时器可以被延迟,即如果系统处于节能模式,则定时器的触发可能会被延迟。
TIMER_PINNED: 表示定时器被绑定到一个特定的 CPU 上,并且不能在不同的 CPU 上运行。
TIMER_ABSTIME: 表示 expires 字段中存储的时间是绝对时间,而不是相对于当前时间的相对时间。
TIMER_SLACK_MSB: 表示 expires 字段的高位表示定时器的松弛度,即定时器触发的时间可以有一定的浮动。
驱动初始化中添加
//初始化 定时器 添加 定时触发回调函数
__init_timer(&vsdev[0].timer,vser_timer,TIMER_DEFERRABLE);
//设置定时时间
vsdev[0].timer.expires=get_jiffies_64()+msecs_to_jiffies(1000);
//添加定时控制
add_timer(&vsdev[0].timer);
在驱动退出时候添加
定时控制退出函数
del_timer( &vsdev[0].timer);