SylixOS USB虚拟网卡框架

1. USB子系统简介

1.1      USB简介

USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔康柏、IBM、Microsoft等多家公司联合提出的。

1.2      USB虚拟网卡框架

1.2.1   普通网卡与USB网卡框架对比

如图 11所示,普通网卡驱动与USB网卡驱动相比最大的区别是,USB网卡把普通的物理硬件换成了USB的物理硬件。

图 11 USB网卡与普通网卡对比图

1.2.2   USB虚拟网卡框架

如图 12所示,在SylixOS中,USB网卡框架中网卡驱动可大致分为4层分别为USB网卡驱动层、USB协议层、Gadget层和UDC层。

图 12 SylixOS USB虚拟网卡框架

USB网卡驱动层:服务对象是网络协议栈(TCP/IP或者LWIP)用来接收或发送网络报文。

USB协议层:从USB网卡驱动层接收网络报文加工生成对应的USB报文或者,从UDC层接收USB报文转换成网络报文。

Gadget层:完成的工作是绑定UDC层和USB协议层,注册绑定相关的回调函数,此层功能类似于Linux下的Platform功能。是为了去除耦合便于移植和代码复用。

UDC层:配置USB寄存器来实现硬件传输功能。

2. SylixOS虚拟网卡数据流

2.1      数据流整体框架

USB数据在传输的过程中会经过如图 21所示中的相关代码层。数据每经过一个代码层,代码层会对数据进行加工处理。

图 21 USB虚拟网卡数据分层

2.2      数据流实例

如图 22所示,举一个数据传输的实例。上层应用要传输数据“123”(数据“123”称为原始数据),首先需要经过协议栈层。协议栈会把原始数据封装成网络报文继续向下传输。需要注意如果是普通网卡驱动最终传输的就是网络报文,但USB仍然需要对网络报文再次封装。网络报文经过USB协议层时,会根据安装好的驱动选择对应的USB驱动协议进行报文封装,把网络报文转换成USB报文。最终在USB上传输的是USB报文。发送的过程是对原始数据封装组包的过程,同理接收数据是对接收到的数据拆包解析的过程。有了这套机制,就可以保证数据可以正确传输。

图 22 数据流实例

时间: 2024-08-24 18:39:23

SylixOS USB虚拟网卡框架的相关文章

USB 虚拟串口简介

1. USB虚拟串口简介 USB虚拟串口属于USB通信设备类.在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口.在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT端点,用于数据的接收和发送,模拟串口的RX和TX线.另外USB控制器还提供中断IN端点,发送当前串口的状态,实现对串口传输的控制.串口设备的数据,由系统的串口采集,在芯片内完成USB包的封装,通过USB总线上传至主机,再由相应的串口应用程序进行处理.对用户来说,看到的是基于串口的数据采集和传输,而实

实现一个做双向NAT的虚拟网卡

问题描述与解决方案 还是老问题,Linux系统中通过iptables配置的NAT无法在双向通信环境中使用,你无法配置一条NAT规则实现对两个方向主动发起的流量做NAT,解决这个问题的方案有好几种: 1.配置两条NAT规则 iptables的NAT配置本身就是先match再执行一个target,因此一条规则只能表示一种转换策略,要想实现"来自x的数据包的源地址转换为y,去往y的数据包的目标地址转为x"这样的逻辑,必须使用两条规则.那么为何不使用两条规则呢?因为iptables的nat配置

IMX257虚拟网卡vnet驱动程序

20150419 IMX257虚拟网卡vnet驱动程序 2015-04-19 Lover雪儿 一.一个简单的虚拟网卡驱动 1 static struct net_device *vnet_dev; //定义一个网络设备结构体 2 3 4 static const struct net_device_ops virt_netdev_ops = { 5 .ndo_start_xmit = NULL, 6 }; 7 8 9 static int virt_net_init(void){ 10 11 /

AM335X的USB otg网卡(RNDIS /Ethernet Gadget)调试

重新编译内核(2.6.29)       2.6.29内核        Device Drivers ---> USB support --->   USB Gadget Support --->        其中 USB Peripheral Controller 选 S3C2410 USB Device Controller       然后再选一个内核自带的Gadget驱动程序来做演示,这里就选 Ethernet Gadget (with CDC Ethernet suppor

半截水晶头线接激活本地虚拟网卡

可有可无的小方法~ 很多人在用虚拟机的时候,有时虚拟网卡不够用,又没有可用网线插来激活本地网卡时,这时可以自制一个水晶头加半截网线(或者从水晶头还 能用的废掉的网线上截取下来如下图)来激活本地网卡,多增加一个可用虚拟网卡(虽然第一次在当时无法解决(^-^)) 制作方法:截取或制作成水晶头后,将线皮剥掉至漏出铜线,将线序颜色排列成T-568B的线序(如下图) 以10/100兆太网网卡为例的DTE类型接口引脚定义为(对应上图从左到右): 1-TX+Tranceive  Data+  (发信号+)  

Linux网络配置之虚拟网卡的配置(ubuntu)

关于图形界面的配置,我这里就不多介绍了,这个很简单.这里介绍的是如何通过修改配置文件来实现虚拟网卡. 首先介绍ubuntu(我这里使用的是ubuntu-16.04)下虚拟网卡的配置 1.先用ifconfig查看当前的网卡配置 ens33 Link encap:以太网 硬件地址 02:0c:29:c6:be:c7 inet6 地址: fe80::20c:29ef:fec6:bec7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:

虚拟网卡TUN/TAP 驱动程序设计原理

昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章,果断转载了,感谢作者,原文在这里:虚拟网卡TUN/TAP 驱动程序设计原理 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路. tun

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

最近因为各种需要,要在虚拟机里使用桥接方式连接.但是不管怎么操作,都无法添加虚拟网卡.连续好多天需要用到桥接上网,今儿多方搜索,找到了解决方案. 参考资料:http://tieba.baidu.com/p/3445621065 本文地址:http://www.cnblogs.com/kuoaidebb/p/4290906.html  /*这是为了防止暴力盗用的*/ windows8.1 装了360,并且用360优化了很多系统服务. vmware 10 可以用NAT上网,但无法将模式更改为桥接 设

vmware 虚拟机安装centos 本机没有出现VMnet0和VMnet8虚拟网卡的解决办法

没有出现虚拟网卡VMnet0和VMnet8的话,就关掉正在运行的centos ,然后安装如图所示操作即可,途中可能会被360阻挡,选择信任即可,或者关掉360安全卫士再进行操作 完成后打开虚拟机电源即可.