aaarrr 63 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба что и где необходимо сделать для решения этой задачи? winniethepooh, в сообщении #18 приведена ссылка на текущую реализацию драйвера GPIO вашего процессора. Как можно видеть, никакой поддержки прерываний она не содержит. Если побродить по исходникам для других архитектур, можно найти пример, как должен выглядеть драйвер с поддержкой прерываний. Довести первое до состояние второго можно, но это явно не та задача, с которой стоит начинать знакомство с kernel development. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба winniethepooh, в сообщении #18 приведена ссылка на текущую реализацию драйвера GPIO вашего процессора. Как можно видеть, никакой поддержки прерываний она не содержит. Если побродить по исходникам для других архитектур, можно найти пример, как должен выглядеть драйвер с поддержкой прерываний. Довести первое до состояние второго можно, но это явно не та задача, с которой стоит начинать знакомство с kernel development. спасибо aaarrr за ссылку. если бы это была та задача, я бы не стал беспокоить участников этого форума.. но раз ужа так сложилось, спасибо всем еще раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба Теперь мне неясно отчего возвращается ошибка 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба добавил принт в функцию (в том же файле 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 равен нулю, то ваша задача будет невыполнима. Похоже прерывание не поддерживается. Ищите как изменить ситуацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться