#ubuntu #makefile #compilation #linux-kernel #include
#ubuntu #makefile #Сборник #linux-ядро #включить
Вопрос:
Пытаюсь скомпилировать модуль ядра 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
Функция setup_timer() C объявляется в пакете 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. Как я могу это исправить?
Также на основе УСТАНОВОЧНОГО файла следует, что драйвер был написан для версии ядра linux-headers-2.6.x, и теперь это 4.18.0-16.
И многое другое из раздела УСТАНОВКА: для других дистрибутивов, пожалуйста, обратитесь к документации, чтобы узнать, какой пакет вам нужно установить.
Все потеряно?
ОС 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. Вы уверены, что вам действительно нужно собрать этот драйвер? Я думаю, что Ubuntu включает предварительно встроенный драйвер в свои пакеты linux-module-extra, которые устанавливаются как зависимость от «общих» ядер. Параметр конфигурации ядра — CONFIG_SND_USB_TONEPORT, а модуль называется «snd-usb-toneport.ko».
2. @Alex тебе удалось скомпилировать этот драйвер? Если да, пожалуйста, поделитесь измененным кодом. Я пытаюсь использовать UX1 со своей гитарой в Linux mint
3. @IanAbbott проблемы с аудиоинтерфейсом line6. Выходной звук в порядке, но когда я подключаю гитару — нет никакого сигнала. Такая же ситуация была в Windows, пока я не установил драйверы
Ответ №1:
В более новой версии ядра Linux setup_timer
функция известна как timer_setup
.
Обратите внимание, что тип функции обратного вызова был изменен в отправленных версиях. Теперь этот обратный вызов принимает указатель на timer_list
саму структуру.
Смотрите больше в этой статье LWN:https://lwn.net/Articles/735887 /.
Комментарии:
1. Кроме того,
timer_setup
было добавлено в ядре 4.14 иsetup_timer
было удалено в ядре 4.15.