记录:Android 下 USB 网卡修改 MAC 后,接口名从 eth1 变成 usb0 的原因分析

ethtool修改永久修改eeprom(MAC)地址 背景 项目中移植DM9621网卡的时候,发现eth网络接口正常出现,但是不能配置MAC地址。只要通过“ifconfig eth0 hw ether“”指令配置了MAC地址,就不再能够PING通其他主机。后分析发现内核驱动加载为cdc_ether,而不是dm9621。经分析发现应是我们自己做的硬件的eeprom内无配置内容,故dm9621芯片的工作模式不对。所以,我们需要刷写eeprom。 工具 刷... 阅读详情

关键词:usbnet、cdc_ether、接口命名、MAC 地址、U/L 位、Android GKI

一、问题现象

调试一款 USB 网卡(基于 usbnet/cdc_ether 框架的驱动),接入 Android 系统:

  • 默认状态:网卡识别为 eth1,一切正常;
  • 修改 MAC 地址后重新上电:网卡名称变成了 usb0,Android 以太网服务不再正常管理它(系统默认只管理匹配 eth\d 的接口,usb0 会被当成 USB 网络共享设备处理)。

修改前后的 MAC:

状态MAC 地址
修改前dc:xx:xx:xx:xx:xx
修改后ee:xx:xx:xx:xx:xx

同一台设备、同一个驱动,只改了 MAC,接口命名规则就变了,说明命名和 MAC 地址本身有关。

二、根因:usbnet_probe() 的命名启发式

usbnet 框架的 USB 网卡(cdc_ether、cdc_ncm 及各类厂商衍生驱动),接口名在 drivers/net/usb/usbnet.c 的 usbnet_probe() 中决定,逻辑分两步:

第 1 步:默认命名 usb%d

net = alloc_etherdev(sizeof(*dev));
...
strcpy (net->name, "usb%d");

第 2 步:启发式判断是否改名为 eth%d(旧版内核代码)[1]:

// 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))
    strcpy (net->name, "eth%d");

cdc_ether 类驱动的 flags 是 FLAG_ETHER | FLAG_POINTTOPOINT,于是判定就落在 MAC 地址第一字节的 0x02 位(U/L 位) 上:

  • U/L 位 = 0(全局管理地址,带合法 OUI)→ 改名 eth%d
  • U/L 位 = 1(本地管理地址)→ 保持 usb%d

新版内核(5.15/6.x GKI,含 2024 年 12 月补丁)逻辑等价,写得更直白[2]:

static bool usbnet_needs_usb_name_format(struct usbnet *dev, struct net_device *net)
{
	/* Point to point devices which don't have a real MAC address
	 * (or report a fake local one) have historically used the usb%d
	 * naming. Preserve this..
	 */
	return (dev->driver_info->flags & FLAG_POINTTOPOINT) != 0 &&
		(is_zero_ether_addr(net->dev_addr) ||
		 is_local_ether_addr(net->dev_addr));
}

即:点对点设备,如果驱动没给 MAC(全零)或者给的是本地管理 MAC,保持历史惯例用 usb%d 命名。

三、为什么我的 MAC 踩坑了:U/L 位分析

MAC 第一字节的两个关键标志位:

  • bit0(0x01,I/G 位):0 = 单播,1 = 组播(网卡 MAC 必须为 0,否则 register_netdev 直接报 invalid MAC);
  • bit1(0x02,U/L 位):0 = 全局管理地址,1 = 本地管理地址。

逐位分析两个 MAC 的第一字节:

MAC 第一字节二进制bit0 (I/G)bit1 (U/L)判定结果接口名
dc1101 110000全局地址eth1 ✅
ee1110 111001本地管理地址usb0 ❌

我随手编的 ee:...,第二字符是 E(二进制 1110),正好把 U/L 位置成了 1,命中了 is_local_ether_addr() 的例外分支。

速记规律:MAC 第一字节的第二个十六进制字符是 2/3/6/7/A/B/E/F → U/L 位为 1(本地地址);是 0/1/4/5/8/9/C/D → 全局地址。手工编 MAC 时务必选后者。

四、验证方法

# 1. 看当前 MAC 第一字节是否落在 x2/x6/xA/xE 上
cat /sys/class/net/usb0/address

# 2. 确认绑定的是哪个驱动(是否走的 cdc_ether/usbnet 框架)
readlink /sys/class/net/usb0/device/driver

# 3. 看 probe 时驱动读到的 MAC 和注册日志
dmesg | grep -i register

