Jump to content

    

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

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

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

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

 

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

 

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

Share this post


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

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

 

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

 

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

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

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

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

Share this post


Link to post
Share on other sites
Теперь мне неясно отчего возвращается ошибка 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

 

 

 

 

Share this post


Link to post
Share on other sites
добавил принт в функцию (в том же файле 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 равен нулю, то ваша задача будет невыполнима. Похоже прерывание не поддерживается. Ищите как изменить ситуацию.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now