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 ๊ทœ์น™ ์ ์šฉ ๋ฐฉ๋ฒ•

๋‹น์‹ ์˜ ํŒŒ์ผ ์˜ˆ์‹œ ์ƒ๋‹จ์— ์ฃผ์„์œผ๋กœ ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๊ทœ์น™ ํŒŒ์ผ ๋ณต์‚ฌ: sudo cp 99-astra-fixed-port.rules /etc/udev/rules.d/ (์ด๋ฆ„์€ ํŒŒ์ผ ๋‚ด์šฉ์— ๋”ฐ๋ผ port.rules๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ , 99-astra-fixed-port.rules๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 99-์ฒ˜๋Ÿผ ์ˆซ์ž๋ฅผ ๋ถ™์—ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๊ณ , -.rules ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.)

  2. Udev ๊ทœ์น™ ์žฌ๋กœ๋“œ: sudo udevadm control --reload ์ƒˆ๋กœ์šด ๊ทœ์น™์„ udev ์‹œ์Šคํ…œ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  3. Udev ํŠธ๋ฆฌ๊ฑฐ: sudo udevadm trigger ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ์žฅ์น˜์— ๋Œ€ํ•ด udev ๊ทœ์น™์„ ๋‹ค์‹œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์žฅ์น˜๋ฅผ ๋ฝ‘์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ๊ฝ‚์ง€ ์•Š์•„๋„ ๋ณ€๊ฒฝ๋œ ๊ทœ์น™์ด ๋ฐ”๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


์ถ”๊ฐ€ ์ •๋ณด ๋ฐ ํŒ

  • ์žฅ์น˜ ์ •๋ณด ํ™•์ธ: udevadm info --name=/dev/์žฅ์น˜๋ช… --attribute-walk ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์žฅ์น˜์˜ ๋ชจ๋“  ์†์„ฑ๊ณผ ์ปค๋„ ๊ฒฝ๋กœ ๋“ฑ์„ ์ž์„ธํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด udev ๊ทœ์น™์„ ์ž‘์„ฑํ•  ๋•Œ ์žฅ์น˜๋ฅผ ์ •ํ™•ํžˆ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทœ์น™ ํ…Œ์ŠคํŠธ: udevadm test /sys/class/tty/ttyUSB0 (๋˜๋Š” ํ•ด๋‹น ์žฅ์น˜์˜ sysfs ๊ฒฝ๋กœ)์™€ ๊ฐ™์ด udevadm test ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ๊ทœ์น™์ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋ ์ง€ ๋ฏธ๋ฆฌ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

udev๋Š” ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๋ฅผ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋กœ๋ด‡๊ณผ ๊ฐ™์€ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์žฅ์น˜ ๊ด€๋ฆฌ์˜ ์•ˆ์ •์„ฑ์ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์‹ ๋ขฐ์„ฑ์„ ์ขŒ์šฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, udev ๊ทœ์น™์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.