Ubuntu에서 gpio를 생성/삭제하거나 값을 넣는 방법은 sys-fs에 노드를 만들어
할 수 있다.
  1) 생성하는 방법은 gpio port-number값을 /sys/class/gpio/export에 넣는 것이다.
  2) 삭제하기 위해서는 같은 값은 /sys/class/gpio/unexport에 넣는다.

gpio-number는 gpio-group-number와  group내의 gpio번호에 의해 계산된다.
 예를 들어 GP6_14라면 gpio-group-number은 6번이고, 'gpio번호'는 14이다.

    gpio-number = (gpio-group-number - 1)*32 + 'gpio번호' = (6-1)*32 + 14 = 174

gpio 174번 노드를 생성하고자 한다면,
   $ echo 174 > /sys/class/gpio/export
   $ ls /sys/class/gpio/gpio174
      direction
      value
gpio174라는 디렉토리가 생성되며, 그 밑에 direction, value라는 파일이 만들어 진다.
gpio를 통해 값을 쓰고 싶다면, direction에 'out'이라는 문자열을 넣는다.
   $ echo out > /sys/class/gpio/gpio174/direction
이제 값(0또는 1)을 주기 위해서는 value라는 파일은 이용한다.
   $ echo 1 > /sys/class/gpio/gpio174/value
   $ echo 0 > /sys/class/gpio/gpio174/value
   $ echo 1 > /sys/class/gpio/gpio174/value

이것을 C언어의 stdio를 이용하여 만들어 보도록 한다.
일단 gpio 174번을 등록시키기 위해서 /sys/class/gpio/export파일을 연다.
   fp = fopen("/sys/class/gpio/export", "w");
   fprintf(fp, "174\n");
   fclose(fp);

디렉토리 /sys/class/gpio/gpio174가 만들어 졌을 것이다. 다음으로
174번의 direction을 결정한다.
   fp = fopen("/sys/class/gpio/gpio174/direction", "w");
   fprintf(fp, "out\n");
   fclose(fp);

이제, 다음과 같이 gpio에 값을 보낼 수 있다.
   fp = fopen("/sys/class/gpio/gpio174/value", "w");
   fprintf(fp, "1\n");

위의 코드로 실행한 결과를 보면, gpio는 실제로 값을 받지 못하게 된다.
원인은 stdio는 기본적으로 buffered-io를 하기 때문이다.
"/sys/class/gpio/gpio174/value"를 연 file-pointer('fp')를
 setvbuf()함수를 이용하여 다음과 같이 unbuffered-io로 변경하여 주면 된다.
    setvbuf(fp, NULL, _IONBF, 0);

다음 C-프로그램은 174번 gpio포트를 연 후 1초에 한번씩 값을 변경하면서 10회 반복하는
코드이다.

gpio_ctrl_1.png