2012-06-15 13 views
5

Mam na płycie powerpc z jądrem 3.2. Dostęp do gpio z sysfs działa zgodnie z oczekiwaniami, np.linux gpio c api

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

Czy nie ma interfejsu API umożliwiającego bezpośredni dostęp do pinów gpio z przestrzeni użytkownika? Czy muszę radzić sobie z tekstowym interfejsem Sysfs?

Szukam czegoś takiego: gpio_set (int no, int val);

Dzięki Klaus

+0

Wypróbuj [this] (http://foxlx.acmesystems.it/?id=22) lub [this] (http://www.mjmwired.net/kernel/Documentation/gpio.txt). –

Odpowiedz

1

Gdy masz urządzeń utworzonych w drzewie vfs, można otworzyć je jak typowych plików zakładając, że masz sterownik napisany i mają poprawne liczby główną i poboczną przypisanych w pliku MAKEDEV, który tworzy piny gpio na drzewie vfs.

-1

Każdy element GPIO jest mapowany jako rejestr, dzięki czemu można uzyskać do niego dostęp za pomocą/dev/mem. Zobacz here. Jeśli chcesz uzyskać dostęp bezpośrednio do GPIO, musisz pracować na poziomie przestrzeni jądra

+1

Niestety: To jest złe! Linux zapewnia dobrze zdefiniowany interfejs sterownika dla wszystkich IO. Zapewnia także dostęp do IO, do których nie można uzyskać dostępu za pośrednictwem rejestrów na rdzeniu. Umożliwia to również dostęp do pinów na układach "extender". Jeśli przeczytasz moje pytanie, zobaczysz, że istnieje interfejs sterownika. Pytanie nie polega na tym, jak uzyskać dostęp do zmapowanego kodu PIN rejestru ze sterownika jądra. Zamiast tego pytanie brzmiało, jak uzyskać dostęp do sterownika bez mapowania systemu plików. – Klaus

+1

Mapowana pamięć jest alternatywą dla dostępu do gpio zamiast sysfs. – b0b0b

+0

Dostęp do pamięci fizycznej nie jest ani dobrym, ani nawet znośnym sposobem uzyskania dostępu do jakiegokolwiek komponentu sprzętowego, opiera się na kodzie, który zawiera bardzo silne założenie co do celu, na którym działa. Co stanie się, jeśli kod jest błędny lub musi zostać przeniesiony? –

2

sysfs to najniższy poziom, na którym będziesz w stanie manipulować GPIO w ostatnich jądrach. To może być nieco uciążliwe, ale oferuje kilka zalet w stosunku do starego stylu API:

  • Nie brzydki ioctl
  • Może być skrypty bardzo łatwo (myślę skrypty startowe)
  • Dla wejść, „wartość” plików może być łatwo poll-ed dla rosnących/spada/obu brzegach i będzie to bardzo reaktywne do sprzętu przerywa

nie mam przykładowy kod w tej chwili, ale gdy dostęp do nich za pośrednictwem kodu C, często realizowane bardzo prosty owijka manipulująca deskryptorami plików i posiadająca warianty następującej int Echo:

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); 

Odtąd wdrożenie jest dość proste.