WinCE USB驱动架构及术语明析

news2024/12/23 13:03:38

一、层式驱动的概念
WinCE驱动多为层式驱动,分为MDD和PDD两层。
MDD包含通用的驱动代码,向操作系统提供了驱动接口,该层代码调用PDD功能访问硬件。
PDD部分包含与硬件平台相关的特殊代码,不具有通用性。

之所以要分层,是为了简化驱动的开发,并提高代码的移植性。举个例子,当我们需要移植到另一个硬件平台的时候,驱动不需要全部重写,MDD部分不需要改变,只需要根据硬件的特点修改PDD部分即可。

二、USB驱动架构
在WinCE中做USB相关的东西,首先要弄清一些概念,这非常关键。

1. HostFunction
首先要知道USB是主从结构的。拿PC和手机来说,PC端是主端,叫做Host,手机是从端,通常叫做Client。但是在WinCE中这个术语发生了变化,主端还是叫Host,而从端叫做Function。因此对应的驱动分别叫做USB Host Driver及USB Function Driver。这里要记住了Host与Function对应,而不是Client,Client在后面会提到。

2. ControllerClient
拿WinCE设备来说,它不像U盘那样功能单一,实质上就是一个Mass Storage设备,WinCE设备跟PC用USB线连接时可以表现为多种形式,可以是一种大容量存储器(Mass Storage),还可以表现为一个网卡(RNDIS),还可以表现成一个串口设备(Serial Class),所以需要一个控制系统,WinCE把这部分分离了出来,做成一层驱动,叫做Controller(控制器),由该层驱动来控制WinCE设备到底表现成一种什么形态。

然后,在Controller上层是Client层,常用的三大类:Mass Storage、RNDIS、Serial。当WinCE设备需要表现成哪种形态,就由Controller驱动转换(卸载旧Client、加载新Client)。

前面说了设备端叫做Function,所以全称分别是:USB Function Controller Driver、USB Function Client Driver。

实际上Host端也是有Controller层的,这里没研究,(因为Host端驱动(PC端)微软操作系统都写好了),猜测当设备端表现出不同形式时,PC端也要表现出不同的形式与之对应,所以也需要有控制器。

3. 由此一来,USB驱动架构就出来了,见下图。


4. 前面说过有的WinCE驱动分为PDD、MDD两部分,这里USB Function Controller Driver便是如此架构。MDD部分微软已实现,拿windows mobile来说,源码E:\wm615\PUBLIC\COMMON\OAK\DRIVERS\USBFN\CONTROLLER\MDD   一般硬件的BSP提供商负责提供PDD部分,Controller驱动是针对设备上USB总线的。

USB Function Client Driver分为:Mass Storage、RNDIS、Serial,微软也已经实现。
源码在 E:\wm615\PUBLIC\COMMON\OAK\DRIVERS\USBFN\CLASS下。

5. WinCE 5.0及对应的windows mobile上都没有提供将USB Client加载成Mass Storage形式(可以把外存卡比如TF卡在PC上加载成一个移动磁盘,就像U盘一样)的功能,而只在windows mobile 上提供了一个” USB 连接到PC“的设置,用于RNDIS与Serial切换。因此市面上有专门针对这个功能的软件,比如WM5Storage、Resco公司的CardExport。如果要做类似这个功能的开发,理解以上内容很关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

050-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

050-WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒 #知识点: 1、文件包含-原理&分类&危害-LFI&RFI 2、文件包含-利用-黑白盒&无文件&伪协议 演示案例: ➢文件包含-原理&分类&am…

C语言从入门到精通 第十一章(文件操作)

写在前面: 本系列专栏主要介绍C语言的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程。除了参考下面的链接教程以外,笔者还参考了其它的一些C语言教材,笔者认为重要的部分大多都会用粗体标注&#xf…

C++ Qt开发:QFileSystemModel文件管理组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器…

HelpLook 和 confluence:创建知识库我选HelpLook

企业要想快速创建知识库,最好的方法就是利用好工具。而市面上创建知识库的平台多而繁杂,无法在最快时间内判断哪一个是最适合企业解决问题的。HelpLook和confluence功能相似,多数人无法判断并做出最佳选择,今天就跟着LookLook同学…

