Linux: gpio ๋‚ด๋ณด๋‚ด๊ธฐ ํƒ€์ด๋ฐ ๋ฌธ์ œ

์— ๋งŒ๋“  2014๋…„ 03์›” 27์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: raspberrypi/linux

๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๋ช…๋ น์ด Raspbian(2014-01-07-wheezy-raspbian.zip)์„ ์‚ฌ์šฉํ•˜์—ฌ Raspberry Pi์˜ ๋ช…๋ น์ค„์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

pi<strong i="6">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport
pi<strong i="7">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/export
pi<strong i="8">@raspberrypi</strong> ~ $ echo out > /sys/class/gpio/gpio23/direction 
pi<strong i="9">@raspberrypi</strong> ~ $ 

๊ทธ๋Ÿฌ๋‚˜ ๊ฐ™์€ ์ค„์—์„œ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜๋ฉด ๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

pi<strong i="13">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; echo out > /sys/class/gpio/gpio23/direction
-bash: /sys/class/gpio/gpio23/direction: Permission denied
pi<strong i="14">@raspberrypi</strong> ~ $ 

๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๋Š” "/sys/class/gpio/gpio23/direction"์— ๋Œ€ํ•œ ๊ทธ๋ฃน ๋ฐ ๊ถŒํ•œ ๋น„ํŠธ๊ฐ€ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜๊ธฐ ์ „์— "echo out > /sys/class/gpio/gpio23/direction"์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. . ๊ทธ๋ฃน ๋ฐ ๊ถŒํ•œ ๋น„ํŠธ๋Š” "๋ฃจํŠธ" ๋ฐ "-rw-r--r--"์ด์ง€๋งŒ "gpio" ๋ฐ "-rwxrwx---"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํƒ€์ด๋ฐ ๋ฌธ์ œ๋Š” gpio 23์„ ๋‚ด๋ณด๋‚ด๊ณ  "/sys/class/gpio/gpio23/"์˜ ๋‚ด์šฉ์„ ๋‘ ๋ฒˆ ๋‚˜์—ดํ•˜๋Š” ๋ช…๋ น ์‹œํ€€์Šค์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ls ๋ช…๋ น์˜ ์ถœ๋ ฅ์€ ๋‘ ๋ฒˆ์งธ ls ๋ช…๋ น์˜ ์ถœ๋ ฅ๊ณผ ์ƒ๋‹นํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ทธ๋ฃน๊ณผ ๊ถŒํ•œ์ด ๋ชจ๋‘ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

pi<strong i="19">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; ls -l /sys/class/gpio/gpio23/; ls -l /sys/class/gpio/gpio23/
total 0
-rw-r--r-- 1 root root 4096 Mar 27 21:51 active_low
-rw-r--r-- 1 root root 4096 Mar 27 21:51 direction
-rw-r--r-- 1 root root 4096 Mar 27 21:51 edge
drwxr-xr-x 2 root root    0 Mar 27 21:51 power
lrwxrwxrwx 1 root root    0 Mar 27 21:51 subsystem -> ../../../../class/gpio
-rw-r--r-- 1 root root 4096 Mar 27 21:51 uevent
-rw-r--r-- 1 root root 4096 Mar 27 21:51 value
total 0
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 active_low
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 direction
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 edge
drwxrwx--- 2 root gpio    0 Mar 27 21:51 power
lrwxrwxrwx 1 root gpio    0 Mar 27 21:51 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 uevent
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 value

์ด๊ฒƒ์€ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์ถ”์•…ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ซํžˆ์ง€ ๋ง์•˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  9 ๋Œ“๊ธ€

๋ฐฉ๊ธˆ ์œ„์˜ ๊ธ€์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” "echo 23 > /sys/class/gpio/unexport"๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ ์ทจ์†Œ๋Š” gpio๋ฅผ ๋‚ด๋ณด๋‚ด์ง€ ์•Š์€ ์ดˆ๊ธฐ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ป๋‹ค:

pi<strong i="6">@raspberrypi</strong>:~ $ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 Mar 27 17:41 export
lrwxrwxrwx 1 root root    0 Mar 27 17:41 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
--w------- 1 root root 4096 Mar 27 17:41 unexport
pi<strong i="7">@raspberrypi</strong>:~ $ echo 23 > /sys/class/gpio/unexport
-bash: /sys/class/gpio/unexport: Permission denied

๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ๋งŒ /sys/class/gpio/unexport์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ํŒŒ์ด๊ฐ€ ์ด๋ฅผ ์‹œ๋„ํ•˜๋ฉด ๊ถŒํ•œ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

"sudo su"๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋ฉด ๋ช…๋ น์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ด์ „ ๋ฒ„์ „์ด๋‚˜ Raspbian์—์„œ ์–ป์—ˆ๋˜ ๊ฒƒ์ด์ง€๋งŒ 2014-01-07-wheezy-raspbian์—์„œ๋Š” ๋‹ค์Œ ์„ ์–ป์Šต๋‹ˆ๋‹ค.

pi<strong i="7">@raspberrypi</strong> ~ $ ls -l /sys/class/gpio/
total 0
-rwxrwx--- 1 root gpio 4096 Mar 28 16:58 export
lrwxrwxrwx 1 root gpio    0 Jan  1  1970 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Mar 28 17:01 unexport
pi<strong i="8">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/export 
pi<strong i="9">@raspberrypi</strong> ~ $ 

๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฃน gpio์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” /sys/class/gpio/export์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉฐ pi๋Š” ๊ทธ๋ฃน gpio์˜ ๊ตฌ์„ฑ์›์ž…๋‹ˆ๋‹ค.

pi<strong i="13">@raspberrypi</strong> ~ $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users netdev input spi gpio

uname์€ ๋‹ค์Œ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

pi<strong i="17">@raspberrypi</strong> ~ $ uname -a
Linux raspberrypi 3.10.34+ #661 PREEMPT Thu Mar 27 00:36:02 GMT 2014 armv6l GNU/Linux

piface ์‚ฌ๋žŒ๋“ค์˜ ์ผ๋ถ€ udev ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. udev๊ฐ€ ์ƒ์„ฑ๋œ ์žฅ์น˜์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐœ์„ ํ•  ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; sleep 1; echo out > /sys/class/gpio/gpio23/direction

@asb ๋„ค , ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก onoff ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฅ์ ์€ onoff๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํผ์œ ์ € ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@popcornmix ์˜ˆ, ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

GPIO ๊ถŒํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์˜ ๊ฐ€์น˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๊ตฌํ˜„์€
์ปค๋„ GPIO ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์˜ ์˜๋ฏธ๊ฐ€ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. /sys/class/gpio/export์— ์“ฐ๊ธฐ
์“ฐ๊ธฐ๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ๋‹ค๊ณ  ๋ณด๊ณ ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ sysfs ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ •ํ™”๋  ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์†”๋ฃจ์…˜
์ •ํ™•ํ•œ ๋Œ€๊ธฐ ๊ธฐ๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์ด ๋งค์šฐ ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ „๋žต
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์˜ˆ: gpio๋กœ ์„ค์ •๋œ ๊ทธ๋ฃน)์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฐพ๋Š” ๊ฒƒ์€
์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ถŒํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ์œ ์—ฐ์„ฑ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ๊ฐ€ ์ ์ ˆํ•œ ๊ทธ๋ฃน์ด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋‹ค๊ณ  ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ปค๋„ GPIO ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ์˜๋ฏธ๋ก ์  ๋ณ€๊ฒฝ์€ ์ด์‹ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์žฅ์• ๋ฌผ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
Raspberry Pi์™€ ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด ํ”Œ๋žซํผ ๊ฐ„์—๋Š” ๋ฌผ๋ก  ๋‹ค๋ฅธ Linux ๊ฐ„์—๋„
Raspberry Pi์˜ ๋ฐฐํฌํŒ.

๋™์˜. ์ž‘๋™ํ•˜๋Š” sysfs ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์ปค๋„์˜ ์ฑ…์ž„์ด๋ฉฐ, Raspbian์˜ ๊ตฌํ˜„์€ ๋ถ„๋ช…ํžˆ ๋ชป์ƒ๊ธด ๋ฐฉ์‹์œผ๋กœ ๊นจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ซํžŒ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ถ”์•…ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ซํžˆ์ง€ ๋ง์•˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