如何在 Linux 发行版中设置以太网接口名称?

如何在 Linux 发行版中设置以太网接口名称?

我正在开发基于 yocto 的 Linux 发行版,并且必须管理 WiFi-USB 适配器。

当我将适配器插入 USB 连接器时,Linux 内核udev添加了一个 wifi 以太网接口并将其名称设置为wlp0s21f0u8

我知道已经引入了一种新的命名方案,以解决旧 (eth0、wlan0) 命名标准引起的问题。该名称wlp0s21f0u8是这种新方案的结果。基本上,前两个字母描述接口的类型:wl用于 wlan(无线局域网),en用于以太网。

当我插入 WiFi-USB 适配器时udevadm monitor,我的发行版中提供的命令会给出许多日志,如下所示:

KERNEL[3538.552002] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8 (usb)
KERNEL[3538.554908] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0 (usb)
KERNEL[3538.628751] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/wakeup/wakeup39 (wakeup)
KERNEL[3538.629103] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/ieee80211/phy8 (ieee80211)
KERNEL[3538.629536] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/ieee80211/phy8/rfkill8 (rfkill)
KERNEL[3538.641836] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0 (net)
KERNEL[3538.642081] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-0 (queues)
KERNEL[3538.642111] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-1 (queues)
KERNEL[3538.642133] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-2 (queues)
KERNEL[3538.642201] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-3 (queues)
KERNEL[3538.642381] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-0 (queues)
KERNEL[3538.642490] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-1 (queues)
KERNEL[3538.642567] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-2 (queues)
KERNEL[3538.642669] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-3 (queues)
KERNEL[3538.649652] bind     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0 (usb)
KERNEL[3538.649986] bind     /devices/pci0000:00/0000:00:15.0/usb1/1-8 (usb)
UDEV  [3538.652456] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8 (usb)
UDEV  [3538.654593] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0 (usb)
UDEV  [3538.657451] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/wakeup/wakeup39 (wakeup)
UDEV  [3538.660210] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/ieee80211/phy8 (ieee80211)
UDEV  [3538.661866] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/ieee80211/phy8/rfkill8 (rfkill)
KERNEL[3538.666927] move     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlp0s21f0u8 (net)
UDEV  [3538.684035] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlp0s21f0u8 (net)
UDEV  [3538.689310] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-0 (queues)
UDEV  [3538.690951] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-2 (queues)
UDEV  [3538.691687] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-1 (queues)
UDEV  [3538.697841] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-3 (queues)
UDEV  [3538.700271] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-0 (queues)
UDEV  [3538.701113] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-2 (queues)
UDEV  [3538.702787] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/tx-1 (queues)
UDEV  [3538.703428] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0/queues/rx-3 (queues)
UDEV  [3538.707760] bind     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0 (usb)
UDEV  [3538.711545] bind     /devices/pci0000:00/0000:00:15.0/usb1/1-8 (usb)
UDEV  [3538.982603] move     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlp0s21f0u8 (net)

其中我想强调以下几点,我认为这些是最重要的:

...
KERNEL[3538.641836] add      /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlan0 (net)
...
KERNEL[3538.666927] move     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlp0s21f0u8 (net)
...
UDEV  [3538.982603] move     /devices/pci0000:00/0000:00:15.0/usb1/1-8/1-8:1.0/net/wlp0s21f0u8 (net)

先前的日志显示内核添加了接口wlan0,并且在其名称更改后(移动) 到wlp0s21f0u8

我如何将以太网接口重命名为wlp0s21f0u8我想要的名称?

请问有人可以帮我做到这一点吗?

谢谢

答案1

如果你只想恢复全部接口为其原始内核名称,最简单的方法是使用net.ifnames=0内核选项启动 - 这会告诉 udev 完全禁用重命名。

有两种方法可以重命名单个接口:

  • 使用.link中的文件/etc/systemd/network。这些由 udev 规则处理(不是wlp0s21f0u8systemd-networkd 提供的机制),这实际上与首先重命名接口的机制相同。请参阅systemd.link(5)手册页了解更多详细信息。

    如果要将接口恢复为内核名称,请使用NamePolicy=空值;如果要使用自定义名称,请通过 指定Name=

    [Match]
    <some match conditions>
    
    [Link]
    NamePolicy=
    Name=usbwifi
    

    首先看一下/usr/lib/systemd/network/99-default.link如何启用重命名功能。

    所有 .link 文件都作为 udev 的一部分进行处理80-net-setup-link.rules。这是一个嵌入式系统,如果您不使用任何 .link 文件功能,则可以完全删除规则文件(以及相应的 udev 帮助程序二进制文件)。

  • 使用 udev 规则。如果您有一个直接分配的早期规则NAME=(例如在 中70-custom-names.rules),则处理 .link 文件的后续规则将不会覆盖它。

    ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan0", NAME="usbwifi"
    

在这两种情况下,都应避免尝试将某些内容“重新”重命名为内核样式的wlan#名称;如果您想要这些,最好完全禁用重命名(例如,通过设置一个空的 NamePolicy),而不是在事后尝试撤消它。

相关内容