2012-06-15 6 views
5

У меня есть плата powerpc с ядром 3.2, работающим на нем. Доступ к gpio с sysfs работает, как ожидается, например.linux gpio c api

> echo 242 > /sys/class/gpio/export 
> cat /sys/class/gpio/gpio242/value 
> 1 

Нет ли API для прямого доступа к контактам gpio из пользовательского пространства? Должен ли я работать с текстовым интерфейсом sysfs?

Я читаю что-то вроде: gpio_set (int no, int val);

Благодаря Клауса

+0

Попробуйте [это] (http://foxlx.acmesystems.it/?id=22) или [это] (http://www.mjmwired.net/kernel/Documentation/gpio.txt). –

ответ

1

После того, как у вас есть устройства, созданные в дереве VFS, вы можете открыть их как типичные файлы если у вас есть драйвер, написанные и иметь правильные главные и второстепенные номера, присвоенные в файле Makedev, который создает gpio на дереве vfs.

-1

Каждый GPIO является памятью, отображаемой как регистр, поэтому вы можете получить к ней доступ через/dev/mem. См. here. Если вы хотите получить доступ непосредственно к GPIO, вам необходимо работать на уровне пространства ядра

+1

Извините: это неправильно! Linux предоставляет хорошо определенный интерфейс драйвера для всех IO. Он также обеспечивает доступ к IO, к которым нет доступа через регистры на основном чипе. Это позволяет вам также получать доступ к выводам на чипах «расширитель». Если вы прочитаете мой вопрос, вы увидите, что есть интерфейс драйвера. Вопрос заключается не в том, как получить доступ к выводу с привязкой к регистру из драйвера ядра. Вместо этого вопрос заключался в том, как получить доступ к драйверу без сопоставления файловой системы. – Klaus

+1

Отображение памяти является альтернативой для доступа к gpio вместо sysfs. – b0b0b

+0

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

2

sysfs - это самый низкий уровень, на котором вы сможете манипулировать GPIO в последних ядрах. Это может быть немного утомительно, но он имеет ряд преимуществ по сравнению со старым стилем API:

  • Нет некрасиво IOCTL
  • Может быть сценарий очень легко (думаю, сценарии запуска)
  • Для входов, файл «значение» может быть легко опробован для увеличения/падения/обоих краев, и он будет очень реагировать на аппаратные прерывания

У меня нет кода примера на данный момент, но при доступе к ним через код C я часто реализовал очень простой оболочка, манипулирующая файловыми дескрипторами и имеющая вариации следующих int erface:

int gpio_open(int number, int out); /* returns handle (fd) */ 
int gpio_close(int gpio); 
int gpio_set(int gpio, int up); 
int gpio_get(int gpio, int *up); 
int gpio_poll(int gpio, int rising_edge, int timeout); 

С этого момента реализация довольно проста.