Klim |
|
Темы:
3
Сообщения:
14
Участник с: 05 июля 2013
|
Для написания программы обработки аппаратных прерываний на Си возникла необходимость подключения файла interrupt.h. Он находится в каталоге /usr/src/linux-3.6.11-11-ARCH+/include/linux/. Как правильно написатьпуть к этому файлу в программе? Будет ли он работать вообще, так как это исходные файлы ядра. |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
Необходимо обеспечить ещё символические ссылки на функции, заголовки которых прописаны в этом ашнике. Иначе при попытке их вызова в коде вас ждет мат линковщика Если вам нужны типы или константы, описаные там, работать будет. А для вызова функций необходимо компилятору сказать, где искать тело этой функции. Они могут быть описаны в соответствующем *.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 |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
В программе правильно писать как включение файла стандартных библиотек#include <linux/interrupt.h> ... KERNEL_VER := $(shell uname -r) KERNEL_SRC := /lib/modules/$(KERNEL_VER)/build EXTRA_CFLAGS += -I$(KERNEL_SRC)/include ... |
Klim |
|
Темы:
3
Сообщения:
14
Участник с: 05 июля 2013
|
kurych Скопировал около 100 файлов необходимых файлу interrupt.h в отдельный каталог и запустил gcc -o test-isr test-isr.c -I /home/include/ -l WiringPi Выдала много ошибок об отсутствии большого количества переменных и типов данных. Возможности разбиратся в таком количестве подключаемых файлов нет. Это все делается на Raspbery Pi c системой linux-3.6.11-11-ARCH+. Необходимо подмонтирновать обработку аппаратный прерываний. Подскажите как это сделать и какие файлы и библиотеки для этого необходимы. |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
Откуда и куда скопировал? Совпадают ли версии ядра скопированных исходников и текущего ядра в системе, на которой идет компиляция? Соблюдены ли требования к минимальной версии glibc? На каком этапе компиляции возникают ошибки? Синт. анализ, собственно, компиляция, или линковка? Вникайте в смысл сообщений об ошибках и исправляйте. Никто за Вас эту работу делать не станет. Фраза "подмонтирновать обработку аппаратный прерываний" - вообще странно звучит. Мой совет: найдите исходники приложения, в котором используется что-то подобное, и изучите, как это там сделано. |
Klim |
|
Темы:
3
Сообщения:
14
Участник с: 05 июля 2013
|
kurych Исходники (.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 и т.д. Работа с прерываниями необходима для управлениями устройствами в реальном времени. Опита работы в многозадачной среде с системами управления в реальном времени у меня нет и буду благодарен за любую помощь, информацию в этом плане. До этого работал с контролерами АТМЕГА. |
kurych |
|
Темы:
0
Сообщения:
1394
Участник с: 06 ноября 2011
|
KlimА файлы, которые #include из тех файлов, которые #include из interrupt.h где будут искаться? Процесс-то рекурсивный. Почему бы не перестать усложнять себе жизнь и просто не указать, где нужные файлы лежат, а не копировать вручную частями? |
ivand |
|
Темы:
9
Сообщения:
477
Участник с: 04 января 2013
|
Это все делается на Raspbery Pi c системой linux-3.6.11-11-ARCH+.Ознакомьтесь с кросскомпиляцией Так ни чего не получится -- разные ABI-- бигендиан/литолендиан Уще проще -- PIDORA |
Klim |
|
Темы:
3
Сообщения:
14
Участник с: 05 июля 2013
|
kurych Файлы ищутся там где указывает опция -I в команде gcc. Указать путь там где они лежат можно только для некоторых файлов потому, что несовпадают имена директорий и возникает необходимость править пути в h файлах. Например в исходниках нет /asm/ подкаталога и я не хотел править подкаталог user/src. |
Klim |
|
Темы:
3
Сообщения:
14
Участник с: 05 июля 2013
|
ivandОна перегружена ненужными мне модулями, долго грузится 40-50 секунд проти в 7-10 АRСН, и я решил, что проще работать с чистого листа, а не удалять ненужные модули. |