NCM介绍

1 功能

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数据接口用于传输数据,使用该接口定义的端点。

2 协议层次

主机驱动与NCM功能设备之间的逻辑连接、控制连接和数据连接示意图

3 数据传输

NCM允许设备和主机使用一个USB传输有效地传输一个或多个以太网帧。USB传输被格式化为NCM传输块(NTB)。

有两种NTB格式:NTB-16和NTB-32。前者用来表示长度小于64K的NTB,后者用来表示不超过4GB的NTB。

https://download.csdn.net/download/qq_36201603/86448967

虚拟网卡配置和测试

1.开发板设置

  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 msconsole:/ 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通了

3.使用iperf3测试网络速度

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

USB ncm虚拟网卡相关推荐

  1. usb转虚拟网卡流程

    基本组网环境: PC(USB:运行rndis协议)-------------(rndis协议-lwip-ethernetif)芯片板卡 流程框图如下:

  2. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

    STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一.简介   本文基于stm32 Rndis实例,github开源, 使用STM32F407单板.结合协 ...

  3. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(usb hound抓包完整数据流分析)

    一.简介   抓包工具:usb hound,本例使用安卓手机作为device, 使用RNDIS功能连接电脑虚拟网卡.抓取完整数据流包按流程进行分析.数据流程熟悉之后,查看stm32或者其他厂家的USB ...

  4. win10下安装华为Atals USB虚拟网卡驱动

    1. 用USB连接电脑和HUAWEI Atlas 200 进入设备管理器,查看设备驱动安装情况 2. 安装驱动 (1) 在RNDIS上点击右键,选择更新驱动程序 (2) 接下来选择浏览我的电脑以查找驱 ...

  5. 安霸S5L通过usb虚拟网卡共享网络功能

    之前在安霸S5L平台做过项目开发,掌握了一些比较有用的开发调试手段,为了避免忘记,在此记录一下安霸S5L平台通过usb共享网络的方法. 1.命令行中输入如下命令 modprobe ehci-hcd m ...

  6. LINUX驱动开发(三)USB虚拟网卡

    1. 简述 之前见过其他项目组的开发板,发现他们没有网口,但是可以通过IP进行ssh连接和scp文件传输到开发板,百度发现他们用的是USB虚拟网卡,于是我在我的开发板进行测试. 主机:windows ...

  7. 让Linux支持usb虚拟网卡。

    介绍: Usb作为device端插入pc,在pc中会出现对用的usb虚拟网卡,可以像普通网卡一样传递数据,socket编程. 让平台支持usb虚拟网卡,需要Linux内核支持UDC(usb 设备控制器 ...

  8. ibm服务器usb虚拟网卡,山石虚拟防火墙安装步骤

    山石虚拟防火墙,可以安装在vmware workstation上,非常适合动手操作实践.做实验等,非常好用. 前提也非常容易,电脑支持64位,内存最小4G. 山石虚拟防火墙桥接在物理网卡上,虚拟机和虚 ...

  9. 全志A33-USB虚拟网卡的配置与使用

    开发环境 开发板:A33-Vstar 开发板系统:Linux USB网卡:三星S4.华为P8(USB共享网络) -------------------------------------------- ...

最新文章

  1. Java基础知识强化49:10个实用的但偏执的Java编程技术
  2. Windows 8 Hello World
  3. 多线程与高并发(五):强软弱虚四种引用以及ThreadLocal的原理与源码
  4. @codeforces - 1096G@ Lucky Tickets
  5. Linux 命令之 iostat 命令-监视系统输入输出设备和 cpu 的使用情况
  6. Ajax学习总结+案例
  7. extjs 月份选择控件_Ext DateField控件 - 只选择年月
  8. android程序导入虚拟机,android项目打包成apk应用程序后部署到虚拟机上测试
  9. java 服务器 时间_java 获取服务器的时间,年月日时分秒
  10. vue中cookie的使用——将cookie放在请求头header中
  11. 蓝桥杯 ADV-112 算法提高 c++_ch02_01
  12. 【SQL】CONNECT BY 层次化查询
  13. osea/ Overview 概述
  14. python+Django+test 测试数据库生成报错
  15. unity 使物体跟随路径点自动移动位置 插值旋转
  16. # 2021-01-13 #「Docker Compose」- 在 CI/CD 中,分离 docker-compose build 与 docker-compose up 指令
  17. CSS:N种使用CSS 绘制三角形的方法
  18. A Survey: Visual Place Recognition 视觉场景识别的一篇调研
  19. Excel 2010 SQL应用016 降序排列
  20. 麦当劳宣布20年来最大规模收购 提高服务智能化

热门文章

  1. matlab行星运动轨迹仿真动画,利用Matlab可视化功能实现微分方程求解行星运动轨迹...
  2. android棉花糖,清甜棉花糖:安卓M/Android 6.0上手体验评测
  3. linux怎么全局搜索,汇总Linux命令 --全局搜索
  4. 多级弹出菜单jQuery插件ZoneMenu
  5. 实操演示 | 如何将示波器波形保存到U盘
  6. 中国互联网的巨头们,为何敢“大数据杀熟”?
  7. 玩客云pc端_玩客云下载 玩客云电脑版下载
  8. SkyWalking告警
  9. IP地址为 140.111.0.0 的B类网络,若要切割为9个子网,而且都要 连上Internet,请问子网掩码设为
  10. 本地OCR文字识别DLL/本地通用验证码识别DLL/通用滑块识别/文字点选/图标点选/本地识别DLL