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。

虚拟网卡配置和测试

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 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通了

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. 二十、网卡框架分析、虚拟网卡驱动和DM9621驱动分析

    一.网络设备驱动的结构 网卡设备不同于字符设备和块设备, 网络设备并不对应于/dev目录下的文件,它存放在/sys/class/net目录下. Linux系统对网络设备驱动定义了四个层次: 1. 网络 ...

  2. USB NCM介绍

    ​1 功能概述 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device ...

  3. 删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡

    Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲 ...

  4. 【强烈推荐】利用NAT、Host-Only双虚拟网卡,实现Virtual Box中CentOS6.3联网

    问题背景: 先前都是在Virtual Box中以“网络共享”方式,让里面的Linux虚拟机Host-Only方式联网,参考如下: Virtual Box下配置Host-Only联网方式详解 但最近被公 ...

  5. C#如何获取物理网卡,虚拟网卡,以及无线网卡

    就不废话了,直接上代码 /// <summary></summary> /// 显示本机各网卡的详细信息 /// <summary></summary> ...

  6. Ubuntu 14.10 创建虚拟网卡实现桥接网络

    目标需求:在Ubuntu主机创建一张虚拟网卡,使得搭建在VirtualBox中的其他主机能借助虚拟网卡构建的局域网进行相互间的通讯 步骤一:准备工具包 安装 uml-utilities 以及 brid ...

  7. CentOS设置虚拟网卡做NAT方式和Bridge方式桥接

    CentOS设置虚拟网卡做NAT方式和Bridge方式桥接 http://www.centoscn.com/CentOS/config/2015/0225/4736.html 摘要:KVM虚拟机网络配 ...

  8. 通过桥接虚拟网卡使VMWare和宿主机实现双向通讯

    0.为什么选择虚拟网卡和桥接模式 首先虚拟机网络设置为NAT,虚拟机实现上网是很方便的,但是宿主机访问虚拟机就比较麻烦了(需要单独配置端口转发),桥接就能很好的解决这个问题,桥接模式会把虚拟机当做宿主 ...

  9. 解决vmware安装 win7 后 没有虚拟网卡驱动 不能上网的问题

    项目需要用到win7 32位系统,于是装个虚拟机,换了好几个系统资源,都是没有网卡驱动, XP 2003 都能上网唯独WIN7 不行,安装vmware tools也不管用,终于找到了这个东西.vmwa ...

  10. 【已解决】Vmware无法创建虚拟网卡的问题

    最近因为各种需要,要在虚拟机里使用桥接方式连接.但是不管怎么操作,都无法添加虚拟网卡.连续好多天需要用到桥接上网,今儿多方搜索,找到了解决方案. 参考资料:http://tieba.baidu.com ...

随机推荐

  1. 解决Win平台VSCode中Python在控制台输出中文乱码的问题

    在菜单Debug->Open Configurations,打开launch.json,新增如下粉红色字符内容: { "configurations": [ { " ...

  2. C# 12 新增功能实操!

    前言 今天咱们一起来探索并实践 C# 12 引入的全新功能! C#/.NET该如何自学入门? 注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK ...

  3. 全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

    全网最适合入门的面向对象编程教程:31 Python 的内置数据类型-对象 Object 和类型 Type 摘要: Python 中的对象和类型是一个非常重要的概念.在 Python 中,一切都是对象 ...

  4. jax中对单步操作的缓存对性能造成的影响

    代码: import jax.numpy as jnp from jax import grad, jit, vmap from jax import random def selu(x, alpha ...

  5. VScode调试C++工程

    相关: Linux环境下配置vscode的C/C++编译环境 本文主要参考: https://zhuanlan.zhihu.com/p/385276301 ====================== ...

  6. PHPExcel 使用学习

    基本实现步骤: <?php require "/PHPExcel/PHPExcel.php";//引入PHPExcel $objPHPExcel = new PHPExcel ...

  7. JDBC Vertica Source Connector 使用文档

    支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取 ...

  8. 数据结构 分块 & 莫队

    分块 一种优化暴力的思想. 通常是将原数据划分成适当块(一般为 \(\sqrt{n}\)),对每块数据进行预处理,进而达到比暴力更优的时间复杂度. 划分 确定块长后,一般需要开两个数组存储每一块的右边 ...

  9. 七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)

    教程简介 EasySQLite是一个七天.NET 8操作SQLite入门到实战详细教程(包含选型.开发.发布.部署)! 什么是SQLite? SQLite 是一个软件库,实现了自给自足的.无服务器的. ...

  10. 深入理解 PHP 高性能框架 Workerman 守护进程原理

    大家好,我是码农先森. 守护进程顾名思义就是能够在后台一直运行的进程,不会霸占用户的会话终端,脱离了终端的控制.相信朋友们对这东西都不陌生了吧?如果连这个概念都还不能理解的话,建议回炉重造多看看 Li ...