Как исправить ошибку: неявное объявление функции «setup_timer» - PullRequest
1 голос
/ 25 марта 2019

Попытка скомпилировать основной модуль linux для usb-звуковой карты Line6 UX2. Получил код из репо и пытаюсь сделать. Репо нет ./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: для других дистрибутивов, пожалуйста, обратитесь к документации, чтобы узнать, какой пакет вы должны установить.

Все потеряно?

ОС Ubuntu 18.10 Linux 4.18.0-16-generic # 17-Ubuntu SMP пт 8 февраля 00:06:57 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux

1 Ответ

0 голосов
/ 25 марта 2019

В более новой версии ядра Linux функция setup_timer известна как timer_setup.

Обратите внимание, что тип функции обратного вызова был изменен в последних версиях. Теперь этот обратный вызов принимает указатель на структуру timer_list.

Подробнее в этой статье LWN: https://lwn.net/Articles/735887/.

...