티스토리 뷰

Study/Linux

[Linux] GPIO를 사용하는 subsystem driver

생각많은 소심남 2015. 10. 13. 17:54

 말은 gpio를 사용해서 외부 모듈을 제어할 수 있다고는 하지만 실제로 코드를 짜보라면 뭘보고 참고를 해야 될지 모르겠다.

찾아보니까 몇몇 대표적인 하드웨어(led, keyboard, mouse 등...)를 gpio를 이용해서 제어하는 코드들이 이미 kernel source안에 다 포함되어 있다. 감이 안잡히는 사람은 이 코드들을 참고하면 좋을거 같다. 


 - leds-gpio : drivers/leds/leds-gpio.c

  (LED sysfs interface를 제공해서 특정 GPIO Line에 연결된 LED를 제어할 수 있음)


 - ledtrig-gpio : drivers/leds/trigger/ledtrig-gpio.c

  (GPIO를 통해서 LED를 trigger하고 싶은 경우(?? 아마 level trigger냐 edge trigger냐를 결정하는 요소인거 같다.)


 - gpio-keys : drivers/input/keyboard/gpio_keys.c

  (GPIO를 이용해서 keyboard 입력과 관련한 interrupt를 제어할 수 있는 코드. Debounce handling도 가능)


 - gpio-keys-polled : drivers/input/keyboard/gpio_keys_polled.c

  (keyboard와 연결된 GPIO를 통해서 interrupt를 제어할 수 없는 경우 polling 방식을 통해서 감지함) 


 - gpio-mouse : drivers/input/mouse/gpio_mouse.c

  (삼버튼 방식의 마우스를 GPIO를 통해서 제어하는데 사용)


 - gpio-beeper : drivers/input/misc/gpio-beeper.c

  (GPIO와 연결된 외부 스피커를 통해서 소리를 냄)


 - gpio-tilt-polled : drivers/input/misc/gpio_tilt_polled.c

  (GPIO를 통해서 기울기를 polling 방식을 통해서 감지)


 - extcon-gpio : drivers/extcon/extcon-gpio.c

  (말그대로 external connector를 감지)


 - restart-gpio : drivers/power/gpio-restart.c

 (GPIO를 통해서 restart/reboot을 하는 경우 해당 syscall 호출)


 - poweroff-gpio : drivers/power/gpio-poweroff.c

 (GPIO를 통해서 power off/shutdown 을 하는 경우 해당 syscall 호출)


 - gpio-gate-clock : drivers/clk/clk-gpio-gate.c

 (Clock generator의 동작 제어)


 - i2c-gpio : drivers/i2c/busses/i2c-gpio.c

 (i2c interface를 가진 외부 하드웨어를 두개의 GPIO를 통해서 제어함)


 - spi-gpio : drivers/spi/spi-gpio.c

 (Serial Peripheral Interface bus를 제어함 - SPI 규격에 따라서 이를 제어할 수 있는 GPIO Line이 여러개 필요하다.)


 - w1-gpio : drivers/w1/masters/w1-gpio.c

 (One-wire interface bus를 제어함)


 - gpio-fan : drivers/hwmon/gpio-fan.c

 (GPIO를 통해서 fan을 제어할 수 있음. 이때 sysfs interface를 거침)


 - gpio-regulator : drivers/regulator/gpio-regulator.c

 (GPIO를 통해서 voltage regulator의 동작을 제어해 공급 전압을 조절할 수 있음.)


 - gpio-wdt : drivers/watchdog/gpio_wdt.c

 (Watchdog timer를 GPIO에 붙임 -  이를 통해서 주기적으로 GPIO에 신호를 줄 수 있음(documentation에서는 이걸 "ping"이라고 하는 거 같다.))


 - gpio-nand : drivers/mtd/nand/gpio.c

 (몇가지 GPIO Line을 통해서 NAND Flash chip을 제어)


잘 보면 대부분의 기능이 뭔가를 제어하는데 쓰이고 있는 것을 알 수 있다. 여기 소개된 것 이외에도 참고할 만한 GPIO Subsystem Driver들은 많다.

'Study > Linux' 카테고리의 다른 글

[Linux] SysVinit runlevel  (0) 2016.04.22
[Linux] init process  (0) 2016.04.21
[Bootloader] u-boot 로 qspi booting시 확인 사항 (zc706기준)  (0) 2015.12.16
[Linux] GPIO Descriptor Driver Interface  (0) 2015.10.12
[Linux] GPIO Descriptor Consumer Interface  (0) 2015.10.12
[Linux] GPIO interface  (0) 2015.10.12
[Linux] Booting Sequence  (0) 2014.08.03
댓글