Ubuntu LTS 20.04 arm64版udev故障

Ubuntu 20.04 arm64版本,使用netplan apply配置网络会卡住,netplan try可能会卡住,或Python报udevadm相关错误;wlan0无法通过udev规则改名(改动不生效,但wwan0又能自动修改)。

参照脚本执行

1
# SYSTEMD_DEBUG_LEVEL=debug udevadm test-builtin net_setup_link

后程序报错

1
unknown command: net_setup_link

调试流程

发现该问题最早是自己编译的系统使用netplan配置网络时会卡住,尝试Google了一下(一查就是几个月),没找到一致的问题。

最初怀疑netplan工具有缺陷,升级后现象无变化。系统在启动时又能按照yaml文件内容配置,也能正常通过netplan generate生成systemd-networkd配置,只是不能通过netplan apply|try手动配置。

该问题被一度搁置,直到最近调试需要修改无线网卡设备名:修改网络设备命名规则时,4G模块的接口wwan0就会受到规则影响,但无线网卡始终被改名为wlP2p1s0。调试过程中再次遇到udevadm报错。

通过apt show udev在故障系统和正常系统上查询,二者均报告245.4-4ubuntu3.15版本。后决定尝试将正常系统的udevadm拷贝至故障系统时才发现,正常系统中只存在/bin/udevadm(245),但故障系统除该文件外还同时存在/usr/bin/udevadm(243),直接执行udevadm会优先调用后者,导致一部分功能故障。

解决方案

1
2
3
4
5
# command -v udevadm
# udevadm --version
# /bin/udevadm --version
# rm /usr/bin/udevadm
# ln -s /bin/udevadm /usr/bin/udevadm  # Just in case

另:无线网卡问题通过udev匹配驱动进行改名。

1
2
3
4
# cat > /lib/udev/rules.d/77-iwlwifi-wlan0.rules << EOF
> SUBSYSTEM=="net", ACTION=="add", DRIVERS=="iwlwifi", NAME="wlan%n"
> SUBSYSTEM=="net", ACTION=="add", DRIVERS=="wifi_pcie", NAME="wlan%n"
> EOF

Update:NAME字段可用%n来设置内核提供的设备编号。

以及Marvell为甚喵会用wifi_pcie这种驱动名啊。