Linxu内核编程报错:implicit declaration of function ‘init_timer’

今天在做Linux定时器实验的时候,使用init_timer接口的时候,发现爆出这个错误。

后在stackoverflow找到答案。(需要梯子)
点击此处

错误原因

在4.15内核里,init_timer被移除了。需要换用新的timer_setup接口。

修改后的语法

#if 如果Linux内核版本 < KERNEL_VERSION(4,14,0)
    init_timer(&dev->getIntrTimer);
    dev->getIntrTimer.data = (unsigned long) dev;
    dev->getIntrTimer.function = GetIntrTimerCallback;
    /* ... */
    add_timer(&dev->getIntrTimer);
#else
    timer_setup(&dev->getIntrTimer, GetIntrTimerCallback, 0);
    /* the third argument may include TIMER_* flags */
    /* ... */
#endif

The callback function的语法修改

#if 如果Linux内核版本 < KERNEL_VERSION(4,14,0)
void GetIntrTimerCallback(unsigned long devAddr)
{
    myDevice *dev = (myDevice *) devAddr;
#else
void GetIntrTimerCallback(struct timer_list *t)
{
    myDevice *dev = from_timer(dev, t, getIntrTimer);
#endif
    /* Do something with "dev" */

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页