把 MAC 改成 ec:3d:4e:00:32:12(只把 ee 换成 ec)后重新上电,接口名恢复 eth1,验证通过。

五、延伸:这段命名逻辑的"回归窗口期"

这段代码近几年被反复改过,不同版本内核行为不完全一致,跨版本调试时要注意:

时间提交行为变化
~2022 前(原始逻辑)默认 usb%d;FLAG_ETHER 且(非点对点 或 U/L=0)→ eth%d
2022 左右bab8eb0dd4cb(usbnet: modern method to get random MAC)随机 MAC 分配时机改变,命名检查时读到的是清零地址,U/L 检查恒"通过"——带 FLAG_ETHER 的设备不管 MAC 是什么都叫 eth%d(第一次回归)
2024.108a7d12d674ac(fix name regression,随后回合各 stable)条件放宽为"MAC 非零即 eth%d",本地地址也会变成 eth%d,反而把一批依赖 usb0 名字的 LTE 模组/OpenWrt 配置搞挂(第二次回归)
2024.12net: usb: usbnet: restore usb%d name exception for local mac addresses(主线及 stable 回合,如 5.4.292)恢复"点对点 + 本地/全零 MAC → 保持 usb%d"的旧行为[2-1][3]

结论:内核从来不保证接口名稳定(Greg KH 原话:"Device names have NEVER been stable"),不要把产品逻辑建立在 eth1/usb0 这类默认名字上。

六、解决方案汇总

  1. 改 MAC 时保证第一字节为合法全局单播地址:bit0=0 且 bit1=0,例如保留原 OUI 前缀 dc:04:5a:xx:xx:xx,或把 ee 改成 ec——最省事的做法;
  2. 用户态改名:ip link set usb0 down && ip link set usb0 name eth1;Android 上可用 udev 规则按 MAC 固定名称(如 system/core/rootdir/etc/udev/rules.d/70-persistent-net.rules);
  3. 驱动层固定命名:在驱动的 bind() 里显式 strcpy(net->name, "eth%d"),跳过启发式判断;
  4. 模块参数:usbnet 提供 eth_device_name 参数(默认 "eth%d")可改改名用的模式串,注意它只影响"改名后叫什么",不影响"是否改名"的判断。

七、经验总结

  1. USB 网卡在 Linux/Android 下的接口名不是随机的,是 usbnet 框架根据驱动 flags + MAC 地址属性决定的;
  2. 手工编 MAC 牢记两个约束:第一字节 bit0=0(单播)、bit1=0(全局),即第二个十六进制字符取 0/1/4/5/8/9/C/D;
  3. 遇到"名字变了"类问题,先看 dmesg 和驱动绑定关系,再想是不是 MAC 合法性/属性影响了内核的命名/注册路径;
  4. 产品化时接口名要用 MAC/设备路径绑定(udev 规则或驱动固定),别依赖内核默认命名。

参考资料


  1. USB NCM usbnet 枚举流程代码分析(含 usbnet_probe 旧版命名启发式源码)- 优快云↩︎

  2. net: usb: usbnet: restore usb%d name exception for local mac addresses - patchwork↩︎↩︎

  3. Linux 5.4.292 ChangeLog(restore usb%d 补丁回合 stable)↩︎

君正M300开发板USB网卡SR9900驱动配置避坑指南(解决eth0冲突) 本文详细介绍了在君正M300开发板上配置SR9900 USB网卡驱动时遇到的eth0冲突问题及其解决方案。通过分析问题根源,提供了修改设备树、调整驱动代码、使用udev规则和启用net.ifnames命名方案四种实用方法,帮助开发者快速解决USB网卡驱动调试中的常见问题。 阅读详情

相关推荐

安卓手机Termux配置USB以太网卡静态IP实战

在Linux网络管理中,ifconfig是配置网络接口的基础命令,用于设置IP地址、子网掩码和网关。其原理是通过系统调用直接操作内核网络接口,实现网络参数的动态调整。在嵌入式开发和工业现场调试中,固定IP能确保设备稳定通信,避免DHCP地址变化带来的管理难题。Termux作为安卓上的Linux终端环境,让手机通过USB以太网卡获得物理网口,并利用ifconfig手动配置静态IP,从而将手机变为便携式网络调试工具。这一方案适用于局域网服务器搭建、设备端口映射等场景,解决了安卓系统缺乏以太网静态IP入口的痛点。

weixin_34025051的博客 171

M1 Mac运行安卓12:Docker+Redroid容器化实战指南

