Перейти к содержанию

    

прерывания в embedded linux

что и где необходимо сделать для решения этой задачи?

winniethepooh, в сообщении #18 приведена ссылка на текущую реализацию драйвера GPIO вашего процессора.

Как можно видеть, никакой поддержки прерываний она не содержит.

 

Если побродить по исходникам для других архитектур, можно найти пример, как должен выглядеть драйвер с поддержкой прерываний.

 

Довести первое до состояние второго можно, но это явно не та задача, с которой стоит начинать знакомство с kernel development.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
winniethepooh, в сообщении #18 приведена ссылка на текущую реализацию драйвера GPIO вашего процессора.

Как можно видеть, никакой поддержки прерываний она не содержит.

 

Если побродить по исходникам для других архитектур, можно найти пример, как должен выглядеть драйвер с поддержкой прерываний.

 

Довести первое до состояние второго можно, но это явно не та задача, с которой стоит начинать знакомство с kernel development.

спасибо aaarrr за ссылку.

если бы это была та задача, я бы не стал беспокоить участников этого форума..

но раз ужа так сложилось, спасибо всем еще раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Теперь мне неясно отчего возвращается ошибка 6. Если вы добавите принтов и установите причину, то у вас появится путь решения вашей задачи. Я раньше приводил коды других функций, которые вызывают ту где вы добавили принт. Надо в них добавить принты, чтобы установить причину.

 

добавил принт в функцию (в том же файле gpiolib.c)

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;

}

где

-ENXIO=-6

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
добавил принт в функцию (в том же файле gpiolib.c)

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;

}

где

-ENXIO=-6

 

 

Я не проверив, предложил проверить значение chip, а не chip->to_irq, которое равно нулю и приводит к ошибке. Это то, что мне было неясно. Если chip->to_irq равен нулю, то ваша задача будет невыполнима. Похоже прерывание не поддерживается. Ищите как изменить ситуацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация