Pull to refresh

Comments 16

get: устанавливает полученное значение на линию;
set: считывает установленное на линии значение.
тут местами не перепутали?
Выполняю «Шаг первый»:
for i in {248..255}; do echo $i > /sys/class/gpio/export; done
получаю
bash: echo: write error: Invalid argument

Добрый день! Вы получаете данную ошибку потому что в вашей системе не зарегестрированы GPIO с такими намерами. Пожалуйста прочитайте конец третьего шага. Прежде чем создавать элементы управления GPIO нужно написать драйвер и узнать номера, которые вы будете создавать использую sysfs.
А еще раньше достать такую же железку как у вас…

То есть стоит написать, что пример не воспроизводим.
Данная статья показывает принцип взаимодействия драйвера с sysfs интерфейсом на конкретном примере, а также принцип создание GPIO драйвера с нуля. И так как в драйвере происходит динамическое создание номеров GPIO, это абсолютно предсказуемо, что они будут отличаться. Скорее всего в системе уже существует GPIO драйвер, нужно только узнать правильные номер. Можно изменить диапазон в цикле и тогда вам удасться узнать номера присутсвующих GPIO в системе. Есть еще один вариант: посмотреть на запись gpiochipN, и с большой вероятностью, номера GPIO начинаются с N.
1) Если говорить про принцип создание драйвера с нуля, то стоило бы начать с описания железа и его регистров управления.

2) Если вы затронули тему идентификации gpio, то стоило бы изучить вопрос с наименованием, вы например в курсе, что экспортированный контакт не обязательно будет иметь имя вида gpioN?

3) Присутвующие в системе gpio надо смотреть исходя из приципиальной схемы и документации. Номера gpio в системе присваиваються по системе «кто первый встал тог и тапки», это раз, во-вторых номера абсолютно не обязательно идут подряд. Тогда уж надо смотреть base для gpiochip и делать экспорт по числу контактов на чипе, для каждого чипа.
1) Назначение используемых регистров дается по ходу статьи и так как для каждой платформы будет разная регистровая карта, не стоит загружать читателя ее устройством. Главная цель статьи показать как можно написать драйвер, а не объяснить устройство железа и регистров управления.

2) У вас каждое предложение с претензиями:) Конечно я в курсе что имена в sysfs не обязательно будут называться gpioN, но только в том случае если реализован данный функционал. В данной статье отсутсвует поддержка задания имени GPIO. Если в статью добавлять все нюансы которые могут быть в GPIO, то статья может очень сильно растянуться. Чего только стоит поддержать PINCTRL для GPIO.

3) Наверное вы хотите показать, что вы разбираетесь в теме:) Если же у нас достаточно много GPIO, то их разбивают на банки, например: тут. В любом случае, это уже нюансы реализации, а также специфика конкретного чипа, упоминание которых только растянут сатью.

Данная статья не подробный мануал как написать GPIO драйвер во всех возможных случаях, а лишь отправная точка с которой можно работать и добавлять необходимую вам реализацию в зависимости от платформы с которой вы работаете.

В любом случае, спасибо за ваши коментарии:)
Я хорошо разбираюсь в данной теме. Можете почитать мои статьи. Поэтому и делаю замечания, поскольку ваша статья не раскрывает вопрос создания драйвера, можно открыть любой драйвер gpio поверх mmio и мы получим, более внятное представление, как стоит писать gpio драйвер:

1) для mmio можно использовать bgpio_init (написанный кстати нашим соотечественником еще аж в 2010 году), и тогда не надо самому писать однотипные в принципе функции write, read, direction и прочие.

2) для irq в большинстве случаев сгодится irq_chip_generic

3) Их, простите меня, не «разбивают» на банки они уже по банкам находятся.

А оправная точка для любого драйвера GPIO, это не подсматривание в готовую реализацию, а вдумчивое изучения документации на железо.
Конечно, отправная точка для создания драйвера, это изучение технической документации, но чтение данной документации не особо поможет вам добавить ваш драйвер в Linux, т.к читатель мог писать драйвера для голого железа, но не иметь опыта работы с Linux.
Статья показывает через какие интерфейсы происходит взаимодействие драйвера с ядром Linux и если отрыть директорию в которой содержаться большинство gpio драйверов , то можно увидеть, что они устроены абсолютно также и используют аналогичные интерфейсы. Так что ваше утверждение о том, что статья не расскрывает вопрос создания драйвера, по моему мнению, очень натянуто.
Так что ваше утверждение о том, что статья не расскрывает вопрос создания драйвера, по моему мнению, очень натянуто.

То есть вы хотите сказать, что в вашей статье есть что-то новое, что нельзя прочитать в официальной документации?
https://www.kernel.org/doc/Documentation/gpio/

Тогда уж многое не упомянуто из того, что там уже есть.
Зачем Вы пристали к человеку? Человек на русском языке расписывает нюансы, изложенные в документации. Статья в любом случае (если написана грамотно) бесценна. Вы оба правы — у вопроса две стороны медали. Автор рассмотрел одну сторону. Вы рассмотрите другую, или Вам слабо потратить время и силы на такую публикацию? Не пойму причин Ваших нападок на автора.
Почему слабо — можете посмотреть:

Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux
Использование gpio-generic и irq_chip_generic для драйвера gpio
Заметка о новом интерфейсе linux kernel — gpio uapi

А пристал я потому, что
разработанный GPIO блок для нового процессора «зашитый» на ПЛИС

Без описания этого блока, данная работа лишена смысла. А что за блок? А он открытый? А скачать можно? А какие типы прерываний поддерживает?

А что за процессор?

Если все это закрытая разработка, то какой в этом во всем смысл?
Во-первых, да это закрытая разработка, а во-вторых детальное описание не приводится для того, чтобы не привязываться к конкретной платформе.
Данная структура драйвера применима к любой платформе и структура драйвера останется неизменной (какой-то функционал конечно может добавляться, но это уже зависит от специфики железки).
Во-первых, да это закрытая разработка, а во-вторых детальное описание не приводится для того, чтобы не привязываться к конкретной платформе.


Это очень смелое заявление. Что тогда по-вашему «привязка» к конкретной платформе?
Если вы не против, давайте остановимся на том что каждый по своему прав. Но если хотите, то можем перевести общение в ЛС, чтобы не спорить в комментариях.
Sign up to leave a comment.

Articles