4.15 版本内核调用 init_timer()函数出错

在学习init_timer()过程中,编写了一个字符设备的内核模块,实现每隔1s,调用回调函数,回调函数中记录秒数。

然后编译过程中发现编译出错,报错找不到init_timer()函数,在linux kernel的/include目录中使用grep init_timer ./ -r -n命令寻找无果,发现内核中定时器提供的api从4.15版本linux kernel以后发生了一些变化,在此做一些记录。

4.15版本之前:

4.15版本之前的定时器结构体定义(/include/linux/timer.h)

其中,结构体成员void  (*function)(unsigned long);

                             unsigned long   data;

上述两个结构体成员在4.15版本之后发生了变化

定时器结构体成员讲解:

unsigned long expires成员,一般设置成expires = jiffies + HZ*x

定时器的实现原理是通过时钟芯片,每隔一段时间进入一次中断,进入中断的次数叫做滴答数,在内核中使用jiffies表示。

对于每个定时器,都有一个定时器结构体表示(上述结构体)。结构体中都有一个jiffies的比较值,每隔一段时间,时钟芯片进入一次中断,即表示一次滴答,就对jiffies++。并且比较当前定时器结构体中的expires成员,滴答数超过了expires,那么就调用回调函数。

expires = jiffies + HZ*x中,HZ代表1s进入中断的次数,也就是滴答数。1/HZ表示多长时间进入一次中断。那么HZ*x就表示x秒的滴答数,即进入中断的次数,也就是表示x秒后,调用回调函数。

void (*function)(unsigned long)成员,函数指针&#x

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值