roboforum.ru

Технический форум по робототехнике.

mini2440 Работа с GPIO из Linux

Re: Работа с GPIO из Linux

Resident » 30 июл 2010, 17:49

setar писал(а):есть идея попробовать использовать для работы с GPIO механизм inotify

Почитал я в гугле про работу этого механизма
Аналог кронтаба, только живет не по времени, а по событиям. Так что особых навыков программирования не нужно ;)
Причем при наступлении события он элементарно запускает скрипт, который еще нужно как-то связать с нашей программой (а запускать по каждому событию разные скрипты (читай разные программы)- еще больший изврат, чем обращаться к пинам через файлы)
Отсюда имеем:
Плюсы(?): Можно собрать события со всех пинов в один поток (один файл) и прогой работать только с ним-единственным (опять же не знаю насколько это плюс, т.к. все-равно придется постоянно считывать данные с файла, преобразовывать в удобоваримый вид (лишние действия) и смотреть, что изменилось. Прерываниями в таком случае и не пахнет. Все прерывания заканчиваются на уровне выполнения скрипта)
Минусы: Помимо минусов, описаных в разделе плюсов :D , файл изменился - да, а КАК он изменился мы не знаем, так что все равно нам придется читать файл пина и смотреть новое его значение - это раз.
Два: механизм работает только на чтение, т.е. записывать в порты все равно придется "по-старинке" :pardon:

Добавлено спустя 14 минут 22 секунды:
А вот из области программирования и не очень, есть у меня одна идейка, как подключить все 4 входа АЦП (ибо пока я нашел только 1 вход :( )
Итак, мы знает, что АЦП 1 а аналоговые входы мультиплексируются и управляют всем этим делом регистры процессора.
Значит будем лезть в регистры процессора? Как?
Есть в линуксе одна замечательная либа, называется ptrace.
И предназначена она для отладки процессов.
Вызов такой:
#include <sys/ptrace.h>
long int ptrace(enum __ptrace_request request, pid_t pid, void * addr, void * data)

потом в описании идет куча пояснений к разным параметрам и т.д. и .т.п бла-бла-бла....
Самое интересное:
Значения, описываемые ниже, позволяют читать/изменять регистры процессора дочернего процесса, а потому очень тесно связаны с аппаратной реализацией системы.
Набор доступных регистров включает в себя регистры общего назначения и регистры FPU (арифметического сопроцессора).
PTRACE_GETREGS, PTRACE_GETFPREGS, PTRACE_GETFPXREGS:

При этих значениях request, после обычной проверки прав доступа, производится копирование значений регистров общего назначения, регистров с плавающей точкой, дополнительных регистров с плавающей точкой дочернего процесса в переменную родительского процесса data. Копирование выполняется с помощью функций getreg() и __put_user(), аргумент addr игнорируется.
PTRACE_SETREGS, PTRACE_SETFPREGS, PTRACE_SETFPXREGS:

При этих значениях аргумента request выполняется запись в регистры процессора трассируемого процесса. В данном случае доступ к отдельным регистрам ограничивается. Значения регистров берутся из аргумента data. Аргумент addr игнорируется.

Осталось только узнать названия соответствующих регистров, и можно мультиплексить АЦП, да и что угодно делать! (В рамках одного процесса)
Тоесть поидее наши изменения регистров не затронут работу всей системы...
А вот тут уже пошел ембеддед... ибо регистры проца, и как их видит линь - это уже дело сугубо специфическое.
Вобщем я так понял, нужно смотреть сорсы ядра и самого ptrace для нашего линя.
Я в этом деле немного новичок, так что есть кто шарит получше, я буду только рад любой помощи :)

Добавлено спустя 29 минут 30 секунд:
Поискал в папке сорцов ядра файлики (*reg.h)
Кто такие папки mach-gemini, mach-l7200, mach-bcmring и т.д.???
И в какой из них и в каком файле находятся нужные регистры? :%)

Re: Работа с GPIO из Linux

Aout » 05 сен 2010, 17:08

хм ... а у меня /sys/class/gpio нету.

Re: Работа с GPIO из Linux

setar » 05 сен 2010, 20:53

ядрышко криво собрано
без этого CONFIG_GPIO_SYSFS=y

Re: mini2440 Работа с GPIO из Linux

aragats » 20 ноя 2010, 02:15

Тема жива ещё? Как-то немало вопросов было поднято, но большей частью они остались без ответов обсуждений.

Я недавно собрал и установил Archlinux. Мне нужны GPIO, ADC и SPI.

