VDT (virtual device on tcp) 基于tcp通信的虚拟设备工具集

news/2024/5/17 18:51:05 标签: SylixOS, 虚拟设备, TCP

概要

VDT (virtual device on tcp) 基于tcp通信的虚拟设备工具集

  • DOT (device on tcp) 创建虚拟字符设备,通过tcp收发来读写。
  • DTT (device to tcp) 打开字符设备,通过tcp来读写。
  • NOD (net on device) 创建虚拟网卡设备,通过字符设备读写来收发。
  • NOT (net on tcp) 创建虚拟网卡设备,通过tcp来收发。
  • VH (virtual hub) 创建虚拟集线器,基于对文件(tcp,设备文件,普通文件)集的接收转发。
  • VS (virtual switch) 创建虚拟交换机,针对不同通信协议进行通信优化,减少无必要广播。

介绍

DOT (device on tcp)

在系统中创建一个字符设备,设备名可任意指定,对外提供一个TCP接口(客户端或服务端),设备读写和tcp收发联通透传。ioctl调用都是空操作,正常返回。类似windows上的USR-VCOM软件,USR-VCOM只针对串口设备,而dot可以是任意字符设备,也就兼容串口设备。dot只是按字节流模式打通了字符设备接口到tcp接口的收发通道,至于内容是串口数据还是ADC采集数据等全由应用层来决定和处理。

DTT (device to tcp)

打开一个字符设备文件(可以附加一些ioctl操作,如设置串口波特率),并创建一个TCP接口(客户端或服务端),将设备读写和tcp收发联通透传。类似windows上的TCP2Com软件。
dtt和dot有些相似,但并不相同,dtt并不创建设备文件,而是要打开设备文件(此设备可以是实体设备也可以是由dot虚拟的设备),如果设备文件不存在则会运行失败。打开设备时可以附加一些ioctl操作,如设置串口波特率等。dtt另一端也是tcp服务端或客户端,可以和dot的tcp端口或其他tcp端口对接。

NOD (net on device)

基于存在的字符设备创建新的网卡设备。字符设备可以是串口等实体设备,也可以是dot虚拟的设备。
就是创建一个网卡设备,底层实际是调用的是文件读写而不是网卡寄存器操作。
问:原理上是能实现这样一个网卡,可是这样的网卡性能也太差了,谁会用这样的网卡上网。
答:这个肯定是在特殊情况下才有意义有价值的。除了速度慢,其他都和普通网卡无异。比如一个板卡,没有网卡,只有一个串口命令行可操作,如果想多人同时操作那就需要多个命令行,可以通过多余的串口来实现这一功能,每个串口启动一个命令行任务,但这比较浪费串口资源,通用性易用性也较差。如果将一个串口实现一个虚拟网卡,应用层完全就可以通过网络来实现,可以创建多个telnet,也可以通过ftp传输文件。所有基于网络的应用、工具就立马可用了。在借助一个串口版的“交换机”就可以实现多块串口板卡的组网,应用层直接按照局域网的模型去开发。有网络就拥有全世界,而有串口就有网络,串口又能通过gpio模拟,那么一个计算机系统只要有两个多余的io口就能连接全世界。对于一些低端的硬件,就可以轻松实现高端的玩法。

NOT (net on tcp)

基于tcp客户端的虚拟网卡。和NOD类似,只是底层通信由设备文件变成socket通信,DOT+NOD也能实现同样的效果,但链路更长运行效率更低。NOD更倾向于通过非网卡物理接口实现实际的网络连接,而NOT能更方便的连接局域网内乃至广域网内其他主机,构建应用的“虚拟局域网”。注意,NOT的tcp端口只有客户端没有服务端模式。
问:既然有tcp,那就已经有网络了,为啥还要创建这样一个网卡?
答:为了组建虚拟网络。类似vpn,但这是一个简洁不安全的只适合实验室或测试的方案。实现和使用都非常简单,可以和串口网卡等其他工具组合使用。另一个目的就是方便虚拟网络和正式网络的路由转发。以便让虚拟网络接入真实的网络世界。

VH (virtual hub)

