关于Linux系统上usb网卡名字

一般来说,我们不会去动 net里的代码。我们只需要修改 usbnet.c 就可以了。

usbnet.c 哪里决定了网卡名称

usbnet_probe 里 根据网卡的flag 决定

假如我们需要修改网卡名称怎么做?

usbnet 里固定USB网卡的名字

固定网卡的名字,可以根据一些条件来决定

  • 驱动名称
  • usb 描述符信息
  • driver_info

这里可以打印出usb 的

这里可以打印出VID PID interface 甚至是USB的类信息,驱动名称

在这里可以打印出一些usb的bus dev 甚至kobj对象里的信息,这些信息也可以用来修改网卡名称。

上面log 会打印

这些和uevent 上报的udevadm 打印出来的是一致的。




==================

举个例子

--- a/usbnet.c
+++ b/usbnet.c
@@ -1669,6 +1669,8 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
        const char                      *name;
        struct usb_driver       *driver = to_usb_driver(udev->dev.driver);

+       __u16  idProduct, idVendor;
+
        /* usbnet already took usb runtime pm, so have to enable the feature
         * for usb interface, otherwise usb_autopm_get_interface may return
         * failure if RUNTIME_PM is enabled.
@@ -1726,6 +1728,17 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)

        dev->net = net;
        strscpy(net->name, "usb%d", sizeof(net->name));
+
+        idVendor = xdev->descriptor.idVendor;
+        idProduct = xdev->descriptor.idProduct;
+
+        if(idVendor == cpu_to_le16(0x2C7C))
+        {
+               if(idProduct == cpu_to_le16(0x06005))
+                      // strcpy(net->name, "test%d");
+                       strscpy(net->name, "test%d", sizeof(net->name));
+        }
+
        eth_hw_addr_set(net, node_id);

        /* rx and tx sides can use different message sizes;