리눅스를 사용하다 보면 외장 하드 드라이브, USB 카메라, 시리얼 포트 등 다양한 장치를 연결하게 됩니다. 이때, 리눅스는 각 장치에 `/dev/sda`, `/dev/ttyUSB0`와 같은 동적인 이름을 할당합니다. 이는 장치를 연결하는 순서나 시스템의 상태에 따라 변경될 수 있습니다. 즉, 오늘 `/dev/sda`로 인식된 외장 하드 드라이브가 내일은 `/dev/sdb`가 될 수도 있다는 의미입니다. 이러한 동적인 이름 할당은 스크립트, 설정 파일, 자동화된 작업 등에 문제를 일으킬 수 있습니다. udev 규칙을 사용하면 이러한 문제를 해결하고 장치에 일관된 이름을 부여할 수 있습니다.

udev란 무엇일까요?

udev는 사용자 공간에서 실행되는 Linux 커널 장치 관리자입니다. udev는 시스템에 연결된 장치를 감지하고, 장치에 대한 정보를 수집하여 규칙에 따라 장치 노드를 생성하고 관리합니다. udev는 장치 연결, 제거, 속성 변경 등의 이벤트에 반응하여 시스템의 장치 관리를 자동화합니다.

왜 udev 규칙을 사용해야 할까요?

udev 규칙의 기본 구조

udev 규칙은 `/etc/udev/rules.d/` 디렉토리에 `.rules` 확장자를 가진 텍스트 파일로 저장됩니다. 각 규칙은 다음과 같은 형식을 가집니다.

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", SYMLINK+="my_usb_camera"

각 규칙은 쉼표로 구분된 여러 개의 키-값 쌍으로 구성됩니다. 각 키-값 쌍은 특정 조건이나 작업을 나타냅니다. 위의 예시를 자세히 살펴보겠습니다.

udev 규칙은 위에서 아래로 순서대로 평가됩니다. 먼저 만족하는 규칙이 발견되면 해당 규칙의 작업이 수행됩니다. 여러 규칙이 만족될 경우, 모든 규칙의 작업이 수행됩니다.

udev 규칙 작성 방법

udev 규칙을 작성하기 전에, 먼저 장치의 속성을 파악해야 합니다. 이를 위해 `udevadm` 명령어를 사용할 수 있습니다.

1. 장치 정보 확인하기

먼저 장치를 시스템에 연결합니다. 그 다음, 다음 명령어를 실행하여 장치의 정보를 확인합니다.

udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/sda1)

`/dev/sda1`은 예시이며, 실제 장치 노드 이름으로 바꿔야 합니다. 이 명령어는 장치와 관련된 모든 속성을 계층적으로 보여줍니다. Vendor ID, Product ID, 시리얼 번호 등 필요한 정보를 찾을 수 있습니다.

2. 규칙 파일 생성하기

`/etc/udev/rules.d/` 디렉토리에 새로운 규칙 파일을 생성합니다. 파일 이름은 숫자로 시작하고 `.rules` 확장자로 끝나야 합니다 (예: `99-my-usb-device.rules`).

3. 규칙 작성하기

텍스트 편집기를 사용하여 규칙 파일을 엽니다. 앞에서 확인한 장치 속성을 기반으로 규칙을 작성합니다. 예를 들어, 특정 시리얼 번호를 가진 USB-to-Serial 어댑터에 대해 고정된 이름을 할당하려면 다음과 같은 규칙을 작성할 수 있습니다.

ACTION=="add", SUBSYSTEM=="tty", ATTRS{serial}=="MY_SERIAL_NUMBER", SYMLINK+="my_serial_port"

여기서 `MY_SERIAL_NUMBER`는 실제 시리얼 번호로 바꿔야 합니다. 이 규칙은 시스템에 연결된 시리얼 포트 중 시리얼 번호가 `MY_SERIAL_NUMBER`와 일치하는 장치에 대해 `my_serial_port`라는 심볼릭 링크를 생성합니다.

4. 규칙 적용하기

규칙 파일을 저장한 후, 다음 명령어를 실행하여 udev 규칙을 다시 로드합니다.

sudo udevadm control --reload

다음으로, 다음 명령어를 실행하여 새로운 규칙을 적용합니다.

sudo udevadm trigger

이제 장치를 분리했다가 다시 연결하면, udev 규칙에 따라 지정된 이름으로 장치가 인식되는 것을 확인할 수 있습니다.

자주 사용되는 udev 규칙 키

udev 규칙에는 다양한 키를 사용할 수 있습니다. 다음은 자주 사용되는 키들의 목록입니다.

실제 활용 예시

1. USB 카메라 이름 고정하기

여러 대의 USB 카메라를 사용하는 경우, 각 카메라에 고정된 이름을 할당하는 것이 유용합니다. 다음은 USB 카메라에 고정된 이름을 할당하는 udev 규칙의 예시입니다.

ACTION=="add", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0825", SYMLINK+="camera_1"

ACTION==”add”, SUBSYSTEM==”video4linux”, ATTRS{idVendor}==”046d”, ATTRS{idProduct}==”0828″, SYMLINK+=”camera_2″

이 규칙은 Vendor ID와 Product ID를 기반으로 각 카메라에 `camera_1`과 `camera_2`라는 이름을 할당합니다.

2. 외장 하드 드라이브 이름 고정하기

외장 하드 드라이브를 자주 연결하고 분리하는 경우, 각 드라이브에 고정된 이름을 할당하는 것이 편리합니다. 다음은 UUID를 기반으로 외장 하드 드라이브에 고정된 이름을 할당하는 udev 규칙의 예시입니다.

ACTION=="add", KERNEL=="sd", ENV{ID_FS_UUID}=="YOUR_UUID", SYMLINK+="my_external_drive"

여기서 `YOUR_UUID`는 실제 드라이브의 UUID로 바꿔야 합니다. UUID는 `blkid` 명령어를 사용하여 확인할 수 있습니다.

3. 시리얼 포트 이름 고정하기

시리얼 통신을 사용하는 장치를 연결하는 경우, 각 장치에 고정된 이름을 할당하는 것이 필요합니다. 다음은 시리얼 번호를 기반으로 시리얼 포트에 고정된 이름을 할당하는 udev 규칙의 예시입니다.

ACTION=="add", KERNEL=="ttyUSB", ATTRS{serial}=="YOUR_SERIAL_NUMBER", SYMLINK+="my_serial_device"

여기서 `YOUR_SERIAL_NUMBER`는 실제 시리얼 번호로 바꿔야 합니다.

주의사항 및 문제 해결

udev 규칙 작성 시 유용한 팁

udev 규칙을 사용하면 장치 관리를 더욱 효율적으로 수행하고, 시스템의 안정성을 향상시킬 수 있습니다. 이 가이드라인이 udev 규칙을 이해하고 사용하는 데 도움이 되었기를 바랍니다.

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다