创建一个虚拟集线器,通过创建一个tcp服务器实现,可以同时连接多个客户端,每个客户端收到的数据都原样转发给其他客户端。
VH实现原理就是,构建一个设备文件文件集合,通过select接收文件可读数据,然后转发给其他文件。更进一步思考,类Unix系统下一切皆文件,tcp连接是文件,设备文件和普通文件更是文件,所以除tcp客户端可接入VH外,设备文件也可以直接接入VH。所以NOD和NOT都可以接入VH,构建一个虚拟的”以太网局域网“,只是连接NOD必须是本机的设备,而NOT可以是本机也可以是外部主机的tcp客户端。
再想想,还能干啥?借助DOT或DTT可以实现设备到设备的连接,这是点到点的,比如两个设备通过串口连接或通过CAN口连接。借助虚拟的集线器工具,就可以实现多设备总线试的连接。对于本机的设备可以直接将设备接入HUB,也可以通过DTT先转为tcp再接入HUB,对于其他机器的设备则只能通过DTT方式接入。
如果将HUB的服务端口,通过内网穿透暴露到互联网,那不同局域网的设备也可以通过DTT方式接入。
更进一步,接入HUB的可以不仅是设备,虚拟设备,也可以是一个应用程序,比如一个接入的tcp客户端应用对收到的内容进行记录和监视。
这样,一个VH其实就可以构建一个"局域网",为接入的设备,虚拟设备,网络应用程序等广播/共享信息。
基于此"局域网"又可以模拟各种网络或总线。比如模拟一个以太网的局域网,CAN的局域网,485的局域网。

VS (virtual switch)

SWITCH(交换机)和HUB(集线器)的功能类似,都是用于多个节点的连接和组网,让局域网内的端口互联互通。但是集线器是无数据格式要求的,是全域广播,无差别转发的,需要接收端进行过滤。HUB实现简单,通用性好,但性能低,尤其在节点较多,非广播内容内容较多时,自己和节点大量带宽和算力都消耗在无实际意义的收发和过滤操作上了。
交换机是针对有特定通信格式,每个端口只能连接一个节点,每次发送的数据得是一个完整的帧,帧内要有源地址和目标地址,收到的帧只会转发给目标节点,找不到目标节点才进行广播。交换机实现复杂,针对特定通信模型实现,不同通信模式不能兼容共用,但整体通信性能高。如以太网交换机,CAN交换机,485交换机。
VH的实现是基于select单线程板双工收发的,而VS是多线程并行收发的,所以VS耗费资源更多性能也更好。

用法

因为tcp是标准的网络接口,可以不限操作系统不限编程语言,这就可以让这组工具和其他系统其他语言的各种工具进行搭配使用。所以这些工具可以单独使用,也可以组合使用,也可以结合windows端的工具组合使用。再借助内网穿透,又可以超越局域网的限制进行远程操作。

  1. Git仓库下载最新工程源码,
  2. 导入工作空间编译目标板体系结构的内核模块vdt.ko
  3. 部署和安装vdt.ko内核模块 (insmod /lib/modules/vdt.ko)此时为系统增加了6条内核命令。
  4. 根据实际需求调用相应命令

本工具开发原始目的是解决项目在虚拟机下的仿真问题,但实际使用并不局限于虚拟机,在物理机上也是无差别的。

  • 用例1:某应用app调用了某字符设备dev,现在想搞清楚app对dev进行了哪些操作。
    此测试可以在虚拟机上进行,先用DOT命令创建dev同名设备,并开启本设备实时打印,然后启动app,查看控制台输出的dev调用过程和内容。
  • 用例2:某app要通过串口控制GPS单机,但现在没有GPS单机单机,调试app又需要有设备收发数据激励。
    此测试可以在虚拟机上进行,先用DOT命令创建dev同名设备,虚拟设备tcp端连接电脑网络调试助手,通过络调试助手查看app发送请求并返回应答数据。如果命令较复杂或有时限要去,可以用Python写一个GPS模拟器,用词模拟器替代络调试助手来和app对接仿真。
  • 用例3:物理机和上位机调测(通过串口通信),但物理机只有一台不够用,或者物理机只有串口更新程序太繁琐太慢影响效率。
    用虚拟机来替代物理机进行调测,DOT命令创建dev同名虚拟串口,win上也创建虚拟串口,两虚拟串口tcp连接,上位机挂win虚拟串口运行。虚拟机,想开几个开几个。
  • 用例4:还是物理机和上位机调测(通过串口通信),但物理机开发人员和上位机开发人员不在同一城市。
    类似用例3的操作,tcp连接借助下内网穿透即可。
  • 用例5:一个负责复杂系统,有20个设备单机和1个主机,主机要通过20路串口来操控这20个单机,现在是20个设备单机就绪了但主机还没就绪,也没有其他具备20路串口的主机,要调测主机上的app应用,如何进行?
    找4个具备5路串口的主机(具备网络功能),20个设备单机分别连接这4个主机的串口,4个主机连接在同一局域网,4个主机使用DTT命令将20路串口转化为tcp连接到app主机用DOT创建的20路虚拟串口上,app访问这20路虚拟串口来间接访问这20个设备单机。
  • 用例6:simulator下开启多个虚拟机,每个虚拟机都可个win系统ping通,但各自之间网络不通
    win系统下启动VS_NET服务,各虚拟机使用NOT命令创建虚拟网卡,配置各虚拟网卡的ip和mac地址保证不冲突,NOT的tcp客户端连接VS_NET服务,此时就建立了又虚拟网卡组成的局域网。可以进行ping命令测试。
  • 用例7:

