cat:读取错误:/sys/class/net/eth0/phys_* 不支持操作

cat:读取错误:/sys/class/net/eth0/phys_* 不支持操作

我使用Kernel 6.4.0和Busybox定制了系统,但不知道为什么以 开头的三个文件phys_无法访问,而同一文件夹中的其他文件可以。

# pwd
/sys/class/net/eth0
# ls
addr_assign_type      carrier_up_count      gro_flush_timeout     napi_defer_hard_irqs  proto_down            tx_queue_len
addr_len              dev_id                ifalias               netdev_group          queues                type
address               dev_port              ifindex               operstate             speed                 uevent
broadcast             device                iflink                phys_port_id          statistics
carrier               dormant               link_mode             phys_port_name        subsystem
carrier_changes       duplex                mtu                   phys_switch_id        testing
carrier_down_count    flags                 name_assign_type      power                 threaded
#
#
#
# cat dev_
dev_id    dev_port
# cat dev_port
0
# cat phys_port_id
cat: read error: Operation not supported
#
# ls -lt dev_port
-r--r--r--    1 root     root          4096 Oct 27 14:50 dev_port
# ls -lt phys_port_id
-r--r--r--    1 root     root          4096 Oct 27 15:36 phys_port_id

答案1

该文件的内容phys_port_id是根据请求(当进程读取它时)由phys_port_id_show()功能在 Linux 内核中。

EOPNOTSUPP您可以看到,如果网络接口的驱动程序未实现操作,它就会返回ndo_get_phys_port_id。如果您ndo_get_phys_port_id在目录中查找drivers/net/ethernet,您会发现没有多少以太网驱动程序(Broadcom bnx2x、Intel i40e 和少数其他驱动程序)实现它(可能是因为没有多少以太网硬件设备提供该信息@ChrisDavies 详细介绍仅与具有多个端口的 NIC 相关)。

您可以eth0通过以下方式了解驱动以太网设备的驱动程序:

readlink /sys/class/net/eth0/device/driver

或者,ls -l /sys/class/net/eth0/device/driver如果readlink您的 busybox 版本中未启用该小程序。

答案2

下面的文件都不/sys是真实的 - 它们都是内核中维护的值的表示。

/sys/class/net以下位置提供了其中的列表:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net

phys_port_id和的相关部分phys_port_name是这样的:

What:     /sys/class/net/<iface>/phys_port_id
Date:     July 2013
KernelVersion:    3.12
Contact:  [email protected]
Description:
      Indicates the interface unique physical port identifier within
      the NIC, as a string.

What:     /sys/class/net/<iface>/phys_port_name
Date:     March 2015
KernelVersion:    4.0
Contact:  [email protected]
Description:
      Indicates the interface physical port name within the NIC,
      as a string.

如上所述,这两个值提供了具有多个端口的卡上的物理端口的标识(例如,搜索“4 端口 NIC”)。

相关内容