라즈파이에 USB 접속한 동일 디바이스를 판별할 수 있게 한다【그 1-시리얼】

이번에는 라스베리 파이에 USB로 연결된 장치를 판별하기 쉽습니다.
통상이라고 접속해도 ttyUSB* 와 같은 표시 밖에 나오지 않지만, 임의의 명칭으로 표시할 수 있도록 합니다.
ttyUSB0 → SerialCable1과 같이 dev 디렉토리의 표시 이름을 변경할 수 있습니다.
작업으로서는 udev 용의 새로운 룰 파일을 작성합니다. udev에 대한 자세한 내용은 여기
작업환경
· Raspberry Pi 3B
· Raspberry Pi OS Lite Legacy (buster)
・FT232RL × 2대(동일 디바이스)
라즈베리 파이의 기본 설정이 완료되었다고 가정합니다.

[순서 1]USB를 접속했을 때의 변화를 확인한다


먼저 연결되지 않은 상태에서 dev 디렉토리를 살펴 보겠습니다.
ls /dev
FT232RL 미접속시는 다음 상태입니다.

그런 다음 첫 번째 FT232RL을 연결합니다. ttyUSB0이 보였습니다.

이어서 두 번째 FT232RL을 연결합니다. ttyUSB1이 추가되었습니다.

따라서 장치를 연결하면 dev 디렉토리에 장치 파일이 추가됩니다.

[2단계] 연결 장치의 고유 정보 확인


서두에 서술하고 있지만 임의의 명칭을 설정하기 위해서는 udev용의 룰 파일이 필요합니다.
규칙 파일에서 장치를 식별하는 고유한 키 정보를 작성해야 하므로 먼저 장치 정보를 확인합니다.
udevadm info -q all -n /dev/ttyUSB0
위 명령은 다음과 같은 장치 정보를 표시합니다. (예: Sandisk USB 플래시 메모리)
pi@raspberrypi:~$ udevadm info -q all -n /dev/sda
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda
N: sda
L: 0
S: disk/by-path/platform-3f980000.usb-usb-0:1.2:1.0-scsi-0:0:0:0
S: disk/by-id/usb-SanDisk_Ultra_Fit_4C530000021118120214-0:0
S: disk/by-uuid/e1d2d53c-ba70-402f-820c-27162be4a94c
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda
E: DEVNAME=/dev/sda
E: DEVTYPE=disk
E: MAJOR=8
E: MINOR=0
E: SUBSYSTEM=block
E: USEC_INITIALIZED=610442091
E: ID_VENDOR=SanDisk
E: ID_VENDOR_ENC=SanDisk\x20
E: ID_VENDOR_ID=0781
E: ID_MODEL=Ultra_Fit
E: ID_MODEL_ENC=Ultra\x20Fit\x20\x20\x20\x20\x20\x20\x20
E: ID_MODEL_ID=5583
E: ID_REVISION=1.00
E: ID_SERIAL=SanDisk_Ultra_Fit_4C530000021118120214-0:0
E: ID_SERIAL_SHORT=4C530000021118120214
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0-scsi-0_0_0_0
E: ID_FS_UUID=e1d2d53c-ba70-402f-820c-27162be4a94c
E: ID_FS_UUID_ENC=e1d2d53c-ba70-402f-820c-27162be4a94c
E: ID_FS_VERSION=1.0
E: ID_FS_TYPE=ext4
E: ID_FS_USAGE=filesystem
E: DEVLINKS=/dev/disk/by-path/platform-3f980000.usb-usb-0:1.2:1.0-scsi-0:0:0:0 /dev/disk/by-id/usb-SanDisk_Ultra_Fit_4C530000021118120214-0:0 /dev/disk/by-uuid/e1d2d53c-ba70-402f-820c-27162be4a94c
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

pi@raspberrypi:~$

[3단계] 연결 시 규칙 만들기


즉시 udev에 대한 규칙 파일을 만듭니다.
이번에는 SUBSYSTEM , ID_SERIAL_SHORT 의 2 개를 키로서 사용합니다.
작성한 규칙 파일은/etc/udev/rules.d에 저장됩니다.
다음 명령을 실행하여 rules 파일을 만듭니다.
sudo nano /etc/udev/rules.d/99-usb-serial.rules
이번에는 이미 있는 파일명과 쓰지 않도록 99-로 작성했습니다.
규칙 파일은 파일 이름의 사전순으로 실행됩니다.
아래와 같이 99-usb-serial.rules 에 기술해 보존합니다.
SYMLINK에 임의의 이름을 작성하십시오.
MODE는 권한 설정입니다. MODE에 대한 자세한 내용은 여기
SUBSYSTEM=="tty",ENV{ID_SERIAL_SHORT}=="先ほど調べた[ID_SERIAL_SHORT]の値",SYMLINK+="USB-test1",MODE="0666"

[4단계] 규칙이 적용되었는지 확인


다음 명령을 사용하여 udev가 규칙 파일을 다시 읽도록 합니다.
sudo udevadm trigger
または
sudo /etc/init.d/udev reload
다시 읽은 후 장치 파일 이름이 SYMLINK에 지정된 값입니다.
그렇지 않으면 라즈베리 파이를 다시 시작해보십시오.

마찬가지로 다른 장치 규칙도 설정합니다. 99-usb-serial.rules에 추가할 수 있습니다.
추가 후 다시 읽으면 다음과 같이 반영됩니다.

이렇게 각 장치 파일의 이름을 지정할 수 있습니다.
작업 중인 기기를 한눈에 알 수 있습니다.

[정리]


· udev 규칙을 작성하면 작업중인 장치를 쉽게 판별 할 수 있습니다.
・이번은 키에 시리얼 번호(ID_SERIAL_SHORT)를 사용했습니다만, 작업 환경에 의해서 사용하는 키를 바꾸면 보다 편리함이 좋아집니다.
예를 들어 ID_PATH_TAG를 키로 사용하면 USB 포트에서 지정하여 장치를 식별할 수 있습니다. ( 그 2 에서 소개)
・그 외에도, 특정의 디바이스를 접속했을 때에 스크립트를 실행하는 등의 다양한 룰 설정이 가능합니다.

좋은 웹페이지 즐겨찾기