安卓容器化是将Android系统作为轻量级Linux进程运行的技术范式,其核心原理在于复用宿主内核、绕过指令模拟,实现近原生性能。相比传统虚拟机,该方案显著降低CPU开销与延迟,具备高密度部署、快速启停和GPU直通等技术优势,广泛应用于移动应用兼容性测试、跨端开发验证及多账号隔离场景。随着Redroid对安卓12 HwBinder和M1 GPU驱动的深度适配,结合Docker Desktop for Mac的ARM64虚拟化支持,Mac平台已具备稳定运行安卓12容器的工程能力——尤其适合需要多实例、低延迟、

weixin_34344403的博客 431

CH398替代RTL8153实测:USB转千兆网卡芯片选型与适配指南

USB转千兆网卡是工业设备和嵌入式系统中常见的网络扩展方案,其核心在于USB以太网控制芯片的选型与驱动适配。从USB总线协议到以太网PHY,芯片的寄存器映射、电源管理和驱动兼容性直接影响吞吐、延迟与稳定性。在国产化替代趋势下,如何平衡性能、成本和供应链安全成为工程师关注的重点。本文基于实际项目,以CH398替换RTL8153为切入点,系统梳理了USB转千兆网卡的设计要点,包括硬件电路、EEPROM烧录、Windows/Linux驱动适配、嵌入式平台验证以及TCP/UDP吞吐实测。同时给出常见故障排查方法,帮

cuankuangzhong6373的博客 593

RTL8812AU无线网卡驱动:从零到渗透测试实战秘籍

还在为无线网卡监控模式支持不全而烦恼吗?还在为帧注入功能不稳定而头疼吗?RTL8812AU驱动项目为网络安全研究者和无线渗透测试工程师提供了一个强大的开源解决方案。这个驱动不仅支持RTL8812AU/8821AU/8814AU系列芯片,更重要的是它完美实现了监控模式和帧注入功能,让你能够像专业人士一样进行无线安全测试。 ## 为什么选择RTL8812AU驱动? 在无线安全测试领域,硬件的选择往

gitblog_00832的博客 662

USB转千兆网卡芯片国产替代实测:CH398对比RTL8153深度评测

USB转千兆网卡芯片作为连接USB接口与以太网络的关键器件,在扩展坞、工业平板、开发板调试等场景中承担着数据桥接的核心职责。其工作原理是将USB总线上的数据包转换为标准以太网帧,再通过内置PHY完成物理层收发。在国产替代浪潮下,芯片的驱动兼容性、吞吐稳定性与长期可靠性成为工程师选型的首要考量。针对这一需求,本文基于实测数据对比了国产芯片CH398与成熟方案RTL8153B在接口规格、功能特性、驱动生态和原厂支持等方面的异同,并记录了两者在吞吐量、延迟、长时间运行及热插拔压力测试中的表现。文章还结合USB抓包

weixin_33875564的博客 334

Jetson TK1搭建WiFi热点:嵌入式Linux网络栈实战指南

WiFi热点是嵌入式Linux设备实现无线接入与边缘组网的基础能力,其本质涉及无线驱动加载、内核固件管理、用户态AP协议栈(hostapd)、轻量级DHCP/DNS服务(dnsmasq)及iptables网络地址转换等核心机制。在资源受限的ARM平台如Jetson TK1上,该过程尤为典型——需直面驱动兼容性、固件版本错配、NetworkManager服务冲突等真实工程问题。掌握这一流程,不仅可快速构建稳定AP,更能深入理解nl80211接口、udev设备绑定、systemd/upstart服务协同等底层原

weixin_34138056的博客 363

网络通信入门:网口、MAC 地址、IP 地址与网络准入

网络接口├── 使用MAC完成当前链路上的二层通信└── 配置IP完成网络层通信。

星垂平野阔, 月涌大江流 383

Kali+MSF安卓渗透测试:meterpreter载荷实战与安全加固指南

Android渗透测试是移动安全能力验证的核心实践,其本质是基于标准工具链(Kali Linux、Metasploit Framework)对安卓应用层、权限模型与系统防护机制的可控性评估。原理上依赖载荷生成、签名安装、反向连接与meterpreter会话交互等关键环节,技术价值在于暴露APK加固缺失、调试模式滥用、SELinux策略松动等真实风险点。典型应用场景包括红蓝对抗基线建设、APP安全开发自检及金融/政务类应用合规性验证。本文聚焦Android 9–11靶机环境下的可复现渗透路径,深度解析msfv

weixin_34159110的博客 1392

RKDevInfoWriteTool写号工具详解:SN与MAC地址配置及常见问题排查

