重新加载 udev 规则失败

重新加载 udev 规则失败

我已经更改了 /etc/udev/rules.d (Ubuntu) 中的规则,将以太网端口名称从 0 更改为 1,将 1 更改为 2,但是每当我运行时:

    sudo service udev restart
    sudo udevadm control --reload-rules

直到我重新启动它才会更新我的以太网端口号。

这对于运行普通计算机来说显然不是问题,但是我需要将这个想法实现到实时 CD(Knoppix)中,以测试多个系统上的以太网端口,每个系统都需要为特定的以太网端口设置不同的内核才能使我的脚本正常工作,我发现唯一的方法是使用 udev 规则,但是这并不容易,因为除非重新启动,否则规则不会更新。

有谁知道无需重新启动机器即可更改这些端口的方法吗?

答案1

重新加载规则只会确保下次检测到设备时设备名称正确。您必须卸载并重新加载网络接口驱动程序(内核模块)。

如果驱动程序是内核模块,请找出模块名称并重新加载它(如果您没有自己配置内核,则很可能如此)。请注意,这将关闭使用此驱动程序的所有接口(或参见下文):

# ls -l /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Jul 18 19:18 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/atl1c
# rmmod atl1c
# modprobe atl1c

但是如果驱动程序是内置的,那么工作量会稍微大一些。您必须确定驱动程序名称和 PCI ID,命令驱动程序解除与设备的绑定,然后再重新绑定。

# ls -l /sys/class/net/eth0/device
lrwxrwxrwx 1 root root 0 Jul 18 19:18 /sys/class/net/eth0/device -> ../../../0000:06:00.0
# ls -l /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Jul 18 20:41 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/atl1c
# echo 0000:06:00.0 > /sys/bus/pci/drivers/atl1c/unbind
# echo 0000:06:00.0 > /sys/bus/pci/drivers/atl1c/bind

答案2

规则仅在设备插入时才适用。尝试udevadm trigger使规则重新应用于所有设备。


引自手册页udevadm

--重新加载规则

向 udevd 发出信号,重新加载规则文件。udev 守护进程自动检测变化,通常不需要此选项。重新加载规则不会对现有设备应用任何更改

相关内容