Подправил ядро для распознавания второго SPI порта - работает, но непонятно, как с 8-битным регистром организовать посылку 32-битных слов без ощутимых задержек между байтами.

По поводу прямого обращения к регистрам GPIO/ADC и пр. есть кое-какая информация, например, здесь:
http://www.friendlyarm.net/forum/topic/67 . Там же пишут как "включить" в ядре остальные ADC и получить /dev/adc{1,2,3}, но весьма абстракто, есть кое-какие подводные камни.

Re: mini2440 Работа с GPIO из Linux

setar » 22 ноя 2010, 17:53

Жива, жива
немного заморожена по причине моей занятости на работе
народ ковыряет потихоньку

Re: mini2440 Работа с GPIO из Linux

Resident » 24 ноя 2010, 13:23

aragats писал(а):Тема жива ещё?
Жива.
aragats писал(а):Как-то немало вопросов было поднято, но большей частью они остались без ответов обсуждений.
Нуу, касаемо этой темы, я в первом посте показал как юзать GPIO, этим способом и пользуюсь пока что. Решу насущные проблемы, буду играться с ядром. Не такое это и простое дело, как кажется поначалу. ИМХО
aragats писал(а):Подправил ядро для распознавания второго SPI порта - работает
Дык статейку/код в студию ;) вдруг кому другому понадобится сделать то же самое. :)
aragats писал(а):По поводу прямого обращения к регистрам GPIO/ADC и пр. есть кое-какая информация, например, здесь:
http://www.friendlyarm.net/forum/topic/67 . Там же пишут как "включить" в ядре остальные ADC и получить /dev/adc{1,2,3}, но весьма абстракто, есть кое-какие подводные камни.
Там как раз и предлагают написать драйвер ядра, т.к. по другому получить непосредственный доступ к регистрам процессора весьма проблематично.

Re: mini2440 Работа с GPIO из Linux

gena2x » 24 ноя 2010, 18:16

для целей отладки можно и через регистры писать, с помощью простейшего тулза: www.bsdmn.com/openmoko/glamo/timings/memwrite.c, например ./memwrite $((56000010)) покажет вам GPBCON, ./memwrite $((56000010)) $((0)) запишет 32 разряда нуликов. Можно модифицировать по вкусу для дергания битов

Re: mini2440 Работа с GPIO из Linux

Murderer » 06 июн 2011, 00:43


Re: mini2440 Работа с GPIO из Linux

Sash0k » 15 июн 2011, 10:29

Извиняюсь, но так и не смог полностью понять, как использовать прерывания GPIO.

0) В документации по GPIO в ядре есть абзац GPIOs mapped to IRQs. Это можно использовать в миньке?

1) Здесь написано включая GPIOFS но что такое конкретно эта GPIOFS гугль не отвечает...

2) Использование inotify, это нерациональное, но решение. Только для этого нужно монтировать /sys/class/gpio/ в ОЗУ, перезапись флеш памяти будет занимать время и истирать её. Я думал, что минькин udev так и делает, но последние два сообщения отсюда опровергают это. Tmpfs поддерживается?

Re: mini2440 Работа с GPIO из Linux

boez » 15 июн 2011, 11:04

Они вроде не опровергают, а только спрашивают. И ИМХО подобные опасения беспочвенны - во флешке находится только пустая папка sys. А то что в нее смонтировано - это _другая_ фс, sysfs, виртуальная.

Re: mini2440 Работа с GPIO из Linux

k0der1 » 06 сен 2011, 22:49

Добрый день.
Глянул в тему. есть пару вопросов?
1. что делать если нет каталога /sys/class/gpio
2. из какой среды програмирования предпочитаете работу с перефирией ( в частности с портами)?

Re: mini2440 Работа с GPIO из Linux

Strijar » 07 сен 2011, 08:39

1. что делать если нет каталога /sys/class/gpio


Влючить в ядре, пересобрать ядро, установить ядро - profit!

2. из какой среды програмирования предпочитаете работу с перефирией ( в частности с портами)?


Вообще с портами в Линукс работает ядро - через драйвера. Это самый правильный путь. А при чем здесь среда програмирования?

Re: mini2440 Работа с GPIO из Linux

k0der1 » 07 сен 2011, 10:24

Суть такая:
Запустить свою прогу, которая общалась бы с ком портами, SPI, Дергала ножками, читала статусы ножек и писала на внешнюю usb или sd флешку. Без среды програм. никак. вот хочу выбрать


cron
Rambler\'s Top100 Mail.ru counter