USB中网络配置

USB中典型类及子类:

类别

解释

子类

典型应用

IC芯片

备注

UVC

视频类

 

免驱USB摄像头

 

 

CDC

通讯类

RNDIS

 

 

 

ECM(p24)

免驱USB网卡

RTL8152B

 

EEM

 

 

 

......

 

 

 

 

        以前接触过UVC,今天接触了CDC-ECM原理上是一样的,定义一套标准协议主从机都遵守了就不需要额外的驱动程序。

        简单翻译(其实用Google的多一些)一下usbcdc11的第3.8.2关于CDC-ECM的章节。

 

3.8.2 Ethernet Networking Control Model

        以太网控制模型是用在主从设备间的以太网帧数据的交换。通信类接口用于配置和管理以太网程序,程序中包含的以太网控制模型子类码是通信类接口描述定义。

        数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。CRC校验和不能包含在以太网收发数据包中。检验失败的帧数据不能再发送到主机。这意味着设备必须能够缓冲至少一个完整的以太网帧数据。

 

 

        尽管USB虚拟网络接口通常一直保持连接状态,一些网络设备管理的要求,需要正确地初始化设备和主机网络堆栈两者。也可能是偶然的变化配置或状态,例如,增加组播过滤器。

        这是有效的通信类接口与通信类子类乙太网路控制模型的唯一一类特定的请求代码列于表10

 

 

 

Linux内核配置支持CDC-ECM

[python]  view plain copy
  1. Device Drivers  --->  
  2.     [*] Network device support  --->  
  3.         USB Network Adapters  --->  
  4.             <*> Multi-purpose USB Networking Framework  
  5.             -*-   CDC Ethernet support (smart devices such as cable modems)  


匹配CDC-ECM设备的LOG信息:

usb 1-1: new full speed USB device using s3c2410-ohci and address 3

usb 1-1: New USB device found, idVendor=0bda, idProduct=8152

usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

usb 1-1: Product: USB 10/100 LAN

usb 1-1: Manufacturer: Realtek

usb 1-1: SerialNumber: 00E04C36004F

usb 1-1: configuration #2 chosen from 2 choices

eth1: register 'cdc_ether' at usb-s3c24xx-1, CDC Ethernet Device, 00:e0:4c:36:00:4f

 

然后就完事了,它就是一个普通的网卡了。

 

        总结:ECM的驱动源码文件是drivers/net/usb/cdc_ether.c。不需要添加Vid Pid等等任何操作就可以使用。cdc_ether.c与传统的以太网芯片的驱动程序并不一样,并不是实现xxx_open(),xxx_stop(),xxx_tx(), xxx_hard_header(), xxx_get_stats, xxx_tx_timeout()而是实现了:usbnet_generic_cdc_bind(), usbnet_cdc_unbind(), usbnet_cdc_bind(), usbnet_cdc_status()4API

 

一种基于

USB 

通讯设备类协议

CDC

Communication Devices Class Specification

USB

不同的通讯设备接口,

其中的以太网控制模型

ECM(Ethernet Networking Control Model)

与以太网仿真模型

EEM

Ethernet Emulation 

Model

)可以将其虚拟为一个标准的以太网接口

[3][4]

。自从

USB CDC

规格发布以来,

国外的软硬件公司都使用

USB CDC

USB

上实现一些通讯接口的功能,如串口,

ISDN

ATM

,以太网等。

Microsoft 

WINXP

版本上内置了基于

CDC

RNDIS

动,使得在

WINXP

下可以无缝的连接基于

RNDIS 

USB 

以太网接口设备。

Linux

2.6

以后的版本就缺省支持基于

CDC

的以太网接口(

usbnet

)与串口。在

Linux

内核中,

usbnet

模块用于创建

USB

虚拟以太网设接口。创建成功后,这一虚拟网络

接口便可以如同标准网络接口一样被指定一个

IP

地址。

USB

电缆连接上后,

usbnet

模块便能使

USB

虚拟的以太网接口

ping

测其它

IP

地址,

甚至

“谈论”

DHCP

 HTTP

 

NFS

 telnet

 

ftp

[5]

。简言之,任何在实际的以太网接口上运行的应用将不折不

扣地在

USB

虚拟以太网接口上得到实现,因为它们不能分辨出其正在使用的是真实

的以太网硬件接口还是

USB

虚拟的以太网接口

参考:《基于USB+CDC的虚拟以太网接口研究与设计

