Linux 内核 4.15完全删除了数据字段,使得这里的答案已经过时。根据我的推断,将参数传递给计时器回调的首选方法是将它们与计时器一起包含在一个结构中,并使用from_timer
宏来检索它们,其定义为
#define from_timer(var, callback_timer, timer_fieldname) \
container_of(callback_timer, typeof(*var), timer_fieldname)
所以为了传递参数,定义一个额外的结构为
struct timer_data {
struct timer_list timer;
datatype data;
};
并将其传递给设置函数
struct timer_data *tmd = init_timer_data(); //your logic for init
timer_setup(&tmd->timer, callback, flags);
稍后,使用from_timer
检索参数。默认情况下,指向 timer_list 的指针被传递给回调函数,而不是unsigned long data
4.15 之前的版本。
void callback(struct timer_list *t) {
struct timer_data *tmd = from_timer(tmd, t, timer);
datatype data = tmd -> data;
}