2012-06-15 4 views
5

3.2 커널이 실행되는 powerpc 보드가 있습니다. sysfs로 gpio에 액세스하면 예상대로 작동합니다.linux gpio c api

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

gpio 핀을 사용자 공간에서 직접 액세스 할 수있는 API가 있습니까? 텍스트 기반 sysfs 인터페이스를 다루어야합니까?

다음과 같이 검색 : gpio_set (int no, int val); 당신이 VFS 트리에서 만든 장치가 있으면

감사 클라우스

+0

[이] (http://foxlx.acmesystems.it/?id=22) 또는 [this] (http://www.mjmwired.net/kernel/Documentation/gpio.txt)를 사용해보십시오. –

답변

1

, 당신은 당신이 운전 기록을 가지고 생성 MAKEDEV 파일에 할당 된 올바른 메이저와 마이너 번호가 가정 일반적인 파일처럼 열 수 있습니다 vfs 트리의 gpio 핀.

-1

모든 GPIO는 레지스터로 매핑되는 메모리이므로/dev/mem을 통해 액세스 할 수 있습니다. here을 참조하십시오. GPIO에 직접 액세스하려면 커널 공간 수준에서 작업해야합니다.

+1

죄송합니다 : 그 잘못입니다! Linux는 모든 IO에 대해 잘 정의 된 드라이버 인터페이스를 제공합니다. 또한 코어 칩의 레지스터를 통해 액세스 할 수없는 IO에 대한 액세스를 제공합니다. 따라서 "extender"칩의 핀에 액세스 할 수 있습니다. 내 질문을 읽으면 드라이버 인터페이스가 있음을 알 수 있습니다. 문제는 커널 드라이버에서 레지스터 매핑 된 핀에 액세스하는 방법이 아니라는 것입니다. 대신 문제는 파일 시스템 매핑없이 드라이버에 액세스하는 방법이었습니다. – Klaus

+1

매핑 된 메모리는 sysfs 대신 gpio에 액세스하는 대신 사용할 수 있습니다. – b0b0b

+0

실제 메모리 액세스는 하드웨어 구성 요소에 액세스하기에 좋지도 용납할만한 방법이 아니며 실행중인 대상에 대해 매우 강력한 가정을하는 코드에 의존합니다. 코드가 버그가 있거나 이식해야하는 경우 어떻게됩니까? –

2

sysfs는 최신 커널에서 GPIO를 조작 할 수있는 가장 낮은 수준입니다. 그것은 조금 지루할 수 있지만 오래된 스타일의 API를 통해 여러 가지 장점을 제공합니다

  • 은 (시작 스크립트를 생각하는) 입력의
  • 아주 쉽게 스크립팅 할 수있는 추한 IOCTL은 "값"파일 상승/하강/양쪽 에지에서 쉽게 폴링 될 수 있으며 하드웨어 인터럽트에 매우 민감합니다.

현재 예제 코드는 없지만 C 코드를 통해 액세스 할 때 매우 간단한 파일 기술자를 조작하고 다음 int의 변형을 갖는 래퍼 에버 페이스 :

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

그때부터 구현은 매우 간단합니다.