Linux Port Setup#

What you’ll do

  • Ubuntu에서 USB-Serial 장치를 /dev/ttyKMC로 고정하고, 권한 문제를 줄입니다.

Prerequisites

  • Ubuntu 20.04, sudo 권한

  • 차량 보드(USB-Serial)가 연결되어 있고 lsusb가 동작해야 합니다.

Next

Ubuntu에서 하드웨어 보드를 꽂았을 때 항상 같은 장치 경로로 접근할 수 있도록, udev 규칙을 추가해 /dev/ttyKMC 같은 고정 심볼릭 링크를 만드는 방법입니다.


1. 준비#

  • Ubuntu 20.04

  • USB-Serial 장치가 연결되어 있고, idVendor, idProduct 값을 확인할 수 있어야 함

  • 아래 예시는 idVendor=0403, idProduct=6014 (FTDI 계열에서 흔함)

내 장치 VID/PID 확인#

장치를 꽂고 아래 실행:

lsusb

출력 예시에서 ID 0403:6014 같이 보이는 게 VID:PID 입니다.

  • 0403idVendor

  • 6014idProduct

Bus 002 Device 002: ID 2109:0822 VIA Labs, Inc. USB3.1 Hub             
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0029 Intel Corp. 
Bus 001 Device 063: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
Bus 001 Device 002: ID 2109:2822 VIA Labs, Inc. USB2.0 Hub             
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2. udev 규칙이 하는 일#

이 규칙은 다음을 설정합니다.

  • USB-Serial 장치를 인식하면 /dev/ttyKMC 라는 심볼릭 링크 생성

  • 권한을 0660 + dialout 그룹으로 설정해 접근 권한 문제를 줄임

규칙 파일 경로:

  • /etc/udev/rules.d/99-usb-serial-kmc.rules


3. 자동 설정 스크립트 실행#

아래 스크립트를 파일로 저장한 뒤 실행하세요.

(1) 스크립트 저장#

예: setup_kmc_udev.sh로 저장

#!/usr/bin/env bash
set -e

RULE_FILE="/etc/udev/rules.d/99-usb-serial-kmc.rules"
SYMLINK_NAME="ttyKMC"
ID_VENDOR="0403"
ID_PRODUCT="6014"
MODE="0660"
GROUP="dialout"

RULE_LINE="SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"${ID_VENDOR}\", ATTRS{idProduct}==\"${ID_PRODUCT}\", SYMLINK+=\"${SYMLINK_NAME}\", MODE=\"${MODE}\", GROUP=\"${GROUP}\""

echo "=== USB 시리얼 udev 규칙 설정 스크립트 ==="
echo "장치: idVendor=${ID_VENDOR}, idProduct=${ID_PRODUCT}"
echo "심볼릭 링크: /dev/${SYMLINK_NAME}"
echo "권한: ${MODE} (GROUP: ${GROUP})"
echo

echo "[1/3] udev 규칙 파일 생성: ${RULE_FILE}"
echo "${RULE_LINE}"
echo "${RULE_LINE}" | sudo tee "${RULE_FILE}" > /dev/null

echo "[2/3] udev 규칙 리로드 및 트리거"
sudo udevadm control --reload-rules
sudo udevadm trigger

echo "[3/3] 사용자 dialout 그룹 추가"
sudo usermod -aG dialout "${USER}"

echo
echo "완료!"
echo "- 이제 USB 시리얼 장치를 한 번 뺐다가 다시 꽂으세요."
echo "- /dev/${SYMLINK_NAME} 가 생기는지 확인:"
echo "    ls -l /dev/${SYMLINK_NAME}"
echo "- 그룹 변경은 로그아웃 후 다시 로그인해야 적용됩니다."
echo "  (다시 로그인 후 'groups' 쳐서 dialout 포함됐는지 확인)"

(2) 실행 권한 부여 + 실행#

sudo chmod +x setup_kmc_udev.sh
./setup_kmc_udev.sh

4. 적용 확인#

(1) 장치 재연결#

USB 장치를 한 번 뺐다가 다시 꽂습니다.

(2) /dev/ttyKMC 생성 확인#

ls -l /dev/ttyKMC

정상이라면 /dev/ttyKMC -> /dev/ttyUSB0 같은 형태의 링크가 보입니다.

ubuntu:~$ ls -l /dev/ttyKMC
lrwxrwxrwx 1 root root 7 Jan  2 17:08 /dev/ttyKMC -> ttyUSB0

5. 자주 생기는 문제#

Q1. /dev/ttyKMC가 안 생겨요#

  1. VID/PID가 다를 수 있음 → lsusb로 확인 후 스크립트의 ID_VENDOR, ID_PRODUCT 수정

  2. 규칙이 적용됐는지 확인:

cat /etc/udev/rules.d/99-usb-serial-kmc.rules
  1. udev 재로드:

sudo udevadm control --reload-rules
sudo udevadm trigger

Q2. 권한 때문에 열 수 없어요 (Permission denied)#

로그아웃/로그인 후 dialout 그룹 적용이 되었는지 확인:

groups

출력에 dialout이 있어야 합니다.