what is port rules? - dingdongdengdong/astra_ws GitHub Wiki
Udev๋ ๋ฌด์์ธ๊ฐ์?
Udev(์ ๋ฐ๋ธ)๋ ๋ฆฌ๋ ์ค ์ปค๋์ **์ฅ์น ๊ด๋ฆฌ์(device manager)**์ ๋๋ค. ์ฝ๊ฒ ๋งํด, ์ปดํจํฐ์ ์๋ก์ด ํ๋์จ์ด ์ฅ์น(USB, ์นด๋ฉ๋ผ, ์ธ์ฅํ๋ ๋ฑ)๋ฅผ ์ฐ๊ฒฐํ์ ๋, ๋ฆฌ๋ ์ค ์์คํ ์ด ์ด ์ฅ์น๋ฅผ ์ด๋ป๊ฒ ์ธ์ํ๊ณ ์ค์ ํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, USB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฝ์ผ๋ฉด ์๋์ผ๋ก ๋ง์ดํธ๋์ด ํ์ผ์ ์ฝ๊ณ ์ธ ์ ์๊ฒ ๋์ฃ ? ์ด๋ฐ ๊ณผ์ ๋ค์๋ udev
๊ฐ ์์ต๋๋ค. udev
๋ ์ฅ์น ์ฐ๊ฒฐ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ ์๋ **๊ท์น(rules)**์ ๋ฐ๋ผ ํด๋น ์ฅ์น์ ๋ํ ํน์ ์์
์ ์ํํฉ๋๋ค. ์ด๋ฌํ ์์
์๋ ์ฅ์น ํ์ผ ์์ฑ, ๊ถํ ์ค์ , ์ฌ๋ณผ๋ฆญ ๋งํฌ ์์ฑ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
Udev๋ ์ ์ค์ํ๊ฐ์?
Udev๋ ํนํ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ์ผ๊ด๋ ์ฅ์น ์ด๋ฆ ๋ถ์ฌ: USB ์ฅ์น๋ ์ฐ๊ฒฐ ์์๋ ์ฌ๋ถํ
์ฌ๋ถ์ ๋ฐ๋ผ
/dev/ttyUSB0
,/dev/video0
๊ณผ ๊ฐ์ ์ฅ์น ์ด๋ฆ์ด ๋ฐ๋ ์ ์์ต๋๋ค.udev
๋ ํน์ ์ฅ์น์ ํญ์ **๊ณ ์ ๋, ์์ธก ๊ฐ๋ฅํ ์ด๋ฆ(์ฌ๋ณผ๋ฆญ ๋งํฌ)**์ ๋ถ์ฌํ์ฌ ์ํํธ์จ์ด๊ฐ ์ฅ์น๋ฅผ ์์ ์ ์ผ๋ก ์ฐพ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๋ก๋ด์ฒ๋ผ ์ฌ๋ฌ ์ผ์์ ์ก์ถ์์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์์คํ ์์ ํนํ ์ค์ํฉ๋๋ค. - ๊ถํ ์ค์ : ์ฅ์น์ ๋ํ ์ ๊ทผ ๊ถํ์ ์๋์ผ๋ก ์ค์ ํ์ฌ, ํน์ ์ฌ์ฉ์๋ ๊ทธ๋ฃน๋ง ์ฅ์น๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์๋ํ๋ ๋์: ์ฅ์น ์ฐ๊ฒฐ ์ ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ฑฐ๋, ํน์ ์ค์ ์ ์๋์ผ๋ก ์ ์ฉํ๋ ๋ฑ ๋ค์ํ ์๋ํ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
Udev ๊ท์น ํ์ผ ์ดํดํ๊ธฐ (๋น์ ์ ์์๋ฅผ ์ค์ฌ์ผ๋ก)
udev
๊ท์น ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก /etc/udev/rules.d/
๋๋ ํ ๋ฆฌ์ .rules
ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ํ์ผ ์ด๋ฆ ์์ ๋ถ๋ ์ซ์๋ ๊ท์น์ ์ฐ์ ์์๋ฅผ ๋ํ๋
๋๋ค (๋ฎ์ ์ซ์๋ถํฐ ์ฒ๋ฆฌ).
๋น์ ์ด ์ ๊ณตํ port.rules
ํ์ผ์ Astra ๋ก๋ด์ ์ฌ๋ฌ ์ฅ์น์ ๋ํ udev
๊ท์น์ ์ ์ํ๊ณ ์์ต๋๋ค. ๊ฐ ๋ผ์ธ์ ํ๋์ ๊ท์น์ ๋ํ๋ด๋ฉฐ, KEY=="VALUE"
ํ์์ ๋งค์นญ ํค์ KEY:="VALUE"
ํ์์ ํ ๋น ํค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ฐ ๊ท์น์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
SUBSYSTEM=="tty", KERNELS=="1-6.1:1.0", ENV{ID_MM_DEVICE_IGNORE}="1", ATTR{device/latency_timer}="1", MODE:="0666", SYMLINK+="tty_puppet_lift_left"
SUBSYSTEM=="tty"
: ์ด ๊ท์น์ ์ง๋ ฌ ํต์ ์ฅ์น(serial communication device), ์ฆtty
์๋ธ์์คํ ์ ์ํ๋ ์ฅ์น์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ์ฃผ๋ก USB-์๋ฆฌ์ผ ๋ณํ๊ธฐ๋ ์๋ฒ ๋๋ ์ฅ์น์ ํต์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.KERNELS=="1-6.1:1.0"
: ์ด ๋ถ๋ถ์ ์ฅ์น์ **์ปค๋ ๋๋ฐ์ด์ค ๊ฒฝ๋ก(kernel device path)**๋ฅผ ๋งค์นญํฉ๋๋ค. ์ด๋ ์ฅ์น๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐ๋ USB ํฌํธ๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ณ ์ ํ ๊ฒฝ๋ก์ ๋๋ค.udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep KERNELS
๋ช ๋ น์ด๋ฅผ ํตํด ํน์ ์ฅ์น์KERNELS
๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.ENV{ID_MM_DEVICE_IGNORE}="1"
: ์ด ํ๊ฒฝ ๋ณ์๋ ModemManager๊ฐ ์ด ์ฅ์น๋ฅผ ๋ฌด์ํ๋๋ก ์ง์ํฉ๋๋ค. ModemManager๋ ๋ชจ๋ ์ฅ์น๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋๋ฐ, ๋ก๋ด์ ์ง๋ ฌ ํต์ ์ฅ์น๊ฐ ๋ชจ๋์ผ๋ก ์ค์ธ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.ATTR{device/latency_timer}="1"
: ์ฅ์น์latency_timer
์์ฑ์1
๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ฐ์ USB ์๋ฆฌ์ผ ํฌํธ์ ์ง์ฐ ์๊ฐ์ ์ค์ด๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ค์๊ฐ ํต์ ์ด ์ค์ํ ๋ก๋ด ์์คํ ์์ ์ ์ฉํ ์ ์์ต๋๋ค.MODE:="0666"
: ์ฅ์น ํ์ผ์ ๊ถํ์0666
์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๋ชจ๋ ์ฌ์ฉ์(์์ ์, ๊ทธ๋ฃน, ๊ธฐํ)๊ฐ ํด๋น ์ฅ์น ํ์ผ์ ์ฝ๊ณ ์ธ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ๋ก๋ด ์ํํธ์จ์ด(์ผ๋ฐ ์ฌ์ฉ์ ๊ณ์ ์์ ์คํ๋ ์ ์์)๊ฐ ์ฅ์น์ ์ ๊ทผํ๊ธฐ ์ํด ํ์ํฉ๋๋ค.SYMLINK+="tty_puppet_lift_left"
: ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ๋๋ค. ์ด ๊ท์น์ด ๋งค์นญ๋๋ฉด,/dev/
๋๋ ํ ๋ฆฌ์tty_puppet_lift_left
๋ผ๋ ์ด๋ฆ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ์ค์ ์ฅ์น ํ์ผ(์:/dev/ttyUSB0
)์ ๊ฐ๋ฆฌํค๋ฏ๋ก, ์ํํธ์จ์ด๋ ํญ์tty_puppet_lift_left
๋ผ๋ ๊ณ ์ ๋ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ฅ์น์ ํต์ ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ผ์ธ๋ค๋ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค:
SUBSYSTEM=="video4linux"
: ์ด ๊ท์น์ ์นด๋ฉ๋ผ๋ ๋น๋์ค ์บก์ฒ ์ฅ์น(video4linux
์๋ธ์์คํ )์ ์ ์ฉ๋ฉ๋๋ค.ATTR{index}=="0"
: ๋น๋์ค ์ฅ์น์ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๋น๋์ค ์คํธ๋ฆผ์ด ์์ ์ ์์ต๋๋ค.index="0"
์ ๊ธฐ๋ณธ ๋น๋์ค ์คํธ๋ฆผ์ ์๋ฏธํฉ๋๋ค.SYMLINK
๋ฅผ ํตํดtty_puppet_left
,video_wrist_left
,tty_head
,tty_puppet_lift_right
,tty_puppet_right
,video_wrist_right
,video_head
์ ๊ฐ์ ์์ธก ๊ฐ๋ฅํ ์ด๋ฆ์ ๋ถ์ฌํฉ๋๋ค.
Udev ๊ท์น ์ ์ฉ ๋ฐฉ๋ฒ
๋น์ ์ ํ์ผ ์์ ์๋จ์ ์ฃผ์์ผ๋ก ์ ์ค๋ช ๋์ด ์์ต๋๋ค:
-
๊ท์น ํ์ผ ๋ณต์ฌ:
sudo cp 99-astra-fixed-port.rules /etc/udev/rules.d/
(์ด๋ฆ์ ํ์ผ ๋ด์ฉ์ ๋ฐ๋ผport.rules
๊ฐ ๋ ์๋ ์๊ณ ,99-astra-fixed-port.rules
๊ฐ ๋ ์๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก99-
์ฒ๋ผ ์ซ์๋ฅผ ๋ถ์ฌ ์ฐ์ ์์๋ฅผ ์ง์ ํ๊ณ ,-.rules
ํ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.) -
Udev ๊ท์น ์ฌ๋ก๋:
sudo udevadm control --reload
์๋ก์ด ๊ท์น์udev
์์คํ ์ ๋ก๋ํฉ๋๋ค. -
Udev ํธ๋ฆฌ๊ฑฐ:
sudo udevadm trigger
ํ์ฌ ์ฐ๊ฒฐ๋ ์ฅ์น์ ๋ํดudev
๊ท์น์ ๋ค์ ์ ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฅ์น๋ฅผ ๋ฝ์๋ค๊ฐ ๋ค์ ๊ฝ์ง ์์๋ ๋ณ๊ฒฝ๋ ๊ท์น์ด ๋ฐ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ถ๊ฐ ์ ๋ณด ๋ฐ ํ
- ์ฅ์น ์ ๋ณด ํ์ธ:
udevadm info --name=/dev/์ฅ์น๋ช --attribute-walk
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ฅ์น์ ๋ชจ๋ ์์ฑ๊ณผ ์ปค๋ ๊ฒฝ๋ก ๋ฑ์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์๋ก์ดudev
๊ท์น์ ์์ฑํ ๋ ์ฅ์น๋ฅผ ์ ํํ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. - ๊ท์น ํ
์คํธ:
udevadm test /sys/class/tty/ttyUSB0
(๋๋ ํด๋น ์ฅ์น์ sysfs ๊ฒฝ๋ก)์ ๊ฐ์ดudevadm test
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ๊ท์น์ด ์ด๋ป๊ฒ ์ ์ฉ๋ ์ง ๋ฏธ๋ฆฌ ํ ์คํธํด๋ณผ ์ ์์ต๋๋ค.
udev
๋ ๋ฆฌ๋
์ค ์์คํ
์์ ํ๋์จ์ด ์ฅ์น๋ฅผ ํจ์จ์ ์ด๊ณ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ํนํ ๋ก๋ด๊ณผ ๊ฐ์ ์๋ฒ ๋๋ ์์คํ
๊ฐ๋ฐ์์๋ ์ด๋ฌํ ์ฅ์น ๊ด๋ฆฌ์ ์์ ์ฑ์ด ์์คํ
์ ์ฒด์ ์ ๋ขฐ์ฑ์ ์ข์ฐํ๊ธฐ ๋๋ฌธ์, udev
๊ท์น์ ์ดํดํ๊ณ ํ์ฉํ๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.