유사한 USB 네트워크 장치가 여러 개 있습니다. 이 경우에는 CAN(can0 및 can1)이 서로 다른 네트워크에 연결되어 있지만 이는 다른 여러 네트워크(예: WiFi, 이더넷 등)에서도 비슷한 문제인 것 같습니다. 현재 can0과 can1로 표시되어 있는데, 더 연결할 수도 있습니다.
각 위치에 액세스하는 일종의 지속성을 유지하려고 노력하고 있습니다. udev를 사용하는 비네트워크 장치의 경우 올바른 코드가 올바른 장치에 액세스할 수 있도록 idVendor, idProduct 및 일련 번호에 대한 사용자 정의 심볼릭 링크 참조를 허용합니다.
ifconfig에서 장치에 대해 유사한 지속성을 달성하려면 어떻게 해야 합니까? 참고용으로 각 ID와 시퀀스 세부정보가 있습니다.
나는 장치 x가 항상 can0이고 장치 y가 항상 can1이 되는 것을 원하지 않습니다. 장치는 하나만 있을 수 있으므로 can0이 되어야 할 것 같습니다. 그러나 다르게 연결되었거나 다른 순서로 부팅된 경우 can0이 장치 x 또는 y인지 확인하고 올바른 코드를 실행하거나 그렇지 않은 경우 대체 코드를 실행하고 싶습니다.
나는 이것이 udev 논리보다 더 나은 접근 방식이라고 생각하지만 어떻게 해야 할지 알 수 없는 것 같습니다.
이것에 대한 몇 가지 조언을 원합니다. 티아
답변1
udev를 사용하여 이 작업을 수행할 수 있습니다.
# /etc/udev/rules.d/99-usb-can.rules
ACTION=="add", SUBSYSTEM=="net", ENV{ID_VENDOR_ID}=="...", ENV{ID_PRODUCT_ID}=="...", ATTR{...}=="...", NAME="myCustomCan", RUN+="/path/to/script.sh myCustomCan"
CAN 장치를 식별하는 데 필요한만큼 ENV/ATTR을 사용하십시오. ENV 변수는 ATTR보다 안정적이므로 선호됩니다.
# /path/to/script.sh
INTERFACE=$1
sudo ip link set $INTERFACE type can bitrate 500000
sudo ip link set $INTERFACE up
유용한 명령:
sudo udevadm info /sys/class/net/can0
- ENV 변수 및 값 목록을 가져옵니다.
sudo udevadm info -a /sys/class/net/can0
- ATTR/ATTRS 변수 및 값 목록을 가져옵니다.
sudo udevadm control --reload-rules && sudo udevadm trigger
- udev 규칙을 다시 로드합니다.
sudo udevadm control --log-priority=debug
- udev 로그 출력을 디버그 모드로 설정합니다.
tail -f /var/log/syslog | grep -A 1 --color 'can0|myCustomCan'
- 인터페이스가 올바르게 감지되었는지 확인하려면 udev의 출력을 가져옵니다. 일부 출력을 보려면 장치를 다시 연결해야 합니다.
ip -details link show myCustomCan
- 구성(예: 비트 전송률)도 표시됩니다.
Ubuntu 20.04에서 이러한 명령을 사용했습니다. 다른 배포판에서는 다를 수 있습니다.