Udev binding for device like can0, ttyUSB0 to prevent device number swapping.

How-to

For platform unique device like mttcan on Jetson Orin Nano

meta@meta-desktop:/etc/udev/rules.d$ sudo udevadm info /sys/class/net/can0
P: /devices/platform/bus@0/c310000.mttcan/net/can0
L: 0
E: DEVPATH=/devices/platform/bus@0/c310000.mttcan/net/can0
E: INTERFACE=can0
E: IFINDEX=2
E: SUBSYSTEM=net
E: USEC_INITIALIZED=10728608
E: ID_MM_CANDIDATE=1
E: ID_PATH=platform-c310000.mttcan
E: ID_PATH_TAG=platform-c310000_mttcan
E: ID_NET_DRIVER=mttcan
E: ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link
E: ID_NET_NAME=can0
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/can0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

So the core idea is, find what’s unique and immutable for this device, and then set its name
Here the mttcan’s DEVPATH is unique and immutable, so we can use this as a handle to change its name.
Modify /etc/udev/rules.d/01-nvcan.rules

DEVPATH=="/devices/platform/bus@0/c310000.mttcan/net/*", NAME="can_mttcan"

And then reload it by reboot, since it is a platform probed device, not something like usb ch340 device which can take effect immediately.
After reboot we can see by running ip addr, can0 is now renamed to can_mttcan

meta@meta-desktop:/etc/udev/rules.d$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: can_mttcan: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
    link/can 
3: enP8p1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 48:b0:2d:d8:c9:5e brd ff:ff:ff:ff:ff:ff
5: l4tbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3e:c7:e7:79:f3:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.55.1/24 brd 192.168.55.255 scope global l4tbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::1/128 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::3cc7:e7ff:fe79:f387/64 scope link 
       valid_lft forever preferred_lft forever
6: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master l4tbr0 state UP group default qlen 1000
    link/ether 86:1b:04:83:56:29 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::841b:4ff:fe83:5629/64 scope link 
       valid_lft forever preferred_lft forever
7: usb1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master l4tbr0 state UP group default qlen 1000
    link/ether 86:1b:04:83:56:2b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::841b:4ff:fe83:562b/64 scope link 
       valid_lft forever preferred_lft forever
8: enxba144d3cc73b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ba:14:4d:3c:c7:3b brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.6/28 brd 172.20.10.15 scope global dynamic noprefixroute enxba144d3cc73b
       valid_lft 85907sec preferred_lft 85907sec
    inet6 2409:8929:d29:93ae:bf1b:9b91:aab4:9339/64 scope global temporary dynamic 
       valid_lft 602677sec preferred_lft 83862sec
    inet6 2409:8929:d29:93ae:b6bb:8f67:c24c:c90d/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::29e8:54a5:700d:59dd/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Reference

udevadm tool
udev
writing_udev_rules(obsolete)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *