LINUX.ORG.RU

Не находятся заголовочные файлы

 , ,


0

2

Приветствую всех. Помогите разобраться. Не находятся некоторые заголовочные файлы

workqueue.h, interrupt.h, asm/io.h

Как их допоставить?

linux mint 21.3

uname -a

Linux tp270 5.15.0-97-generic #107-Ubuntu SMP Wed Feb 7 13:26:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux



Последнее исправление: Axa (всего исправлений: 1)

ChatGTP рекомендует:

Похоже, что в вашей системе отсутствуют некоторые заголовочные файлы, которые требуются для разработки на Linux. Чтобы добавить их, вам нужно установить соответствующие заголовочные файлы для ядра Linux.

Для начала, давайте установим заголовочные файлы для ядра. Откройте терминал и выполните следующую команду:

sudo apt-get install linux-headers-$(uname -r)

Эта команда установит заголовочные файлы для текущего используемого ядра, которое у вас сейчас - 5.15.0-97-generic.

После установки заголовочных файлов для ядра, вы должны сможете найти недостающие заголовочные файлы, такие как workqueue.h, interrupt.h, asm/io.h, в системных каталогах, например, в /usr/include/linux/.

Если после этого файлы все еще не найдены, возможно, вам потребуется установить дополнительные пакеты разработки. Например, для заголовочного файла asm/io.h может потребоваться установить пакет build-essential.
vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black
sudo apt install build-essential
[sudo] password for axa:       
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
build-essential is already the newest version (12.9ubuntu3).
build-essential set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

То же проделал и с inux-headers

Результат:

axa@tp270:~$ find /usr/include -maxdepth 5  -type f -name jit-reader.h  -print
/usr/include/gdb/jit-reader.h
axa@tp270:~$ find /usr/include -maxdepth 5  -type f -name interrupt.h  -print
axa@tp270:~$ 

Хидеров как не было так и нет

Axa
() автор топика
Последнее исправление: Axa (всего исправлений: 3)
Ответ на: комментарий от her_s_gory

Ну для убунты/дебиана много инфы. Я гуглил раньше когда собирал ядро. Даже пдфка была - «ядерная физика для домохозяек». На арч вики, тоже кстати много инфы. В пакет только надо все будет собирать.

anonymous
()

Ты бы хотя бы сказал кому эти файлы принадлежат, т.е. какому проекту.

Ну или в каком проекте подобные инклуды используются.

Ни в glibc, ни в исходниках ядра, на даже в общем гентушном /usr/include я подобных не нашёл.

А телепатией я не владею.

UPD. В исходниках ядра они есть, мой косяк, не там искал. Ну значить тебе надо поставить соответствующий пакет с заголовочными файлами твоего текущего ядра.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от WatchCat

Ты бы хотя бы сказал кому эти файлы принадлежат, т.е. какому проекту.

Я хочу научиться программировать под Linux. Пытаюсь скомпилировать пример из книжки Колисниченко.

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/workqueue.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#define MY_WORK_QUEUE_NAME "WQsched.c"

static struct workqueue_struct *myqueue;

MODULE_LICENSE("GPL");

static void log_char(void *scancode)
{
    printk(KERN_INFO "=007=: Scancode %x %s.\n",
        (int)*((char *)scancode) & 0x7F,
        *((char *)scancode) & 0x80 ? "Released" : "Pressed");
}

irqreturn_t keyboard_handler(int irq, void *dev_id, struct pt_regs *regs)
{
    static int initialised = 0;
    static unsigned char scancode;
    static struct work_struct mytask;
    unsigned char status;
    /* Читаем состояние клавиатуры и скан-код клавиши */
    status = inb(0x64);
    scancode = inb(0x60);
    /* Формируем задачу mytask — ею будет функция log_char */
    if (initialised == 0)
    {
        INIT_WORK(&mytask, log_char, &scancode);
        initialised = 1;
    } else
    {
        PREPARE_WORK(&mytask, log_char, &scancode);
    }
    /* Добавляем задачу mytask в очередь myqueue */
    queue_work(myqueue, &mytask);
    return IRQ_HANDLED;
}

int init_module()
{
    /* Создаем очередь */
    myqueue = create_workqueue(MY_WORK_QUEUE_NAME);
    /* Освобождаем старый обработчик прерывания IRQ 1 */
    free_irq(1, NULL);
    return request_irq(1,
    /* Номер IRQ */
    keyboard_handler,
    /* Наш обработчик */
    SA_SHIRQ, "keyboard_irq_handler", (void*) (keyboard_handler));
}

void cleanup_module()
{
}

Как и все начинающие выбрал сниффер клавиатуры.

Очевидно, что пока не оринетируюсь в разработке. Поэтому и вопросы…

Axa
() автор топика
Последнее исправление: Axa (всего исправлений: 1)
Ответ на: комментарий от Axa

Понятно, нот май кап оф ти. Хорошо, что на питоне байты по 7,5 бит ни в ps/2 ни в rs232 не пролазиют. Алиллуя во веки веков! Ищи список -devов. Дебианоподобные любят дроби в пакетах.

anonymous
()
Ответ на: комментарий от Axa

Тогда установи заголовочные файлы твоего текущего ядра и добавь их в путь поиска инклудов через -I/usr/src/linux-<версия>/include или через -I/usr/src/linux/include, если в твоей системе создаётся симлинк на текущую версию ядра.

А вообще, начинай сразу использовать cmake и find_package() тебе поможет в поиске необходимых заголовочных файлов.

WatchCat ★★★★★
()
Ответ на: комментарий от WatchCat

А вообще, начинай сразу использовать cmake и find_package() тебе поможет в поиске необходимых заголовочных файлов

для сборки модуля linux ? нельзя сказать что распространнёный метод

imb ★★
()
Последнее исправление: imb (всего исправлений: 1)
Ответ на: комментарий от Axa
    return request_irq(1,
    /* Номер IRQ */
    keyboard_handler,
    /* Наш обработчик */
    SA_SHIRQ, "keyboard_irq_handler", (void*) (keyboard_handler));

Божественное форматирование.

Выкиньте эту макулатуру.

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)

Автор еще и не знает чем отличается С++ от С. Уберите этот сраный ненужный каст.

PPP328 ★★★★★
()

если хочешь быть системным программистом, то учись сам решать такие проблемы. Тут например задача «найти, какой пакет в убунте поставит нужный файл». Легко нагуглить, что для такого есть apt-file

$ apt-file search 'asm/io.h'

и все

Lrrr ★★★★★
()
Ответ на: комментарий от shTigrits

это видимо он.

Образование высшее, степень магистра в ИТ 2005 г. и бакалавра в экономике.

5 ноября 2002 года вышла первая книга «Линукс-сервер своими руками», ставшая популярным руководством по Linux

«есть такая профессия, книжки писать» (с)

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Я бы теперь этого автора почитал, что касается перехода на гтк-2. Но эти книжки когда то тоже выручили в качестве макулатуры. Такой вот сюжетец.

anonymous
()
Ответ на: комментарий от Lrrr

если хочешь быть системным программистом, то учись сам решать такие проблемы.

Ты похоже родился системным программистом. И в школу и в ВУЗ не ходил. Сам всего достиг. Уважаю таких.

Спасибо всем, за помощь.

Axa
() автор топика