赞
踩
USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device之间交换以太网帧。这些以太网帧可以传输在通信网络上传输的IPv4或IPv6数据报。NCM主要用于高速网络场景下比如HSPA和LTE数据服务。NCM协议规范基于ECM(Ethernet Control Model )改进而来,支持了更高的数据率。
ECM和NCM都适用于IEEE 802.3类型的以太网功能,可以将IP流量传输到外部网络。ECM是为USB全速设备设计的,特别是支持docsis 1.0电缆调制解调器。尽管ECM功能完备,但它在吞吐量或效率上不能很好地扩展到更高的USB速度和更高的网络速度。NCM借鉴了ECM实现中获得的经验,调整了数据传输协议,使它效率更加高。
使用NCM的主要优点在于它在单个USB批量传输中传输多个数据报的方法。除了减少中断开销之外,NCM规范还允许数据的发送方在程序中设置数据报大小。
NCM功能由NCM通信接口和NCM数据接口实现。NCM通信接口主要用于配置和管理组网功能。NCM数据接口用于传输数据,使用该接口定义的端点。
主机驱动与NCM功能设备之间的逻辑连接、控制连接和数据连接示意图
NCM允许设备和主机使用一个USB传输有效地传输一个或多个以太网帧。USB传输被格式化为NCM传输块(NTB)。
有两种NTB格式:NTB-16和NTB-32。前者用来表示长度小于64K的NTB,后者用来表示不超过4GB的NTB。
https://download.csdn.net/download/qq_36201603/86448967
1.开发板设置
首先关闭USB的host功能,打开usb gadget功能。
进入到USB gadget support,打开USB Peripheral Controller,Anyka usb device Port, udc driver support(usb-otg)对应平台的UDC设备控制,让USB控制器运行在device模式。
配置function为NCM,可手动link,也可以setprop通过sys.usb.config属性等方式调用RC文件来生效
配置IP地址,启动网卡
- // 切换为device模式
- echo peripheral > /sys/devices/platform/usb0/dwc3_mode
-
- //查看功能函数
- ls -l /config/usb_gadget/g1/configs/b.1
- -rw-r--r-- 1 root root 4096 1970-01-01 08:00 MaxPower
- -rw-r--r-- 1 root root 4096 2022-07-18 01:42 bmAttributes
- lrwxrwxrwx 1 root root 0 2022-07-18 01:42 f1 -> ../../../../usb_gadget/g1/functions/ffs.ncm
- drwxr-xr-x 3 root root 0 1970-01-01 08:00 strings
-
- //开启网卡设置IP地址
- ifconfig usb0 10.1.9.101 up
连接电脑可在设备管理器查看usbncm网卡设备
2.主机端设置
win11配置该网卡地址:10.1.9.33 设置 USB 网卡的 IP 地址和设备的 usb0 的 IP 地址在同一网段
网关:10.1.9.101 网关地址为开发板的USB IP地址
主机端可以使用Windows,linux,也可以使用开发板
netsh interface ipv4 add address name="以太网 3" 10.1.9.33 255.255.255.0 10.1.9.101
问题1:
使用开发板直接ping主机无法ping通
指定网卡可以ping通,应该是路由策略问题,需要设置路由策略
- console:/ # ping -I usb0 10.1.9.33 //指定网卡可以ping通 //应该是路由策略问题
- PING 10.1.9.33 (10.1.9.33) from 10.1.9.101 usb0: 56(84) bytes of data.
- 64 bytes from 10.1.9.33: icmp_seq=1 ttl=128 time=1.35 ms
- 64 bytes from 10.1.9.33: icmp_seq=2 ttl=128 time=1.56 ms
- 64 bytes from 10.1.9.33: icmp_seq=3 ttl=128 time=1.68 ms
- 64 bytes from 10.1.9.33: icmp_seq=4 ttl=128 time=1.88 ms
- 64 bytes from 10.1.9.33: icmp_seq=5 ttl=128 time=1.81 ms
-
- console:/ ip route
- 10.1.9.0/24 dev usb0 proto kernel scope link src 10.1.9.101
- console:/ ip rule
- 0: from all lookup local
- 10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system
- 10500: from all iif lo oif dummy0 uidrange 0-0 lookup dummy0
- 13000: from all fwmark 0x10063/0x1ffff iif lo lookup local_network
- 14000: from all iif lo oif dummy0 lookup dummy0
- 15000: from all fwmark 0x0/0x10000 lookup legacy_system
- 16000: from all fwmark 0x0/0x10000 lookup legacy_network
- 17000: from all fwmark 0x0/0x10000 lookup local_network
- 32000: from all unreachable
- console:/ ip rule add from all lookup main pref 9000
之后就可以ping通了
windows需要下载iperf3 工具
- C:\Windows\system32>iperf3 -s
- -----------------------------------------------------------
- Server listening on 5201
- -----------------------------------------------------------
开发板自带
- console:/ # which iperf3 //查看iperf3所在路径
- /system/bin/iperf3
-
- console:/ # iperf3 -s //Server端开启iperf的服务器模式
- -----------------------------------------------------------
- Server listening on 5201
- -------------------------------
-
- console:/ # iperf3 -c 10.1.9.33
iperf3: error
iperf3: error - unable to create a new stream: No such file or directory
根目录下没有tmp,也无法手动挂载
android/external/iperf3/src/iperf_api.c
- char* tempdir = getenv("TMPDIR");
- if (tempdir == 0){
- tempdir = getenv("TEMP");
- }
- if (tempdir == 0){
- tempdir = getenv("TMP");
- }
- if (tempdir == 0){
- tempdir = "/tmp";
-
-
- console:/ # export TMP=/data
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。