我正在开发基于 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 规则处理(不是wlp0s21f0u8
systemd-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),而不是在事后尝试撤消它。