реклама на сайте
подробности

 
 
> прерывания в embedded linux, прерывание button -> led
winniethepooh
сообщение Oct 16 2017, 13:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Здравствуйте.
Есть статья http://derekmolloy.ie/kernel-gpio-programm...ttons-and-leds/
пытаюсь повторить (первый пример с кнопкой и ледом) на arm с результатом:

# insmod ./gpio.ko
GPIO_TEST: Initializing the GPIO_TEST LKM
GPIO_TEST: The button state is currently: 1
GPIO_TEST: The button is mapped to IRQ: -6
GPIO_TEST: The interrupt request result is: -22
insmod: can't insert './gpio.ko': Invalid argument

система явно не настроена ловить gpio прерывания, но может вкл и выкл led.
представляю как можно настроить ножку на прерывание в "голой системе",
но как это сделать под linux или что почитать?(google сильно не помог)

спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tarbal
сообщение Oct 24 2017, 00:18
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Вы ядро строите на той же системе?
Обычно то где строят ядро не использует бизибокс.

Очень важный вопрос: Вы ядро строить можете?

Для ядра 2.6 мои ссылки не годятся там нет дерева устройств. Я же написал для ядра больше 3.
К тому же никаких определений в файле устройства (что было до дерева устройств) делать не надо.

Надо от первой ошибки начать.

irqNumber = gpio_to_irq(gpioButton);
Возврашает ошибку 6 по ссылке, что я вам дал это (ENXIO)

это
http://elixir.free-electrons.com/linux/v3..../asm/gpio.h#L43

static inline int gpio_to_irq(unsigned int gpio)
{
return __gpio_to_irq(gpio);
}
вызывает
int __gpio_to_irq(unsigned gpio)
{
struct gpio_chip *chip;

chip = gpio_to_chip(gpio);
return chip->to_irq ? chip->to_irq(chip, gpio - chip->base) : -ENXIO;
}

использует
/* caller holds gpio_lock *OR* gpio is marked as requested */
struct gpio_chip *gpio_to_chip(unsigned gpio)
{
return gpio_desc[gpio].chip;
}


В вашем ядре gpio_desc[gpio].chip->to_irq для используемого вами gpio установлено на NULL.

Дальше дергаться бессмысленно.
Надо починить сначала это.

Найдите в вашем ядре код должен быть похожим на то, что я нашел на бесплатных электронах (free-electrons).
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Oct 24 2017, 07:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(Tarbal @ Oct 24 2017, 00:18) *
Вы ядро строите на той же системе?
Обычно то где строят ядро не использует бизибокс.

Очень важный вопрос: Вы ядро строить можете?


да, ядро строится на ubuntu (запущена на virtualbox)

Цитата(Tarbal @ Oct 24 2017, 00:18) *
Для ядра 2.6 мои ссылки не годятся там нет дерева устройств. Я же написал для ядра больше 3.
К тому же никаких определений в файле устройства (что было до дерева устройств) делать не надо.


в моей системе нет файла arch/arm/boot/dts я вас правильно понял?


Цитата(Tarbal @ Oct 24 2017, 00:18) *
Надо от первой ошибки начать.

irqNumber = gpio_to_irq(gpioButton);
Возврашает ошибку 6 по ссылке, что я вам дал это (ENXIO)

это
http://elixir.free-electrons.com/linux/v3..../asm/gpio.h#L43

static inline int gpio_to_irq(unsigned int gpio)
{
return __gpio_to_irq(gpio);
}
вызывает
int __gpio_to_irq(unsigned gpio)
{
struct gpio_chip *chip;

chip = gpio_to_chip(gpio);
return chip->to_irq ? chip->to_irq(chip, gpio - chip->base) : -ENXIO;
}

использует
/* caller holds gpio_lock *OR* gpio is marked as requested */
struct gpio_chip *gpio_to_chip(unsigned gpio)
{
return gpio_desc[gpio].chip;
}


В вашем ядре gpio_desc[gpio].chip->to_irq для используемого вами gpio установлено на NULL.

Дальше дергаться бессмысленно.
Надо починить сначала это.

Найдите в вашем ядре код должен быть похожим на то, что я нашел на бесплатных электронах (free-electrons).


да согласен с вами, пожалуй добавлю что можно просто сказать - контроллер прерываний (железный) должен быть настроен
на внешние прерывания и умел сказать программному контроллеру (в линукс) какой обработчик для данного gpio вызвать.
задача раскладывается на
1 настроить gpio (это уже может делать для меня интерфейс sysfs, частично);
2 настроить железный контроллер прерываний;
3 зарегистрировать данное прерывание в линукс и добавить обработчик;
я что то упустил?

Сообщение отредактировал winniethepooh - Oct 24 2017, 08:05
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 25 2017, 01:03
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(winniethepooh @ Oct 24 2017, 11:59) *
в моей системе нет файла arch/arm/boot/dts я вас правильно понял?
Да



да согласен с вами, пожалуй добавлю что можно просто сказать - контроллер прерываний (железный) должен быть настроен
на внешние прерывания и умел сказать программному контроллеру (в линукс) какой обработчик для данного gpio вызвать.
задача раскладывается на
1 настроить gpio (это уже может делать для меня интерфейс sysfs, частично);
2 настроить железный контроллер прерываний;
3 зарегистрировать данное прерывание в линукс и добавить обработчик;
я что то упустил?



