Аппаратные прерывания на linux-3.6.11-11-ARCH

Для написания программы обработки аппаратных прерываний на Си возникла необходимость подключения
файла interrupt.h. Он находится в каталоге /usr/src/linux-3.6.11-11-ARCH+/include/linux/.
Как правильно написатьпуть к этому файлу в программе?
Будет ли он работать вообще, так как это исходные файлы ядра.
Необходимо обеспечить ещё символические ссылки на функции, заголовки которых прописаны в этом ашнике. Иначе при попытке их вызова в коде вас ждет мат линковщика

Если вам нужны типы или константы, описаные там, работать будет. А для вызова функций необходимо компилятору сказать, где искать тело этой функции. Они могут быть описаны в соответствующем *.c файле, который надо добавить в зависимости сборки. Или в библиотеке, *.a, *.so которую надо скомпоновать с вашей программой, но в библиотеке вряд ли, раз речь идет о ядре
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
В программе правильно писать как включение файла стандартных библиотек
#include <linux/interrupt.h>
А уже компилятору тем или иным образом указывать (ключ -I ), где находится $kernel_src/include. К примеру, в Makefile
...
KERNEL_VER  := $(shell uname -r)
KERNEL_SRC := /lib/modules/$(KERNEL_VER)/build
EXTRA_CFLAGS += -I$(KERNEL_SRC)/include
...
kurych
В программе правильно писать как включение файла стандартных библиотек
#include <linux/interrupt.h>
А уже компилятору тем или иным образом указывать (ключ -I ), где находится $kernel_src/include. К примеру, в Makefile
...
KERNEL_VER  := $(shell uname -r)
KERNEL_SRC := /lib/modules/$(KERNEL_VER)/build
EXTRA_CFLAGS += -I$(KERNEL_SRC)/include
...

Скопировал около 100 файлов необходимых файлу interrupt.h в отдельный каталог и запустил
gcc -o test-isr test-isr.c -I /home/include/ -l WiringPi
Выдала много ошибок об отсутствии большого количества переменных и типов данных.
Возможности разбиратся в таком количестве подключаемых файлов нет.
Это все делается на Raspbery Pi c системой linux-3.6.11-11-ARCH+.
Необходимо подмонтирновать обработку аппаратный прерываний. Подскажите как это сделать и какие файлы
и библиотеки для этого необходимы.

Откуда и куда скопировал? Совпадают ли версии ядра скопированных исходников и текущего ядра в системе, на которой идет компиляция? Соблюдены ли требования к минимальной версии glibc? На каком этапе компиляции возникают ошибки? Синт. анализ, собственно, компиляция, или линковка?
Вникайте в смысл сообщений об ошибках и исправляйте. Никто за Вас эту работу делать не станет.
Фраза "подмонтирновать обработку аппаратный прерываний" - вообще странно звучит. Мой совет: найдите исходники приложения, в котором используется что-то подобное, и изучите, как это там сделано.
kurych
Откуда и куда скопировал? Совпадают ли версии ядра скопированных исходников и текущего ядра в системе, на которой идет компиляция? Соблюдены ли требования к минимальной версии glibc? На каком этапе компиляции возникают ошибки? Синт. анализ, собственно, компиляция, или линковка?
Вникайте в смысл сообщений об ошибках и исправляйте. Никто за Вас эту работу делать не станет.
Фраза "подмонтирновать обработку аппаратный прерываний" - вообще странно звучит. Мой совет: найдите исходники приложения, в котором используется что-то подобное, и изучите, как это там сделано.

Исходники (.h файлы) находятся: /user/linux-3.6.11-11-ARCH+/include ../. я создал подкаталог /home/include/ и туда переместил файлы которые подгружаются в файле interrupt.h дерективой #include.
Версии ядра и исходников совпадают.
Ошибки возникают на этапе подключения h файлов. В программе я указал только #include interrupt.h, а остальные файлы подгружаются из interrupt.h.
Появляются неопределенные типы, переменные, структуры и где они в каких файлах определены, я не знаю.
То что я попробовал сделать вручную - это все делается при сборке ядра. В сборках linux на RaspberryPi я не увидел чтобы эти модули были включены в сборку.
Как сделать сборку ядра linux ARCH с прерываниями для RaspberyPi, я не знаю. Если кто то этим занимался помогите советом или скинте ссылочку на информацию.
Возможно кто то знает как определить номер прерывания по событию (по переднему или заднему фронту импульса) на ножке GPIO - соответствие номера порта на плате и номера прерывания в линукс например: GPIO1 - IRQ25, GPIO2 - IRQ32 и т.д.
Работа с прерываниями необходима для управлениями устройствами в реальном времени.
Опита работы в многозадачной среде с системами управления в реальном времени у меня нет и буду благодарен за любую помощь, информацию в этом плане.
До этого работал с контролерами АТМЕГА.
Klim
я создал подкаталог /home/include/ и туда переместил файлы которые подгружаются в файле interrupt.h дерективой #include.
А файлы, которые #include из тех файлов, которые #include из interrupt.h где будут искаться? Процесс-то рекурсивный. Почему бы не перестать усложнять себе жизнь и просто не указать, где нужные файлы лежат, а не копировать вручную частями?
Это все делается на Raspbery Pi c системой linux-3.6.11-11-ARCH+.
Ознакомьтесь с кросскомпиляцией
Так ни чего не получится -- разные ABI-- бигендиан/литолендиан
Уще проще -- PIDORA
kurych
А файлы, которые #include из тех файлов, которые #include из interrupt.h где будут искаться? Процесс-то рекурсивный. Почему бы не перестать усложнять себе жизнь и просто не указать, где нужные файлы лежат, а не копировать вручную частями?

Файлы ищутся там где указывает опция -I в команде gcc.
Указать путь там где они лежат можно только для некоторых файлов потому, что несовпадают имена директорий и возникает необходимость править пути в h файлах.
Например в исходниках нет /asm/ подкаталога и я не хотел править подкаталог user/src.
ivand
Ознакомьтесь с кросскомпиляцией
Так ни чего не получится -- разные ABI-- бигендиан/литолендиан
Уще проще -- PIDORA
Она перегружена ненужными мне модулями, долго грузится 40-50 секунд проти в 7-10 АRСН,
и я решил, что проще работать с чистого листа, а не удалять ненужные модули.
 
Зарегистрироваться или войдите чтобы оставить сообщение.