아주 특별한 경우에 있어서 gpio control 을 user application 에 넘기는 경우가 있습니다.
저는 sysfs 를 사용할까 했었는데 더 세련된 방법이 있더군요.
gpio_request(gpio, "Test_Pin");
gpio_cfgpin(gpio, GPIO_OUTPUT);
gpio_direction_output(gpio, 1);
gpio_export(gpio, 1);
gpio_cfgpin(gpio, GPIO_OUTPUT);
gpio_direction_output(gpio, 1);
gpio_export(gpio, 1);
바로 gpio_export()
라는 함수입니다.
이 함수를 사용하면
/sys/class/gpio/
위치에 해당 포트에 대한 pin node 가 생성되어서 user 단에서 r/w 가 가능해 집니다.
다만 유의할 점은
gpio_free()
함수를 호출하면 export 된 정보가 사라진 다는 점입니다.
따라서 gpio_free 는 system 종료나 루틴 fail 시에 호출하는것이 적절할 것입니다.
또한 동적으로 하는 방법도 있습니다.
:/sys/class/gpio # ls
export
gpio240
gpio48
gpiochip0
gpiochip229
unexport
여기에 다음과 같이 입력하시면 10번 gpio 를 control 할 수 있습니다.
echo 10 > export
해당 pin 에 부합되는 번호는 gpio ball name 의 define 이 있는 파일에 가면 주로 볼 수 있습니다.
< gpio-names.h >
...
#define TEGRA_GPIO_PF6 46
#define TEGRA_GPIO_PF7 47
#define TEGRA_GPIO_PG0 48
#define TEGRA_GPIO_PG1 49
#define TEGRA_GPIO_PG2 50
#define TEGRA_GPIO_PG3 51
#define TEGRA_GPIO_PG4 52
#define TEGRA_GPIO_PG5 53
#define TEGRA_GPIO_PG6 54
#define TEGRA_GPIO_PG7 55
...
참고로 gpio 를 pin num 가 아닌 request 시의 name.. (정확히는 label 이라고 하죠) 으로 sysfs 를 만들 수 있는 패치도 있습니다.
매우 유용해 보이네요.
http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg09400.html
'Programming > Linux_Kernel' 카테고리의 다른 글
mknod 의 의미 (0) | 2010.12.23 |
---|---|
Serial(uart) port 를 통한 consol 출력에 대해서.. (0) | 2010.12.14 |
linux file system 용어 - UBI (0) | 2010.11.26 |
boot param의 해석 - __early_param, __sertup mecro 분석 (2) | 2010.11.24 |
memory mapping 전에 serial print 사용하기 (0) | 2010.11.23 |