找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6245|回复: 0

ICA协议外设数据流原理分析

[复制链接]

238

主题

329

帖子

2119

积分

超级版主

Rank: 8Rank: 8

积分
2119
QQ
发表于 2016-3-17 10:15:26 | 显示全部楼层 |阅读模式
本帖最后由 xiaoyu 于 2016-3-17 10:48 编辑

IMG_6355.JPG

VM+TC驱动数据流与物理PC数据流对比图:
IMG_6354.JPG
数据流分析:
1、 在应用层发送命令请求,比如打印一行字符;
2、 应用层的命令向安装在VM上的驱动层转发命令与数据,驱动层对命令与数据进行分析,然后输出通过OS驱动端口的数据与命令。如果没在VM上安装相应的驱动,数据流到此为此就中断了;
3、 第三步在VM上与在实体PC上就产生了区别:首先,如果是在实体机上,驱动就直接通过OS层的接口对实体的接口进行驱动,指挥打印机打印出相关的字符;但是在VM上安装了ICA相关模块后,ICA模块会截取相应的数据命令,然后将其通过ICA协议的封装,通过网络向外地人发送;
4、 ICA数据通过IP通道向特定IP的TC传输;
5、 TC上会安装ICA模块,ICA模块收到VM通过IP走来的ICA数据后,会将其反向解释,解码出相应的数据与命令,然后通过OS向特定的端口发送。
6、 外设收到相应的命令与数据,打印出相应的字符。

问题点分析:
首先,一个兼容性好的虚拟平台就要求在不改动驱动的情况下,实现TC+VM的正常驱动。对比物理PC与VM的驱动区别,可以清晰地看出,对于物理PC而言,设备驱动层数据1与设备驱动层数据2是同一个数据;这样就可以推理出在VM上,要想驱动正常工作,那么设备驱动层数据1与设备驱动层数据2也要一致;
同时两者间还有一个差异就是最终的OS层不一样,物理PC上的是PC的OS层,而虚拟化后的是TC上的OS层。

驱动异常原因:
由上面分析可知,驱动异常的原因就是
Ø 在TC+VM模式下,驱动层与OS层的中间加入了③④⑤这三步,这三步也就是典型的编码,传输,解码
Ø TC上OS层与物理PC的OS层不一致,异常接口不兼容
由上面两方面异常的分析可以知道,
第一个问题点主要就是思杰的ICA模块,思杰的ICA模块截取应用驱动层的数据,在其中进行封装后发送到TC,然后再在TC上进行解码送给TC上的OS,这样实现间接的驱动。
所以首先思杰从驱动层截取的信息全不全是第一个问题点,比如说驱动层调用系统的某个命令,而思杰忽略了对这个命令的截取,那么很显然就会造成到达TC的OS上的数据的丢失。
再次,思杰将截取到的信息进行ICA封装后进行传输,然后在TC端进行接收这一过程也是一个问题点,这涉及到数据能不能完整地进行传输到TC端。如果传输过程因为编解码的问题造成了数据的丢失,很显然也会造成驱动的异常。
最后,在TC端接收到ICA协议的数据后,进行解码得到了正确的要向OS发送的数据,也并不能保证驱动一定是正常的,因为TC上的OS层与物理PC上的OS层也是有差异的,如果两者接口不兼容,也会造成驱动的异常。
兼容性测试思想:
有了上面的异常点分析后,下面就可以针对异常点进行测试分析,下面有两种测试手段:
1、 最简单的做法就是将这一过程当成一个黑盒,然后将每一个容易出问题的点模拟出数据做黑盒测试。比如说串口传输,经过调研我们可以得出串口传输有以下特点:
工作模式:
1、全双工异步模式;
2、半双工同步主控模式;
3、半双工同步从动模式;
收发模式:
1、中断模式;
2、查询模式;
数据位:
1、8位;
2、9位;
波特率:
300,1200,2400,4800,9600,19200,38400,57600,115200
1、 那么针对每一个特点我们就可以在VM上写一个上位机程序,然后在TC上进行接收(可以直接插一个PC接收),两者进行交互。如果遍历各种情况VM+TC模式都可以很好地支持的话,那么我们就有理由认为这对串口驱动来说是兼容的。
2、第二种方法就是在数据流的过程中针对各个点进行数据的测试,比如说直接从驱动发一个数据,然后观看ICA截取了哪些数据进行封装发送,然后再在TC端观察ICA模块接收到的数据,最后观察发送给OS的数据。这样一步步下来就可以知道中间哪个模块出了问题,解决问题起来也非常容易啦。
难点:
1。需要工具的支撑,ICA协议是非开源的协议,要有相关的工具支持才可以观察到ICA的相关数据流。
2。要对OS的接口非常熟悉,这样才可以知道传到OS上的数据的意义。
3、要对驱动比较熟悉,这样才可以知道驱动与OS的交互情况。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表