1688商品详情数据丨工厂详情数据丨店铺详情数据

1688商品详情数据、工厂详情数据以及店铺详情数据是商家在阿里巴巴1688平台上进行运营和决策的重要参考。这些数据涵盖了商品的详细信息、工厂的生产能力和信誉情况,以及店铺的经营状况和口碑评价,为商家提供了全方位的市场洞察和竞争优势。 请求示例&a…

Flutter学习9 - http 中 get/post 请求示例

1、配置 http pubspec.yaml dependencies:http: ^0.13.4flutter:sdk: flutterhttp 库最新插件版本查看:https://pub.dev/packages/http不一定要用最新版本 http,要使用项目所能支持的版本 .dart import package:http/http.dart as http;2、示例 &a…

基于UDP实现直播间聊天的功能

需求:软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责:1.接收用户的昵称2.接收用户输入的信息,能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责:1.对所有加入直播间的用…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目:基于uniapp cli的微信小程序老项目 问题:git拉取代码,npm安装包时就报错; cnpm能安装成功包,运行报错 三种方法尝试解决: 更改代码,typeof pathstring的话,才走path.replace…

mysql的语法总结2

命令: mysql -u 用户名 -p mysql登录 命令:create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型; 操作类型可以有以下的操作: 添加列&#x…

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过…

20个Python函数程序实例

前面介绍的函数太简单了: 以下是 20 个不同的 Python 函数实例 下面深入一点点: 以下是20个稍微深入一点的,使用Python语言定义并调用函数的示例程序: 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

WPF Border控件 基本使用

Border 基本使用 1单线效果 代码&#xff1a; <Border Grid.Row"0" BorderThickness"0,0,0,1" BorderBrush"Red" /> 说明&#xff1a; BorderThickness"0,0,0,1" 可以分别设置四条边&#xff0c;顺序是&#xff1a;左 上 右…

【微信小程序】基本语法

目录 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 二、事件冒泡和事件捕获 三、生命周期 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 1、列表渲染(wx-for、block 改变默认wx:for item等) <view> {{msg}} </view> //渲染跟普通vu…

云计算项目十:ES集群安装|部署kibana

ES集群安装 部署ES集群&#xff0c;用于ELK日志分析平台的构建 es-0001 主机更改 /etc/hosts [rootes-0001 ~]# vim /etc/hosts 192.168.1.71 es-0001 192.168.1.72 es-0002 192.168.1.73 es-0003 192.168.1.74 kibana 192.168.1.75 logstash # 将最新的/etc/hosts配置文件更…

Python绘图-12地理数据可视化

Matplotlib 自 带 4 类别 地理投影&#xff1a; Aitoff, Hammer, Mollweide 及 Lambert 投影&#xff0c;可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影 12.1.1图像呈现 12.1.2绘图代码 import numpy as np # 导入numpy库&#xff0c;用于…

2024年大语言模型的微调

一个LLM的生命周期包含多个步骤&#xff0c;下面将讨论这个周期中最活跃、最密集的部分之一 -- fine-tuning(微调)过程。 LLM的生命周期 下面展示了LLM的生命周期&#xff1a; 愿景和范围&#xff1a;首先需要定义项目的愿景&#xff0c;你想让你的LLM作为一个更加通用的工具…

双体系Java学习之关键字,标识符以及命名规范

刚开学&#xff0c;然后之前的课程暂时停在了多态&#xff0c;接下来开始跟着学校的步伐重新开始学一下&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 之前的课程也会找个时间补起来的&#xff0c;谢谢大家&#xff01; 关键字 标识符 命名规范

STM 32 HAL库 内部FLash读写调试的问题

问题1&#xff1a;STM32G0 系列 256KB内部FLash大小&#xff0c;无法读写 分析&#xff1a;从STM32F103C8 移植过来的Flash操作代码&#xff0c;发现无法进行读写&#xff0c;返回 HAL_ERROR 错误&#xff0c;随后&#xff0c;检查在写之前是否擦除成功&#xff0c;检查代码发…

Oracle VM VirtualBox 安装完Ubuntu系统后一直提示安装Ubuntu

是因为存储设置有问题&#xff0c;把Ubuntu镜像添加进去了,移除后重启虚拟机就不会提示了 以下是配置的移除后的界面。