linux 以太网驱动程序产品 ID、设备 ID 和地址

linux ethernet drivers product id, device id and address

在 linux 平台上,我需要从 cli 中找到给定名称的接口的 product_id、vendor_id 和地址。我正在使用以下命令找到它:

# to find addr:
pci_interface_addr0=$(ethtool -i $eth0 | grep -i bus-info | tail -c 8)

# to find ids:
complete_id=$(lspci -nvv | grep $pci_interface_addr0 | awk '{print }')
vendor_id=$(echo $complete_id | cut -d \: -f 1)
product_id=$(echo $complete_id | cut -d \: -f 2)

有更好的方法吗?因为我有像上面的 tail -c 8 这样的硬编码值。

这可以在 python 中完成吗?由于父程序主要是一个 python 模块。

感谢任何好的输入!

Is there is a better approach to this?

我会利用通常位于 /sys 中的 sysfs 文件系统。例如,给定我系统上的接口名称 enp0s25,我可以在以下位置找到供应商:

$ cat /sys/class/net/enp0s25/device/vendor
0x8086

产品编号在:

$ cat /sys/class/net/enp0s25/device/device 
0x1502

同一目录中的 uevent 文件包含此信息,其形式可以很容易地获取到 shell 脚本中:

$ cat /sys/class/net/enp0s25/device/uevent
DRIVER=e1000e
PCI_CLASS=20000
PCI_ID=8086:1502
PCI_SUBSYS_ID=17AA:21F3
PCI_SLOT_NAME=0000:00:19.0
MODALIAS=pci:v00008086d00001502sv000017AAsd000021F3bc02sc00i00