更改USB 网卡名称

embedded/2024/10/22 11:46:44/

在code/kernel-6.1/drivers/net/usb/usbnet.c文件中更
有几处地都可以改

最好在添加下面一行。但是要注意同时只能用一个usb网卡,多个不知道会怎么样
strcpy(dev->name,“eth1”); //第三处添加

usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
{struct usbnet			*dev;struct net_device		*net;struct usb_host_interface	*interface;const struct driver_info	*info;struct usb_device		*xdev;int				status;const char			*name;struct usb_driver 	*driver = to_usb_driver(udev->dev.driver);/* 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.*/if (!driver->supports_autosuspend) {driver->supports_autosuspend = 1;pm_runtime_enable(&udev->dev);}name = udev->dev.driver->name;info = (const struct driver_info *) prod->driver_info;if (!info) {dev_dbg (&udev->dev, "blacklisted by %s\n", name);return -ENODEV;}xdev = interface_to_usbdev (udev);interface = udev->cur_altsetting;status = -ENOMEM;// set up our own recordsnet = alloc_etherdev(sizeof(*dev));if (!net)goto out;/* netdev_printk() needs this so do it as early as possible */SET_NETDEV_DEV(net, &udev->dev);dev = netdev_priv(net);dev->udev = xdev;dev->intf = udev;dev->driver_info = info;dev->driver_name = name;dev->rx_speed = SPEED_UNSET;dev->tx_speed = SPEED_UNSET;net->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);if (!net->tstats)goto out0;dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV| NETIF_MSG_PROBE | NETIF_MSG_LINK);init_waitqueue_head(&dev->wait);skb_queue_head_init (&dev->rxq);skb_queue_head_init (&dev->txq);skb_queue_head_init (&dev->done);skb_queue_head_init(&dev->rxq_pause);tasklet_setup(&dev->bh, usbnet_bh_tasklet);INIT_WORK (&dev->kevent, usbnet_deferred_kevent);init_usb_anchor(&dev->deferred);timer_setup(&dev->delay, usbnet_bh, 0);mutex_init (&dev->phy_mutex);mutex_init(&dev->interrupt_mutex);dev->interrupt_count = 0;dev->net = net;strscpy(net->name, "usb%d", sizeof(net->name)); 			//第一次处eth_hw_addr_set(net, node_id);/* rx and tx sides can use different message sizes;* bind() should set rx_urb_size in that case.*/dev->hard_mtu = net->mtu + net->hard_header_len;net->min_mtu = 0;net->max_mtu = ETH_MAX_MTU;net->netdev_ops = &usbnet_netdev_ops;net->watchdog_timeo = TX_TIMEOUT_JIFFIES;net->ethtool_ops = &usbnet_ethtool_ops;// allow device-specific bind/init procedures// NOTE net->name still not usable ...if (info->bind) {status = info->bind (dev, udev);if (status < 0)goto out1;// heuristic:  "usb%d" for links we know are two-host,// else "eth%d" when there's reasonable doubt.  userspace// can rename the link if it knows better.if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||(net->dev_addr [0] & 0x02) == 0))strscpy(net->name, "eth%d", sizeof(net->name)); 			//第二处 /* WLAN devices should always be named "wlan%d" */if ((dev->driver_info->flags & FLAG_WLAN) != 0)strscpy(net->name, "wlan%d", sizeof(net->name));/* WWAN devices should always be named "wwan%d" */if ((dev->driver_info->flags & FLAG_WWAN) != 0)strscpy(net->name, "wwan%d", sizeof(net->name));/* devices that cannot do ARP */if ((dev->driver_info->flags & FLAG_NOARP) != 0)net->flags |= IFF_NOARP;/* maybe the remote can't receive an Ethernet MTU */if (net->mtu > (dev->hard_mtu - net->hard_header_len))net->mtu = dev->hard_mtu - net->hard_header_len;} else if (!info->in || !info->out)status = usbnet_get_endpoints (dev, udev);else {u8 ep_addrs[3] = {info->in + USB_DIR_IN, info->out + USB_DIR_OUT, 0};dev->in = usb_rcvbulkpipe (xdev, info->in);dev->out = usb_sndbulkpipe (xdev, info->out);if (!(info->flags & FLAG_NO_SETINT))status = usb_set_interface (xdev,interface->desc.bInterfaceNumber,interface->desc.bAlternateSetting);elsestatus = 0;if (status == 0 && !usb_check_bulk_endpoints(udev, ep_addrs))status = -EINVAL;}if (status >= 0 && dev->status)status = init_status (dev, udev);if (status < 0)goto out3;if (!dev->rx_urb_size)dev->rx_urb_size = dev->hard_mtu;dev->maxpacket = usb_maxpacket(dev->udev, dev->out);if (dev->maxpacket == 0) {/* that is a broken device */status = -ENODEV;goto out4;}/* let userspace know we have a random address */if (ether_addr_equal(net->dev_addr, node_id))net->addr_assign_type = NET_ADDR_RANDOM;if ((dev->driver_info->flags & FLAG_WLAN) != 0)SET_NETDEV_DEVTYPE(net, &wlan_type);if ((dev->driver_info->flags & FLAG_WWAN) != 0)SET_NETDEV_DEVTYPE(net, &wwan_type);/* initialize max rx_qlen and tx_qlen */usbnet_update_max_qlen(dev);if (dev->can_dma_sg && !(info->flags & FLAG_SEND_ZLP) &&!(info->flags & FLAG_MULTI_PACKET)) {dev->padding_pkt = kzalloc(1, GFP_KERNEL);if (!dev->padding_pkt) {status = -ENOMEM;goto out4;}}status = register_netdev (net);strcpy(dev->name,"eth1"); 							//第三处添加if (status)goto out5;netif_info(dev, probe, dev->net,"register '%s' at usb-%s-%s, %s, %pM\n",udev->dev.driver->name,xdev->bus->bus_name, xdev->devpath,dev->driver_info->description,net->dev_addr);// ok, it's ready to go.usb_set_intfdata (udev, dev);

http://www.ppmy.cn/embedded/129550.html

相关文章

计算机网络技术示例

IP地址和物理地址&#xff08;通常指MAC地址&#xff09; 1. 定义与本质&#xff1a; - IP地址&#xff1a;是互联网协议地址&#xff0c;是用于分组交换数据网络的一种逻辑地址&#xff0c;用于在网络中唯一标识一台主机或网络设备的位置。它是网络层的地址&#xff0c;由网…

初识Flink

诞生背景 伴随现代信息技术的持续发展&#xff0c;我们能清晰地察觉到&#xff0c;信息生产的规模不断扩张&#xff0c;信息更新的速率持续攀升。以电商系统为例&#xff0c;用户从搜索商品到下单支付&#xff0c;整个链路可能短短几秒就可以完成&#xff0c;倘若能在这条链路…

OpenCV高级图形用户界面(21)暂停程序执行并等待用户按键输入函数waitKey()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 等待按键 该函数 waitKey 在 delay≤0 时无限等待按键事件&#xff0c;或者在 delay 为正数时等待 delay 毫秒。由于操作系统在切换线程时有最小…

基于ElementPlus的table组件封装

前言 我们在使用UI库编写页面的时候&#xff0c;特别是账务系统&#xff0c;需要用到表格的情况会比较多&#xff0c;如果我们每次都是复制一遍UI库中的demo然后进行调整&#xff0c;这样造成的结果是多次引入 Table 组件&#xff0c;而且从前端开发规范来讲&#xff0c;不符合…

双线性变换法

给定模拟信号&#xff0c;要用数字滤波器对它进行滤波。按照双线性变换法&#xff0c;步骤如下&#xff08;假设为高通滤波器&#xff09;&#xff1a; &#xff08;1&#xff09;选择一个采样频率&#xff0c;对进行采样&#xff0c;得到时域离散信号。 &#xff08;2&#…

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布&#xff1a;https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本&#xff0c;结合了尖端的准确性、速度和效率&#xff0c;用于目标检测、分割、分类、定向边界框和…

userspace 和 kernelspace

Kernel Space&#xff08;内核空间&#xff09; 定义与功能 内核空间是操作系统核心代码运行的地方&#xff0c;主要包括&#xff1a; 内存管理&#xff1a;管理和分配内存资源&#xff0c;包括物理内存和虚拟内存的映射。 进程管理&#xff1a;管理进程的创建、调度和终止&am…

SQL注入原理、类型、危害与防御

SQL注入的原理概念 SQL注入是一种常见的网络攻击技术&#xff0c;攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码&#xff0c;以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型&#xf…