如何解决错误:函数“ setup_timer”的隐式声明

时间:2019-03-25 08:18:07

标签: ubuntu makefile compilation linux-kernel include

试图为USB音频卡Line6 UX2编译linux核心模块。 从回购中获取代码并尝试制作。回购没有./configure

产生错误:

line6linux-code-r1108/driver/trunk/driver.c:169:2: error: implicit declaration of function ‘setup_timer’; did you mean ‘del_timer’? [-Werror=implicit-function-declaration]
  setup_timer(timer, function, data);
  ^~~~~~~~~~~
  del_timer

C函数setup_timer()在linux linux-headers软件包中声明。当前是linux-headers-4.18.0-16 当然,它安装在默认位置/ usr / src /

产生错误的代码(driver.c):

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/export.h>
#include <linux/slab.h>
#include <linux/usb.h>

#include <sound/core.h>
#include <sound/initval.h>

#include "capture.h"
#include "driver.h"
#include "midi.h"
#include "playback.h"

... some code here

/*
    Setup and start timer.
*/
void line6_start_timer(struct timer_list *timer, unsigned long msecs,
               void (*function)(unsigned long), unsigned long data)
{
    setup_timer(timer, function, data); // <-- string 169
    mod_timer(timer, jiffies + msecs_to_jiffies(msecs));
}
EXPORT_SYMBOL_GPL(line6_start_timer);

因此,显然,编译器找不到Linux标头。我该如何解决?

同样基于INSTALL文件,该驱动程序是针对内核版本linux-headers-2.6.x编写的,现在是4.18.0-16。

有关INSTALL的更多信息:有关其他发行版,请查阅文档以找出必须安装的软件包。

一切都丢失了吗?

OS Ubuntu 18.10 Linux 4.18.0-16-generic#17-Ubuntu SMP Fri Feb 8 00:06:57 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux

1 个答案:

答案 0 :(得分:0)

在较新版本的Linux内核中,setup_timer函数被称为timer_setup

请注意,在重新发送的版本中,回调函数的类型已更改。现在,该回调函数接受指向timer_list结构本身的指针。

请参阅此LWN文章中的更多内容:https://lwn.net/Articles/735887/