在嵌入式开发与量产测试中,设备身份信息的写入是保证每台硬件可识别、可管理的关键环节。SN序列号与MAC地址作为设备的唯一标识,其配置过程涉及底层分区写入、驱动加载与系统读取等多层链路。瑞芯微平台提供的写号工具用于将这类出厂参数固化到指定分区,与固件烧录工具职责不同。理解其工作原理、配置文件作用以及工具版本与芯片平台的匹配关系,有助于快速定位写入失败、系统读不到值或MAC异常等问题。本文从环境准备、参数填写到验证方法展开,并结合设备树配置、uboot环境变量与日志分析,梳理生产环境中常见的报错场景与排查顺序,

weixin_34056162的博客 1239

Windows连接Linux开发板全攻略:串口、SSH、USB网络与VSCode远程开发

在嵌入式与物联网开发中,建立可靠的通信链路是项目成功的基石。通信协议与接口技术构成了设备间数据交换的核心原理,其技术价值在于实现异构系统间的高效、稳定交互,直接影响开发调试效率。无论是串口通信、网络协议还是USB虚拟网络,每种连接方式都在特定应用场景中发挥关键作用。本文聚焦于Windows与Linux开发板间的实战连接方案,深入解析USB转TTL串口、SSH远程登录、USB网络共享等核心方法,并涵盖VSCode Remote-SSH等高效开发工具链集成,为嵌入式开发、物联网设备调试提供全面的工程实践指南。

weixin_33875564的博客 332

RTL8188FU/FTV USB无线网卡驱动:Linux与Android编译排错

USB无线网卡驱动安装的本质,是让内核通过USB设备ID识别芯片、加载匹配的无线模块并接入cfg80211/mac80211子系统。RTL8188FU与RTL8188FTV常因主线驱动设备表不全、内核版本差异和vermagic不匹配,出现插卡不认、wlan0不显示或运行中断流。掌握内核源码树、交叉编译工具链与DKMS自动重建机制,能显著降低驱动维护成本,适用于电视盒子、工控小主机、下载机和Android车机等长期在线场景。围绕8188fu.ko的编译、加载参数、wpa_supplicant联网、开机自启与四

weixin_29183637的博客 307

破解Intel万兆网卡SFP+模块白名单:EEPROM修改实战

SFP+光模块内部都有一颗EEPROM芯片,存储着厂商名、料号、序列号等关键身份信息,这就是模块的“身份证”。Intel万兆网卡(如X520-DA2)在启动时会通过I2C总线读取这些字段,并严格比对固件内置的模块白名单,凡是厂商或料号对不上的模块,一律报“unsupported SFP+ module type”。这种针对第三方模块的兼容性限制,让很多DIY万兆网络用户头疼不已。其实,只要用编程器修改模块EEPROM中的关键字段,把厂商名改为“Intel Corp”、料号换成白名单内的型号,并重新计算校验和

weixin_34379433的博客 390

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2676

动态MAC与静态MAC:原理、配置与虚拟化避坑指南

MAC地址是局域网中设备通信的物理身份标识,交换机通过MAC地址表完成帧转发。动态MAC由设备发送数据帧自动学习,默认老化,适合临时接入;静态MAC由管理员手工绑定,不老化,可有效防止伪造与未授权接入。理解两者的区别,是配置端口安全、排查MAC地址冲突、优化关键设备转发路径的基础。在实际工程中,无论是对交换机配置静态MAC做白名单,还是借助MAC地址查询识别设备厂商,抑或在虚拟化环境中处理虚拟机MAC冲突、理解混杂模式与伪传输策略,都需要扎实掌握这两类表项的行为差异。本文从动态MAC与静态MAC的基本原理出

weixin_34101229的博客 311

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈 亲,当你点开看这篇文章,就说明你知道我想要干什么事情,或者说,你知道在 Windows 的内核种绕开它的网络协议,再独立构建一个网络协议栈的意义。如果你要问我有 windows 系统的网络协议栈不用,移植 lwip 有什么意义,那么你可以关闭链接走人了,因为这篇文章不适合你,它不是讲 lwip 移植原理的。 经常关注我的博客的朋...

oRbIt 的专栏 3576

FFTW3库在Windows中的安装和使用

Windows 32位平台下载:FFTW Installation on Windows。

weixin_45397344的博客 951

别再担心MAC地址冲突了!手把手教你为RK3568 Android12设备烧写唯一MAC地址

