f1c100s linux交叉编译驱动模块里使用软件定时器
我找了网上linux内核定时器的方法 发现定时器结构体是这样的
struct timer_list {
/*
* All fields that change during normal runtime grouped to
* the same cacheline
*/
struct hlist_node entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
u32 flags;
int slack;
#ifdef CONFIG_TIMER_STATS
int start_pid;
void *start_site;
char start_comm[16];
#endif
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
而我看f1c100s的linux内核文件include/linux/timer.h里的定时器结构是这样的:
struct timer_list {
/*
* All fields that change during normal runtime grouped to the
* same cacheline
*/
struct hlist_node entry;
unsigned long expires;
void (*function)(struct timer_list *);
u32 flags;
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
里面有东西没有 特别是成员data 这个是循环时间 没有它怎么指定定时器时间?
启动定时器用的是 DEFINE_TIMER(_name, _function) 运行时不能正常调用回调函数
离线
看下这个驱动:
https://github.com/torvalds/linux/blob/master/drivers/char/hangcheck-timer.c
static DEFINE_TIMER(hangcheck_ticktock, hangcheck_fire);
触发时间间隔在回调函数里面设定.
离线
看下这个驱动:
https://github.com/torvalds/linux/blob/master/drivers/char/hangcheck-timer.cstatic DEFINE_TIMER(hangcheck_ticktock, hangcheck_fire);
触发时间间隔在回调函数里面设定.
按照你给的驱动参考 可以正常使用了 谢谢
离线
这个定时器,我也是折腾了1天!才找到这个帖子!!!!
晕,结构体不一样;常规的setup_timer和init_timer都不能用!
离线
这个定时器,我也是折腾了1天!才找到这个帖子!!!!
晕,结构体不一样;常规的setup_timer和init_timer都不能用!
巧了 和你遇到的问题一样 估计是内核版本不同 我看内核版本在2.X用的就是 常规的setup_timer和init_timer
离线
我就是参考2楼的方法搞定的!!能正常用,我的是4.13
离线