저는 Raspberry Pi에서 USB 네트워크 인터페이스(USB를 통한 이더넷)를 사용하고 있습니다. 목표는 기본적으로 Raspberry Pi에서 제공하는 4개의 USB 포트를 사용하여 TFTP U-boot를 통해 여러 Linux 시스템을 동시에 플래시하는 것입니다.
이제 각각 IP 주소가 있는 4개의 USB 인터페이스가 정의되었습니다. 이미 tftp
서버를 설정했어요 . 잘 작동하지만 여러 Linux 시스템을 동시에 연결하려고 하면 DHCP가 인터페이스를 혼합하는 것 같습니다(예: 오래된 것이 usb0
새로운 것이 되고 usb1
, 오래된 것이 usb1
새로운 것이 됩니다 usb0
). 이것이 임대에 혼란을 야기한다고 생각합니다. TFTP Exchange가 소프트 락업에 걸린 것 같습니다.
글쎄요, 그런 일은 일어날 수 없습니다. 따라서 저는 연결된 USB 포트에 따라 장치에 고정된 이름을 부여하기 위해 4개의 udev 규칙을 설정했습니다. 다음과 같이:
SUBSYSTEM=="usb", ACTION=="add", DEVPATH=="*.2", NAME="usb0"
(저는 다음을 udevadm info
사용하여 이 값을 얻었습니다.
당연히 네트워크 인터페이스의 이름이 되므로 장치 이름을 바꿔야 합니다. 따라서 이 경우 심볼릭 링크는 아무 소용이 없습니다(내가 모르는 것이 없는 한).
그러나 systemd-udevd
장치 이름을 바꾸는 것은 허용되지 않습니다.
Feb 28 17:25:01 pi systemd-udevd[3749]: NAME="usb2"는 무시됩니다. 커널 장치 노드의 이름을 바꿀 수 없습니다. /lib/udev/rules.d/99-systemd.rules:49에서 수정하십시오.
버전 15.04 이전에도 이것이 가능했다는 것을 온라인에서 읽었으므로 이 이전 동작을 복원할 수 있는 방법이 있어야 한다고 생각합니다.
어떤 조언이라도 대단히 감사하겠습니다.
답변1
명확히 해야 할 몇 가지 사항이 있습니다.
장치에는 트리 계층 구조가 있습니다. USB 이더넷 어댑터가 다음과 같이 나타납니다.많은 종류의서로 다른 하위 시스템의 "장치"는 서로 다른 계층을 나타냅니다.
- subsystem
usb
, devtypeusb_device
– 포트에 연결된 USB 장치; - subsystem
usb
, devtypeusb_interface
– USB 장치가 제공하는 특정 기능(“인터페이스”라는 용어는 네트워킹과 다른 의미를 가집니다!) - 하위 시스템
net
– 실제 네트워크 인터페이스(이번에는 일반 네트워크 의미)입니다.
(네트워크 장치는 usb_interface의 하위이며, 그 자체는 usb_device의 하위입니다.)
- subsystem
모든 장치에 네트워크 인터페이스와 같은 "장치 노드"가 있는 것은 아닙니다.원하지 않는다나타나다
/dev
.(불행한 일이지만 그렇지 않습니다.)네트워크 인터페이스만 이름을 바꿀 수 있습니다. 다른 장치는 불가능합니다. 이 정책은 Linux가 장치 노드를 생성하는 udev에서 장치 노드를 생성하는 커널 자체로 전환했을 때 더욱 제한적이 되었습니다. (예, 기술적으로는
mv /dev/foo /dev/bar
여전히 유효하지만정책udev는 커널이 내보낸 내용을 망치지 않습니다. )
따라서 포인트 1이 중요합니다. 전체 게시물은 네트워크 인터페이스(subsystems에 속함 net
)에 대해 이야기하지만 udev 규칙은 하위 시스템과 일치 usb
하므로 /sys에서 일부 추상 USB 장치의 이름을 바꾸려고 합니다.
규칙에 가 구체적으로 있어야 합니다 SUBSYSTEM=="net"
. 상위 장치를 추가로 일치시키려면 다음을 사용할 수 있습니다("S" 참고).SUBSYSTEMS=="usb"