一致/持久的网络连接命名,如 udev

一致/持久的网络连接命名,如 udev

我有多个类似的 USB 网络设备,在这种情况下 CAN(can0 和 can1)连接到不同的网络,但我认为这与多个其他网络(例如 WiFi、以太网等)有类似的问题。这些当前显示为 can0 和 can1,我可能会连接更多。

我试图在访问每个位置的位置保持某种持久性。对于使用 udev 的非网络设备,允许将自定义符号链接引用到 idVendor、idProduct 和序列号,以便我可以确保正确的代码访问正确的设备。

ifconfig 下的设备如何实现类似的持久性?我有每个 ID 和序列详细信息可供参考

我不希望设备 x 始终为 can0 而设备 y 始终为 can1。因为可能只有一个设备,我认为需要是 can0。但是,如果它们以不同的方式插入或以不同的顺序启动,那么我想检查 can0 是设备 x 或 y 并运行正确的代码,或者如果不运行替代代码。

我认为这是比 udev 逻辑更好的方法,但似乎无法找出方法

希望对此有所指点。 TIA

答案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"

根据需要使用尽可能多的 ENV/ATTR 来识别您的 CAN 设备。 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 上使用了这些命令。它们在其他发行版上可能有所不同。

相关内容