Вы можете напечатать на системном терминале при помощи строки
printk(KERN_ERR "", ...)

/* caller holds gpio_lock *OR* gpio is marked as requested */
struct gpio_chip *gpio_to_chip(unsigned gpio)
{
return gpio_desc[gpio].chip;
}
станет

/* caller holds gpio_lock *OR* gpio is marked as requested */
struct gpio_chip *gpio_to_chip(unsigned gpio)
{
printk(KERN_ERR "WINNIE %d %p \n", gpio, gpio_desc[gpio].chip);
return gpio_desc[gpio].chip;
}

скомпилируйте ядро (это может быть модуль) и проверьте. Так вы сможете исследовать проблему,печатая разные вещи.
WINNIE я добавил как унукальный идентификатор, чтобы легче было искать.

Если нет терминала, пользуйтесь командой
dmesg

после установки вашего модуля

Команда find, которой вы не нашли в вашей сыстемы не для нее, а для Убунту машины и запускать надо ее в корне директории исходников ядра.Там где запускают команду компиляции и т.д.. Не исключено, что в вашем файле устройства или около находится конфигурация пинов.


код взят отсюда:
http://elixir.free-electrons.com/linux/v3..../gpiolib.c#L119
строка 119.

Найдите это место в вашем ядре.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- winniethepooh   прерывания в embedded linux   Oct 16 2017, 13:57
- - x893   обработчик появляется в /proc/interrupts ? хотя та...   Oct 16 2017, 14:05
|- - winniethepooh   Цитата(x893 @ Oct 16 2017, 14:05) обработ...   Oct 16 2017, 14:13
|- - aaarrr   Цитата(winniethepooh @ Oct 16 2017, 17:13...   Oct 17 2017, 08:11
- - x893   Так надо в этом направлении копать. Более того вс...   Oct 16 2017, 14:36
- - Jury093   Цитата(winniethepooh @ Oct 16 2017, 16:57...   Oct 17 2017, 07:33
|- - winniethepooh   Цитата(Jury093 @ Oct 17 2017, 08:33) попр...   Oct 17 2017, 08:22
|- - aaarrr   Цитата(winniethepooh @ Oct 17 2017, 11:22...   Oct 17 2017, 08:37
|- - winniethepooh   Цитата(aaarrr @ Oct 17 2017, 09:37) Похож...   Oct 17 2017, 08:45
|- - aaarrr   Цитата(winniethepooh @ Oct 17 2017, 11:45...   Oct 17 2017, 08:54
||- - winniethepooh   Цитата(aaarrr @ Oct 17 2017, 09:54) Посмо...   Oct 17 2017, 09:02
|- - Jury093   Цитата(winniethepooh @ Oct 17 2017, 11:45...   Oct 17 2017, 10:38
|- - winniethepooh   Цитата(Jury093 @ Oct 17 2017, 10:38) я пр...   Oct 17 2017, 11:28
||- - Jury093   Цитата(winniethepooh @ Oct 17 2017, 14:28...   Oct 17 2017, 15:05
||- - winniethepooh   Цитата(Jury093 @ Oct 17 2017, 15:05) прощ...   Oct 17 2017, 16:09
||- - Jury093   Цитата(winniethepooh @ Oct 17 2017, 19:09...   Oct 17 2017, 18:20
|- - winniethepooh   Спасибо за GPIOLIB Jury093. Покопаю в этом напра...   Oct 17 2017, 12:32
- - aaarrr   Если речь идет об этом продукте, то прерываниями т...   Oct 17 2017, 20:28
|- - winniethepooh   Цитата(aaarrr @ Oct 17 2017, 21:28) Если ...   Oct 18 2017, 06:49
- - Tarbal   Цитата(winniethepooh @ Oct 16 2017, 17:57...   Oct 19 2017, 01:59
|- - winniethepooh   Цитата(Tarbal @ Oct 19 2017, 01:59) У вас...   Oct 19 2017, 09:28
|- - Tarbal   Цитата(winniethepooh @ Oct 19 2017, 13:28...   Oct 20 2017, 00:31
|- - winniethepooh   Цитата(Tarbal @ Oct 20 2017, 00:31) Вполн...   Oct 20 2017, 07:06
|- - Tarbal   Цитата(winniethepooh @ Oct 20 2017, 11:06...   Oct 21 2017, 03:36
|- - winniethepooh   Цитата(Tarbal @ Oct 21 2017, 03:36) Где о...   Oct 23 2017, 08:41
- - winniethepooh   Цитата(Tarbal @ Oct 25 2017, 02:03) Вы мо...   Oct 25 2017, 14:22
- - Tarbal   Цитата(winniethepooh @ Oct 25 2017, 18:22...   Oct 25 2017, 23:35
|- - winniethepooh   Цитата(Tarbal @ Oct 26 2017, 00:35) Тепер...   Oct 26 2017, 11:09
|- - Tarbal   Цитата(winniethepooh @ Oct 26 2017, 15:09...   Oct 26 2017, 12:55
- - aaarrr   Цитата(winniethepooh @ Oct 25 2017, 17:22...   Oct 26 2017, 00:13
- - winniethepooh   Цитата(aaarrr @ Oct 26 2017, 01:13) winni...   Oct 26 2017, 09:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 19:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016