USB ncm虚拟网卡
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.开发板设置
- 首先关闭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虚拟网卡的更多相关文章
- 二十、网卡框架分析、虚拟网卡驱动和DM9621驱动分析
一.网络设备驱动的结构 网卡设备不同于字符设备和块设备, 网络设备并不对应于/dev目录下的文件,它存放在/sys/class/net目录下. Linux系统对网络设备驱动定义了四个层次: 1. 网络 ...
- USB NCM介绍
1 功能概述 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device ...
- 删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡
Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲 ...
- 【强烈推荐】利用NAT、Host-Only双虚拟网卡,实现Virtual Box中CentOS6.3联网
问题背景: 先前都是在Virtual Box中以“网络共享”方式,让里面的Linux虚拟机Host-Only方式联网,参考如下: Virtual Box下配置Host-Only联网方式详解 但最近被公 ...
- C#如何获取物理网卡,虚拟网卡,以及无线网卡
就不废话了,直接上代码 /// <summary></summary> /// 显示本机各网卡的详细信息 /// <summary></summary> ...
- Ubuntu 14.10 创建虚拟网卡实现桥接网络
目标需求:在Ubuntu主机创建一张虚拟网卡,使得搭建在VirtualBox中的其他主机能借助虚拟网卡构建的局域网进行相互间的通讯 步骤一:准备工具包 安装 uml-utilities 以及 brid ...
- CentOS设置虚拟网卡做NAT方式和Bridge方式桥接
CentOS设置虚拟网卡做NAT方式和Bridge方式桥接 http://www.centoscn.com/CentOS/config/2015/0225/4736.html 摘要:KVM虚拟机网络配 ...
- 通过桥接虚拟网卡使VMWare和宿主机实现双向通讯
0.为什么选择虚拟网卡和桥接模式 首先虚拟机网络设置为NAT,虚拟机实现上网是很方便的,但是宿主机访问虚拟机就比较麻烦了(需要单独配置端口转发),桥接就能很好的解决这个问题,桥接模式会把虚拟机当做宿主 ...
- 解决vmware安装 win7 后 没有虚拟网卡驱动 不能上网的问题
项目需要用到win7 32位系统,于是装个虚拟机,换了好几个系统资源,都是没有网卡驱动, XP 2003 都能上网唯独WIN7 不行,安装vmware tools也不管用,终于找到了这个东西.vmwa ...
- 【已解决】Vmware无法创建虚拟网卡的问题
最近因为各种需要,要在虚拟机里使用桥接方式连接.但是不管怎么操作,都无法添加虚拟网卡.连续好多天需要用到桥接上网,今儿多方搜索,找到了解决方案. 参考资料:http://tieba.baidu.com ...
随机推荐
- 解决Win平台VSCode中Python在控制台输出中文乱码的问题
在菜单Debug->Open Configurations,打开launch.json,新增如下粉红色字符内容: { "configurations": [ { " ...
- C# 12 新增功能实操!
前言 今天咱们一起来探索并实践 C# 12 引入的全新功能! C#/.NET该如何自学入门? 注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK ...
- 全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type
全网最适合入门的面向对象编程教程:31 Python 的内置数据类型-对象 Object 和类型 Type 摘要: Python 中的对象和类型是一个非常重要的概念.在 Python 中,一切都是对象 ...
- jax中对单步操作的缓存对性能造成的影响
代码: import jax.numpy as jnp from jax import grad, jit, vmap from jax import random def selu(x, alpha ...
- VScode调试C++工程
相关: Linux环境下配置vscode的C/C++编译环境 本文主要参考: https://zhuanlan.zhihu.com/p/385276301 ====================== ...
- PHPExcel 使用学习
基本实现步骤: <?php require "/PHPExcel/PHPExcel.php";//引入PHPExcel $objPHPExcel = new PHPExcel ...
- JDBC Vertica Source Connector 使用文档
支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取 ...
- 数据结构 分块 & 莫队
分块 一种优化暴力的思想. 通常是将原数据划分成适当块(一般为 \(\sqrt{n}\)),对每块数据进行预处理,进而达到比暴力更优的时间复杂度. 划分 确定块长后,一般需要开两个数组存储每一块的右边 ...
- 七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
教程简介 EasySQLite是一个七天.NET 8操作SQLite入门到实战详细教程(包含选型.开发.发布.部署)! 什么是SQLite? SQLite 是一个软件库,实现了自给自足的.无服务器的. ...
- 深入理解 PHP 高性能框架 Workerman 守护进程原理
大家好,我是码农先森. 守护进程顾名思义就是能够在后台一直运行的进程,不会霸占用户的会话终端,脱离了终端的控制.相信朋友们对这东西都不陌生了吧?如果连这个概念都还不能理解的话,建议回炉重造多看看 Li ...