Comments 16
get: устанавливает полученное значение на линию;
set: считывает установленное на линии значение.
тут местами не перепутали?
set: считывает установленное на линии значение.
тут местами не перепутали?
+2
Выполняю «Шаг первый»:
for i in {248..255}; do echo $i > /sys/class/gpio/export; doneполучаю
bash: echo: write error: Invalid argument![](https://habrastorage.org/r/w1560/webt/sb/el/mk/sbelmkwinjwakaru4b55t1x3wq4.png)
![](https://habrastorage.org/webt/sb/el/mk/sbelmkwinjwakaru4b55t1x3wq4.png)
0
Добрый день! Вы получаете данную ошибку потому что в вашей системе не зарегестрированы GPIO с такими намерами. Пожалуйста прочитайте конец третьего шага. Прежде чем создавать элементы управления GPIO нужно написать драйвер и узнать номера, которые вы будете создавать использую sysfs.
0
А еще раньше достать такую же железку как у вас…
То есть стоит написать, что пример не воспроизводим.
То есть стоит написать, что пример не воспроизводим.
-1
Данная статья показывает принцип взаимодействия драйвера с sysfs интерфейсом на конкретном примере, а также принцип создание GPIO драйвера с нуля. И так как в драйвере происходит динамическое создание номеров GPIO, это абсолютно предсказуемо, что они будут отличаться. Скорее всего в системе уже существует GPIO драйвер, нужно только узнать правильные номер. Можно изменить диапазон в цикле и тогда вам удасться узнать номера присутсвующих GPIO в системе. Есть еще один вариант: посмотреть на запись gpiochipN, и с большой вероятностью, номера GPIO начинаются с N.
+1
1) Если говорить про принцип создание драйвера с нуля, то стоило бы начать с описания железа и его регистров управления.
2) Если вы затронули тему идентификации gpio, то стоило бы изучить вопрос с наименованием, вы например в курсе, что экспортированный контакт не обязательно будет иметь имя вида gpioN?
3) Присутвующие в системе gpio надо смотреть исходя из приципиальной схемы и документации. Номера gpio в системе присваиваються по системе «кто первый встал тог и тапки», это раз, во-вторых номера абсолютно не обязательно идут подряд. Тогда уж надо смотреть base для gpiochip и делать экспорт по числу контактов на чипе, для каждого чипа.
2) Если вы затронули тему идентификации gpio, то стоило бы изучить вопрос с наименованием, вы например в курсе, что экспортированный контакт не обязательно будет иметь имя вида gpioN?
3) Присутвующие в системе gpio надо смотреть исходя из приципиальной схемы и документации. Номера gpio в системе присваиваються по системе «кто первый встал тог и тапки», это раз, во-вторых номера абсолютно не обязательно идут подряд. Тогда уж надо смотреть base для gpiochip и делать экспорт по числу контактов на чипе, для каждого чипа.
+1
1) Назначение используемых регистров дается по ходу статьи и так как для каждой платформы будет разная регистровая карта, не стоит загружать читателя ее устройством. Главная цель статьи показать как можно написать драйвер, а не объяснить устройство железа и регистров управления.
2) У вас каждое предложение с претензиями:) Конечно я в курсе что имена в sysfs не обязательно будут называться gpioN, но только в том случае если реализован данный функционал. В данной статье отсутсвует поддержка задания имени GPIO. Если в статью добавлять все нюансы которые могут быть в GPIO, то статья может очень сильно растянуться. Чего только стоит поддержать PINCTRL для GPIO.
3) Наверное вы хотите показать, что вы разбираетесь в теме:) Если же у нас достаточно много GPIO, то их разбивают на банки, например: тут. В любом случае, это уже нюансы реализации, а также специфика конкретного чипа, упоминание которых только растянут сатью.
Данная статья не подробный мануал как написать GPIO драйвер во всех возможных случаях, а лишь отправная точка с которой можно работать и добавлять необходимую вам реализацию в зависимости от платформы с которой вы работаете.
В любом случае, спасибо за ваши коментарии:)
2) У вас каждое предложение с претензиями:) Конечно я в курсе что имена в sysfs не обязательно будут называться gpioN, но только в том случае если реализован данный функционал. В данной статье отсутсвует поддержка задания имени GPIO. Если в статью добавлять все нюансы которые могут быть в GPIO, то статья может очень сильно растянуться. Чего только стоит поддержать PINCTRL для GPIO.
3) Наверное вы хотите показать, что вы разбираетесь в теме:) Если же у нас достаточно много GPIO, то их разбивают на банки, например: тут. В любом случае, это уже нюансы реализации, а также специфика конкретного чипа, упоминание которых только растянут сатью.
Данная статья не подробный мануал как написать GPIO драйвер во всех возможных случаях, а лишь отправная точка с которой можно работать и добавлять необходимую вам реализацию в зависимости от платформы с которой вы работаете.
В любом случае, спасибо за ваши коментарии:)
+1
Я хорошо разбираюсь в данной теме. Можете почитать мои статьи. Поэтому и делаю замечания, поскольку ваша статья не раскрывает вопрос создания драйвера, можно открыть любой драйвер gpio поверх mmio и мы получим, более внятное представление, как стоит писать gpio драйвер:
1) для mmio можно использовать bgpio_init (написанный кстати нашим соотечественником еще аж в 2010 году), и тогда не надо самому писать однотипные в принципе функции write, read, direction и прочие.
2) для irq в большинстве случаев сгодится irq_chip_generic
3) Их, простите меня, не «разбивают» на банки они уже по банкам находятся.
А оправная точка для любого драйвера GPIO, это не подсматривание в готовую реализацию, а вдумчивое изучения документации на железо.
1) для mmio можно использовать bgpio_init (написанный кстати нашим соотечественником еще аж в 2010 году), и тогда не надо самому писать однотипные в принципе функции write, read, direction и прочие.
2) для irq в большинстве случаев сгодится irq_chip_generic
3) Их, простите меня, не «разбивают» на банки они уже по банкам находятся.
А оправная точка для любого драйвера GPIO, это не подсматривание в готовую реализацию, а вдумчивое изучения документации на железо.
+1
Конечно, отправная точка для создания драйвера, это изучение технической документации, но чтение данной документации не особо поможет вам добавить ваш драйвер в Linux, т.к читатель мог писать драйвера для голого железа, но не иметь опыта работы с Linux.
Статья показывает через какие интерфейсы происходит взаимодействие драйвера с ядром Linux и если отрыть директорию в которой содержаться большинство gpio драйверов , то можно увидеть, что они устроены абсолютно также и используют аналогичные интерфейсы. Так что ваше утверждение о том, что статья не расскрывает вопрос создания драйвера, по моему мнению, очень натянуто.
Статья показывает через какие интерфейсы происходит взаимодействие драйвера с ядром Linux и если отрыть директорию в которой содержаться большинство gpio драйверов , то можно увидеть, что они устроены абсолютно также и используют аналогичные интерфейсы. Так что ваше утверждение о том, что статья не расскрывает вопрос создания драйвера, по моему мнению, очень натянуто.
0
Так что ваше утверждение о том, что статья не расскрывает вопрос создания драйвера, по моему мнению, очень натянуто.
То есть вы хотите сказать, что в вашей статье есть что-то новое, что нельзя прочитать в официальной документации?
https://www.kernel.org/doc/Documentation/gpio/
Тогда уж многое не упомянуто из того, что там уже есть.
0
Зачем Вы пристали к человеку? Человек на русском языке расписывает нюансы, изложенные в документации. Статья в любом случае (если написана грамотно) бесценна. Вы оба правы — у вопроса две стороны медали. Автор рассмотрел одну сторону. Вы рассмотрите другую, или Вам слабо потратить время и силы на такую публикацию? Не пойму причин Ваших нападок на автора.
+1
Почему слабо — можете посмотреть:
Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux
Использование gpio-generic и irq_chip_generic для драйвера gpio
Заметка о новом интерфейсе linux kernel — gpio uapi
А пристал я потому, что
Без описания этого блока, данная работа лишена смысла. А что за блок? А он открытый? А скачать можно? А какие типы прерываний поддерживает?
А что за процессор?
Если все это закрытая разработка, то какой в этом во всем смысл?
Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux
Использование gpio-generic и irq_chip_generic для драйвера gpio
Заметка о новом интерфейсе linux kernel — gpio uapi
А пристал я потому, что
разработанный GPIO блок для нового процессора «зашитый» на ПЛИС
Без описания этого блока, данная работа лишена смысла. А что за блок? А он открытый? А скачать можно? А какие типы прерываний поддерживает?
А что за процессор?
Если все это закрытая разработка, то какой в этом во всем смысл?
0
Во-первых, да это закрытая разработка, а во-вторых детальное описание не приводится для того, чтобы не привязываться к конкретной платформе.
Данная структура драйвера применима к любой платформе и структура драйвера останется неизменной (какой-то функционал конечно может добавляться, но это уже зависит от специфики железки).
Данная структура драйвера применима к любой платформе и структура драйвера останется неизменной (какой-то функционал конечно может добавляться, но это уже зависит от специфики железки).
0
Во-первых, да это закрытая разработка, а во-вторых детальное описание не приводится для того, чтобы не привязываться к конкретной платформе.
Это очень смелое заявление. Что тогда по-вашему «привязка» к конкретной платформе?
0
Sign up to leave a comment.
Пишем модуль ядра Linux: GPIO с поддержкой IRQ