<think>我们正在讨论Android 13系统中通过USB共享网络时设置DNS的方法。根据引用内容,我们可以从几个方面入手: 1. 引用[2]中提到在手机上设置DNS的命令:`setprop net.dns1 10.15.87.161`,但这是在root权限下直接设置系统属性。 2. 引用[3]中提到USB共享网络会创建usb0网络接口,并且IP地址在同一网段。 然而,在Android 13中,由于权限和安全限制,直接使用`setprop`可能不再适用(尤其是非root设备)。我们需要寻找适用于Android 13的方法。 根据Android开发文档,从Android 7.0(API 24)开始,系统对设置DNS的方式有所改变,推荐使用新的网络API。但USB网络共享(Tethering)的DNS设置通常由系统自动管理。如果我们想要自定义DNS,可能需要考虑以下途径: ### 方法1:通过开发者选项启用本地DNS解析(适用于Android 13) Android 9(Pie)及更高版本引入了“私有DNS”设置(设置->网络和互联网->私有DNS)。这个设置会影响所有网络连接,包括USB网络共享。因此,我们可以在USB网络共享开启前设置私有DNS。 步骤: 1. 打开设置 -> 网络和互联网 -> 私有DNS。 2. 选择“私有DNS提供商主机名”,然后输入DNS服务器的域名(例如:`dns.google`)或IP地址(例如:`8.8.8.8`)。 3. 开启USB网络共享。 注意:这种方法设置的DNS是全局的,会影响所有网络连接。 ### 方法2:通过代码设置(需要应用程序权限) 如果我们开发一个应用,可以使用`ConnectivityManager`的`setGlobalSetting`方法来设置DNS。但需要系统签名权限(`WRITE_SECURE_SETTINGS`)或通过adb授权。 例如,通过adb命令设置: ```shell adb shell settings put global private_dns_mode hostname adb shell settings put global private_dns_specifier dns.google ``` 或者: ```shell adb shell settings put global private_dns_mode off adb shell settings put global private_dns_specifier "" ``` 然后,再开启USB网络共享。 ### 方法3:在共享网络的目标设备上设置DNS(推荐) 当Android设备通过USB共享网络给电脑(如Ubuntu)时,我们可以在电脑端设置DNS。这样Android设备只充当网关,DNS解析由电脑完成。 在Ubuntu上,我们可以修改`/etc/resolv.conf`文件,或者使用NetworkManager设置。 例如,在Ubuntu中: 1. 打开网络设置,选择USB网络连接。 2. 点击配置(齿轮图标),进入IPv4设置。 3. 将自动获取DNS关闭,手动输入DNS服务器地址,如`8.8.8.8,8.8.4.4`。 ### 方法4:使用Root权限修改(不推荐,因为Android 13可能更严格) 如果设备已root,可以尝试: 1. 使用终端模拟器(如Termux)或ADB shell(需su)。 2. 执行命令: ```shell su setprop net.dns1 8.8.8.8 setprop net.dns2 8.8.4.4 ``` 或者修改`/system/etc/resolv.conf`(但注意Android通常不使用这个文件)或修改dhcpcd的配置。 然而,在Android 13中,由于安全策略,直接修改系统属性可能被限制。 ### 结论 对于普通用户,最简便的方法是使用方法1(设置私有DNS)或方法3(在连接的电脑上设置DNS)。对于开发者,可以通过代码控制,但需要系统权限。 注意:Android 13的DNS设置可能因设备制造商定制而有所不同。 ### 相关问题 1. 如何设置Android 13的私有DNS? 2. 在Android 13中,如何通过ADB设置私有DNS? 3. 在Ubuntu上如何为USB网络连接设置静态DNS? </think>### Android 13系统USB共享网络DNS设置方法 在Android 13系统中,设置USB网络共享的DNS主要有以下几种方法,根据设备权限和使用场景选择: #### 方法1:开发者模式设置(无需Root) 1. **启用开发者选项**:连续点击"设置 > 关于手机 > 版本号"7次激活 2. **打开USB调试**:开发者选项 → 启用"USB调试" 3. **ADB命令设置DNS**: ```bash adb shell settings put global private_dns_mode hostname adb shell settings put global private_dns_specifier dns_server_ip ``` 示例设置Google DNS: ```bash adb shell settings put global private_dns_specifier 8.8.8.8 ``` #### 方法2:通过配置文件修改(需Root权限) 1. 修改`/system/etc/resolv.conf`: ```bash su echo "nameserver 8.8.8.8" > /system/etc/resolv.conf echo "nameserver 8.8.4.4" >> /system/etc/resolv.conf chmod 644 /system/etc/resolv.conf ``` 2. 或修改dhcpcd配置: ```bash vi /system/etc/dhcpcd/dhcpcd.conf # 添加:static domain_name_servers=8.8.8.8 ``` #### 方法3:网络接口直接设置(USB共享连接后) 1. 连接USB共享后,在终端执行: ```bash su ndc resolver setifdns usb0 8.8.8.8 8.8.4.4 ndc resolver setdefaultif usb0 ``` 验证设置: ```bash getprop | grep dns ``` #### 方法4:目标设备设置(推荐) 在接收网络的电脑/设备上设置DNS更稳定: 1. **Windows**:网络设置 → USB以太网 → 手动设置DNS 2. **Linux**: ```bash sudo nmcli con mod usb0 ipv4.dns "8.8.8.8 8.8.4.4" sudo nmcli con up usb0 ``` ### 注意事项 1. Android 13强化了隐私保护,直接修改系统属性可能受限制 2. 设备重启后设置可能重置,持久化需修改系统文件或使用Magisk模块 3. 优先使用`private_dns_mode`全局设置(影响所有网络) 4. 使用`ping`和`nslookup`命令验证DNS生效: ```bash adb shell nslookup google.com ``` > 调试提示:通过`adb logcat | grep -i dns`查看DNS相关日志[^1],使用`netd`命令管理网络配置[^3] ### 相关问题 1. Android 13的私有DNS设置与USB共享网络有何关联? 2. 如何验证USB共享网络的DNS设置已生效? 3. 非Root设备有哪些替代方法设置自定义DNS? 4. Android 14在USB网络共享方面有哪些改进?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值