后面慢慢补充吧 。。。。。。

基于tcp创建虚拟设备,基于虚拟设备创建虚拟网卡,基于虚拟网络再创建虚拟设备。。。可以玩套娃了

本版说明

2022.10.24 周一
本工具集源于某卫星项目测试实际需求,属于项目的副产物,部分功能早已完成并实用,近期进行了补充和整理,但功能和细节处理上还有很多不完善,也仅在虚拟机sparc平台下进行过测试和使用。
期望感兴趣的小伙伴们多多提供需求案例和bug提交。

博客文章

  • 远程串口命令行搭建(https://blog.csdn.net/ScilogyHunter/article/details/124482635)
  • 开启虚拟机第二串口命令行(https://blog.csdn.net/ScilogyHunter/article/details/124487887)
  • 使用SylixOS虚拟串口,实现系统串口自由(https://blog.csdn.net/ScilogyHunter/article/details/126240164)

说明文档和博客会不定期补充增加。


http://www.niftyadmin.cn/n/906.html

相关文章

基于STM32F469 discovery kit 开发板的开发1

目录基于STM32F469 discovery kit 开发板的开发开发板简介开发环境搭建安装st-link驱动基于STM32F469 discovery kit 开发板的开发 意法半导体推出的基于STM32F469 cpu的这款开发板,整合高性能的Cortex-M4处理器,其Chrom-ART Accelerator技术大大提升了…

TCP/IP协议

目录 1. 应用层 2. 传输层 2.1 UDP协议 2.2 TCP协议(*三次握手四次挥手重点!!!) 2.2.1 确认应答机制 2.2.2 超时重传 2.2.3 连接管理 2.2.4 滑动窗口 2.2.5 流量控制 2.2.6 拥塞控制 2.2.7 延迟应答 …

嵌入式开发--CubeMX使用入门教程

嵌入式开发–CubeMX使用入门教程 CubeMX简介 传统的单片机开发时,需要针对片上外设做各种初始化的工作,相当麻烦。 CubeMX是ST公司出品的一款图形化代码生成工具,通过图形化界面,可以非常直观的配置好各种片上外设,时…

渗透学习—靶场篇—墨者学院—SQL注入漏洞测试(参数加密)

文章目录总结打开靶场,发现在登录框下方有一个可以点击的地方: 此处,点击后我们就可以发现一个新的页面了!!然后我们在这个页面中呢,我们仔细观察以下url的特征,发现其是利用id xxx 进行查询的…

傅里叶变换+频域滤波

傅里叶变换频域滤波cv2.imread()基本参数介绍傅里叶变换什么是频域傅里叶变换的由来傅里叶变换算法 DFT, FFT灰度图这个博客记得看看 cv2.imread()基本参数介绍 Mat cv::imread(const String & filename, int flags IMREAD_COLOR) retval cv.imread(filename[, flags]…

Pytest+Unittest+Git+Jenkins企业级CICD自动化测试平台建设方案

随着持续集成的引入,项目中的自动化测试用例越来越多,每轮执行所消耗的时间也越来越久。 要提高自动化测试用例执行的效率,以下几点是需要考虑的根本点。 (1)公司项目的交付策略如何 首先,测试团队服务于…

改进YOLOv5系列:增加Swin-Transformer小目标检测头

💡统一使用 YOLOv5 代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含【Backbone特征主干】、【Neck特征融合】、【Head检测头】、【注意力机制】、【IoU损失函数】、【NMS】、【Loss…

Guitar Pro8最新版安装教程学吉他打谱必备工具

Guitar Pro以 GTP 结尾的曲谱文件都必须用 Guitar Pro 才能打开。Guitar Pro 凭借着其便利的制谱和读曲谱环境,在各大谱库论坛里都占据着一席之地,喜欢吉他的朋友一定略有耳闻。Guitar Pro 是 Windows 和 Mac OS 上可用的软件程序,允许所有音…