本文详细介绍了为RK3568 Android12设备烧写唯一MAC地址的三种技术方案,包括使用RKDevTool图形化烧写、命令行自动化脚本和内核启动后动态写入。通过解析MAC地址存储机制和提供产线最佳实践,帮助开发者有效避免MAC地址冲突,提升设备网络稳定性。

weixin_30788619的博客 277

YOLOv8【第十一章:视频追踪与流处理篇·第3节】匈牙利算法(Hungarian Algorithm)与 KM 算法匹配机制详解!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 442

H10G-13企业网关拆解:S905L3安卓盒子线刷双系统与网络配置实战

运营商定制的“企业网关”设备,往往披着路由器的外壳,内部却是标准的安卓智能终端。以晶晨S905L3芯片为核心的盒子,通过线刷方式可彻底替换受限的定制系统,实现从Android 9到Android 11的双系统自由切换。线刷的原理是通过USB直接访问芯片BootROM,将固件写入eMMC,其技术价值在于突破厂商限制、恢复纯净安卓体验,并可作为电视盒子或开发调试平台。本文从基础概念讲起,结合USB_Burning_Tool、短接MaskROM、ADB网络调试等实操要点,详细梳理了H10G-13等S905L系列设

weixin_34199335的博客 292

把复杂计算推到数据库里:ABAP CDS View Table Function 从原理到落地实践

摘要:本文深入解析ABAP CDS Table Function技术,重点探讨其在复杂业务场景下的应用价值。当CDS View无法满足窗口函数、递归计算等高级需求时,Table Function通过结合CDS类型系统与AMDP的数据库原生计算能力,成为关键解决方案。文章详细介绍了Table Function的架构设计(CDS实体声明+AMDP实现)、客户端处理机制、开发传输流程中的注意事项,并通过航班数据示例展示最小实现闭环。这项技术特别适用于需要将复杂计算下推到数据库层的场景,能显著提升RAP和OData

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2290

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 509

如何6阶段给e900v22d盒子刷Armbian:amlogic-s9xxx-armbian项目从底包到批量部署的完整实操

本实操以 e900v22d 电视盒子(Amlogic S905L3B 芯片,内存与存储容量以设备实际为准)为例,演示如何基于 amlogic-s9xxx-armbian 项目刷入 Armbian(基于 Debian 的轻量级 Linux 发行版),把它变成一台能用 SSH 登录的小型服务器。完成后你会具备三种能力:独立完成底包写入与调试通道搭建;排查并修复内存识别异常这类硬件参数问题;批量部署多台

gitblog_00280的博客 1053

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

随着人工智能技术在农业领域的深入应用,基于深度学习的害虫检测系统已成为智慧农业的重要组成部分。本文详细介绍了一种基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统,涵盖算法原理、数据集构建、模型训练、系统实现及完整代码。该系统能够实时检测并识别多种农作物害虫,为农业生产提供精准的病虫害监测解决方案。

YOLO 273

EC6108V9硬件级MAC/SN/STBID移植指南:绕过刷机包失效陷阱

机顶盒硬件身份认证是IPTV终端安全体系的核心机制,其原理在于MAC地址、序列号(SN)与设备标识(STBID)构成的芯片级校验闭环。这类身份信息通常固化在OTP区域、EEPROM及PHY芯片ROM中,而非普通文件系统,因此仅修改Android配置或刷入通用固件无法通过运营商CAS平台认证。技术价值在于实现设备复用、维修续服与老旧终端功能重生,典型应用于华为EC6108V9等深度定制机顶盒的身份迁移、停服复活与NAS化改造。本文聚焦真实硬件存储定位、OTP扇区解析与可逆写入验证,覆盖CH341A编程器操作、

weixin_34133829的博客 406

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RKDevInfoWriteTool排障指南:SN/MAC写入失效与量产批处理方案

设备信息烧写是嵌入式产品量产中的关键环节,SN和MAC地址等数据通常存储在专用分区中,由系统启动时读取并填充至属性或网络接口。正确理解分区存储与读取链路,才能确保写入真正生效。在瑞芯微RK平台量产中,RKDevInfoWriteTool是常用的图形化工具,但因其依赖于ADB通信、root权限和固件分区布局,常出现连接失败、写入无效甚至批量MAC冲突等问题。针对RK3568、RK3399等平台,需掌握设备分区检查、权限确认和格式规范,并可通过Python批量调用ADB实现自动化写号与回读校验。本文从排障视角梳

weixin_33979203的博客 295

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: USB转千兆网卡 CH398 广播风暴抑制功能验证
下一篇: 国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
OIDCAT
博客等级 码龄8年 163粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值