WinCE驱动开发流程
基于WinCE的流接口驱动程序开发
![基于WinCE的流接口驱动程序开发](https://img.taocdn.com/s3/m/723b3673168884868762d629.png)
是从 宏观上进 行了研究 , 如文献[ — 】 例 4 5 。本 文主要 结合 Ca — y
ma n开 发 板 上 L CD 显 示 屏 的 背光 控 制 流 接 口 驱 动 程 序 实 例 详
细分 析 了 WiC n E下 流 接 口驱 动 程 序 的 开 发 实 现 流 程 。
t a a i pl L h t sm e CD diply S s a ba l t tea cki sr m dr er u o c yman gh i r ns n a v PXA27 i gie t an y i a pl te 0 s vn o alss m y h pr e s oc s of W i o sr a nd ws CE te m it f c dr e , nera e v i r Key wor : ido CE.te dsW n ws sr am nera ier yman it f ce dr v , Ca PX A27 0
目前 , i Wn CE提 供 了 四 种 设 备 模 型 ,其 中 两 种 是 专 门 用 于 WiC 的模 型 , 外 两 种 外 部 模 型 来 自其 他 的 操 作 系统 。 基 于 nE 另 WiC 的 两 种 模 型 是 本 机 的 设 备 驱 动 程 序 和 流 接 口的 驱 动 程 nE 序 。 两种 外 部 模 型 用 于 通 用 串行 总 线 ( S 和 网 络 驱 动 器 接 口 U B) 标 准 ( DI)驱 动 程 序 。 其 中流 接 口驱 动 程 序 是 为 连 接 到 基 于 N S WjCE平 台 的外 围 设 备 而 设 计 的 , 些 外 围 设 备 包 括 S 卡 、 n 这 D 摄 像 头 、 印 机 等 。目前 针 对 流接 口驱 动 程序 的设 计 和 开 发 很 多 都 打
基于WinCE的I 2C驱动程序设计
![基于WinCE的I 2C驱动程序设计](https://img.taocdn.com/s3/m/d314cd1c0b4e767f5acfce61.png)
IC总线遵从 同步 串行 传输 协议 , z 即各 位 串行 ( 一位
接一位) 发送 , 由时钟 (l k 线 指示读 数 据( aa 线 的时 c c) o dt)
刻 。每个数据包前有一 个地址 , 以指示 由哪个器件来接收
式 的特点是专为各种 具有严 格 资源限制 的硬件 系统 所设 计的 。为 了将操作 系统 和硬 件设备连接起 来 , 联系硬件 和
US B等接 口以及 S / D MMC卡 。
¥ C 4 0 处理器 的 1C总 线可 以处 于下 面 4种 模 3 21 微 2
式下: 主接 收模 式 、 主发送 模式 、 接收模 式 和从 发送 模 从
维普资讯
技 术 纵 横
基于 W 的 1 iC nE 2 0驱动程序设计
■ 中 国地 质 大学 王 小 芳 王 典 洪 陈 飞
将操作 系统和相应 硬件 设 备连 接 起 来, 写联 系硬 件 和 软件 的驱 动程 序 至 关重 要 。本 文主要 讨 论 在 编
.
_
WiC n E操作 系统下 , 如何设 计 实现 ¥ C 4 0芯片具有 Ic接 口的驱动程序 ; 3 21 。 详细介绍 Wi E下, n C 流驱 动 程序的编写方 法, 同时将驱动通过 Pafr B i e 编译进操作 系统 , l om u d r t l 最后用动 态链接库 的方式提供给 用
通信线通过上拉电阻被拉升至 +5V。在控制 系统 中的每 个集成电路 可 以通 过 一个 C S缓 冲 器来 读 每一 条线 MO
路, 也可 以通过一个栅 极 开路 的 F T管 将 每一条 线 的电 E 平下拉 。因此 , 对每个芯片来说 , 每条线既是输入线 , 又是
Apalis i.MX6 WinCE 开发入门说明书
![Apalis i.MX6 WinCE 开发入门说明书](https://img.taocdn.com/s3/m/1d89c754cd7931b765ce0508763231126fdb7764.png)
Apalis i.MX6 WinCE开发入门Revision History17-Aug-2015 Rev. 0.2 V1.1A 添加SD卡槽图片及错误修正2-Feb-2016 Rev. 1.1 V1.1A 增加WinCE Image V1.0b6 说明6-Jun-2016 Rev. 1.3 V1.1A 增加社区信息15-Aug-2017 Rev. 1.5 V1.1A 更新V1.2版本image内容,修正错误目录1.开发设备及材料准备 (6)1.1硬件准备 (6)1.1.1Apalis i.MX6 系列核心板模块 (6)1.1.2Apalis 系列载板 (6)1.1.3基本配件(按需自行配置,不包含在标准载板购买包装内) (6)1.2软件准备 (6)2.开发平台配置 (7)2.1硬件连接框图 (7)2.2电源连接 (7)2.2.1Apalis 开发板 (7)2.2.2Ixora 载板 (7)2.3显示输出连接 (7)2.3.1Apalis 开发板 (7)2.3.2Ixora 载板 (8)2.4调试串口COMA连接 (8)2.4.1Apalis 开发板 (8)2.4.2Ixora载板 (8)2.4.3串口连接参数为115200/8/1/none (8)2.4.4USB 串口驱动请从下面FIDI网站下载 (8)2.5调试USB口(在需要时连接) (8)2.5.1Apalis 开发板 (8)2.5.2Ixora载板 (8)2.6USB键盘/鼠标连接 (9)2.6.1Apalis 开发板 (9)2.6.2Ixora 载板 (9)2.7网络连接 (9)2.7.1Apalis 开发板 (9)2.7.2Ixora 载板 (9)2.8上电启动,开关机和重启开关 (9)2.8.1Apalis 开发板 (9)2.8.2Ixora 载板 (9)2.9上述所涉及的连接器和开关布局图 (10)2.9.1Apalis 开发板 (10)3.修改显示分辨率 (11)3.1修改Eboot分辨率 (11)3.2修改WinCE显示分辨率 (11)3.3清除WinCE注册表恢复到默认状态 (11)4.远程桌面连接 (12)4.1ActiveSync (USB)方式连接 (12)4.2网络方式连接 (12)5.开发主机SDK部署,针对VS2008开发环境 (13)5.1安装VS2008 (13)5.2安装WINCE 6.0 SDK (13)5.3安装WINCE 7.0 SDK (13)5.4测试SDK (13)6.VS2008应用调试之USB调试 (14)7.VS2008应用调试之网络调试 (15)7.1连接 (15)7.2主机端VS2008设置 (15)7.3目标板设置(英文版WinCE7) (16)7.4目标板设置(中文版WinCE7) (16)7.5测试连接情况 (17)8.E-boot和OS image更新升级 (18)8.1关于ToradexApalis i.MX6模块的image更新 (18)8.2使用Toradex Easy Installer进行模块系统更新 (18)8.3Eboot损坏情况下进入恢复模式重新刷写Eboot和OS image (18)8.4Eboot正常情况下,升级Eboot 或者OS image (20)8.4.1如模块当前WinCE系统正常,建议首选进入系统后使用Update Tool来升级相关组件 (20)8.4.2如当前Eboot版本为V1.2以下版本并升级为V1.2及以上版本 (20)8.4.3如当前Eboot版本已经为V1.2及以上版本 (21)9.软硬件开发资源及Toradex开发者中心 (22)9.2载板硬件开发资料下载 (22)9.3WinCE软件image,BSP,SDK等资源下载 (22)9.4开发上手指南以及Lib库的使用说明文档 (22)9.5Toradex社区 (22)10.Toradex公司简介及本地支持联系方式 (23)10.1Toradex公司简介 (23)10.2本地支持联系方式 (23)1. 开发设备及材料准备1.1 硬件准备1.1.1 Apalis i.MX6 系列核心板模块✓Apalis i.MX6 Quad 2GB IT | V1.1C✓Apalis i.MX6 Quad 1GB | V1.1B✓Apalis i.MX6 Dual 1GB IT | V1.1B✓Apalis i.MX6 Dual 512MB | V1.1B1.1.2 Apalis 系列载板✓Apalis Evaluation Board | V1.1A✓IxoraCarrier Board | V1.1A1.1.3 基本配件(按需自行配置,不包含在标准载板购买包装内)✓电源适配器✓外部显示连接线(如VGA、RGB、LVDS等)✓调试串口连接线✓调试USB口连接线1.2 软件准备✓Windows系统开发主机✓Virtual Studio 2008 开发套件✓串口工具如SecureCRT或者Xshell等2. 开发平台配置2.1 硬件连接框图2.2 电源连接2.2.1 Apalis 开发板✓X15,输入电源类型7-27V DC,螺丝接线连接,建议功率24W✓X17,输入电源类型12V +/-10%,5.5mm 圆形接头,建议功率24W;当外设如LVDS,PCIE等需要12V电源是必须通过此接头供电。
WinCE6.0下双模终端的USB转串口驱动开发
![WinCE6.0下双模终端的USB转串口驱动开发](https://img.taocdn.com/s3/m/8ffeec6c9b6648d7c1c74633.png)
0 引 言
我国 3 G牌 照 的 发放 , 宣告 了 3 时代 的到 来 , G
基于 T —C MA和 C MA WC MA 的双 模 终 端 将 DS D D / D 取代 2 时代 的单 模 终 端 。诺 基亚 、 星 、 为 、 G 三 华 中 兴等 国 内外 通 信 厂 商 都 积 极 投 入 到 双 模 手 机 终 端 的开发 中来 , 目前 双模 手 机终 端 的研发 已经 成 为热 点 。当前市场 中主要 的智 能手 机操 作 系统 有 : o i N ka 主推 的 Sm in 开 放 内核 的嵌 入 式 Ln x 微 软 的 y ba , iu , WiC n E等 。由于 WiC 6 0嵌人 式 系统具 有实 时性 n E.
Wi E. U B设备驱动开发只提供了一些底层支持 n 60对 S C
的原因, 以通 信 模 块 厂 商 未 提 供 WiC 6 0下 的 所 nE .
U B驱 动 , 要 实 现 通 信 模 块 的基 本 功 能 , 开 发 S 而 除
纯 U B驱 动 外 , WiC 6 0下 , 需 要 修 改 Mo S 在 nE. 还 . d m源码 , e 存在 着开 发 周 期 长 、 作量 大 、 容 性 差 工 兼 等 问题 , 给开发 人 员带 来 了极 大 的不 便 。而通 过 串 口直接对 Mo e dm进 行操作 , 不仅 避 免 了上述 在开 发 中存 在 的问 题 , 时 由于操 作 Mo e 的 是 虚 拟 串 同 dm 口, 由它来 适 配 Moe 不 会 出 现 由物 理 串 口操 作 d m, Mo e 时制 约 M d m处理速 率 的问题 , 然保持 了 dm oe 仍 U B高 速的特 点 , 开 发人 员 只 需 开发 出对应 模 块 S 故 的 U B转 串 口驱 动 亦 可实 现 上 网 、 电话 等 功 能 ; S 打
Wince6.0应用开发:一、平台搭建
![Wince6.0应用开发:一、平台搭建](https://img.taocdn.com/s3/m/d1a559cb81eb6294dd88d0d233d4b14e85243e9e.png)
Wince6.0应用开发:一、平台搭建由于需要参加一个比赛,于是就接触了WinCE6.0的应用开发,可是所看到的资料大部分都是关于WinCE6.0系统的开发,或者在系统之上的驱动开发。
像我这种只在WinCE6.0上利用厂商提供的类库进行应用开发的真实伤不起。
下面介绍开发环境:我的自己的系统是WIN7的系统其实假如你和我一样的话只开发应用的话,其实根本不需要按照网上那样下差不多4G的东西。
需要做的是,一、装个vs2008(记得包含智能设备开发这一项,vs2010是不支持智能设备开发的。
当然你也可以选择vs2005,这随便你。
vs2008对应的Wince上的.net compact framework3.5,而vs2005对应的是2.0),二、再装个WINCE6.0_CHS_SDK(这是个wince6.0的SDK软件开发包)三、安装一个Wince设备的同步软件。
四、(可选择)假如你想要让你的模拟器上网的话,你就吧Virtual Pc 2007安装上吧!详细的步骤:一、装个vs2008开发应用的话,比较快捷的无疑有c++以及c#,所以这就看你自己的需要的了,不过在安装的时候,记得选择上智能设备课编程技术这一项。
如下图这样第一步就完成了。
二、安装这个的目的是因为其提供了一个Win ce6.0的模拟器,之后只需要将写好的程序点击(开始执行不调试)或者(启动调试)都行,vs2008便会在模拟器上部署应用程序。
之后便可以执行了。
下载地址:《传送门》安装时的注意事项:1、安装的时候记得选择自定义2、然后如下图记得取消文档这一项,否则会出现安装失败的提醒。
三、同步软件的安装:Winxp:装的是Activesync 4.5 《传送门》Win7:装的是Windows mobile center 《传送门》补充:假如百度网盘的内容被取消了,给我留言,我会马上补充回来的四、Virtual Pc 2007安装后便能在wince模拟器中,做些设置便能上网了。
智能无线抄表系统中CC1101的WinCE驱动开发
![智能无线抄表系统中CC1101的WinCE驱动开发](https://img.taocdn.com/s3/m/15664437af45b307e8719721.png)
智能无线抄表系统中CC1101的WinCE驱动开发智能无线抄表系统中CC1101的WinCE驱动开发0引言随着经济技术的不断发展,以及自动化程度的提高,越来越多的场合需要用到远程控制。
在承接的国家大学生创新性实验计划项目——基于无线跳传网络的智能抄表系统中,中继(SINK)模块,即采用S3C2410在WinCE下驱动射频芯片CC1101作手持终端控制器。
其中,在WinCE下驱动CC1101成为该项目的一个难点。
CC1101使用SPI通信,而SPI驱动属于WinCE串口驱动的一种,是流驱动。
本文将介绍WinCE5.0下,C1101的SPI 驱动程序设计。
1CC1101的SPI接口特性CC1101基于TI公司的0.18μm CMOS晶体SmartRF04技术,是一种低成本、真正单片的UHF收发器,为低功耗无线应用而设计。
电路主要设定在315MHz,433MHz,868MHz和915MHz的ISM(工业,科学和医学)和SRD(短距离设备)频率波段,CC1101的主要操作参数和64位发送/接收FIFO可通过SPI接口控制,具有14个命令寄存器,47个普通配置寄存器和12个状态寄存器,通过4线SPI兼容接口(SI,SO,SCLK和CSn)配置。
其中,SPI接口是一种同步串行通信接口,CSn是芯片选择管脚,当该管脚为低电平时,SPI接口可以通信;SI和SO为数字传输管脚,SI用于数据输入,SO用于数据输出;SCLK为同步时钟,在时钟的上升沿数据被写入或读出。
CC1101中SPI接口的读/写操作方式。
CC1101的配置、命令发布和发射接收缓存的数据读取都通过SPI完成,SPI的操作都由主机控制,对CC1101来说,主机的控制操作即是发送的headerbyte。
下面介绍两种主要状态下的主机操作。
(1)读寄存器、读状态①写入头字节(R,0/1,address);②dummy write为从设备提供一个CLK,从SPI接收数据即读出address的数据。
WinCE.NET下USB OTG设备驱动程序设计
![WinCE.NET下USB OTG设备驱动程序设计](https://img.taocdn.com/s3/m/62edf06a7e21af45b307a8a8.png)
下USB OTG设备驱动程序设计孔旋,邓中亮北京邮电大学电子电子工程学院计算机应用技术专业,北京(100876)E-mail:kongxuan1982@摘要:本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接器芯片驱动程序的设计与实现。
关键词:USB OTG,,驱动程序1.引言USB,全称是Universal Serial Bus(通用串行总线)。
在1994年年底,由当时的康柏、IBM、Microsoft等多家公司联合发起成立的通用串行总线开发者论坛(USB Implementers Forum,简称USB IF)先后陆续推出了USB0.7、USB1.1、USB2.0规范,其理论传输数率最高可达480Mb/s。
最近,根据现有的USB接口在有线/无线,性能及应用规范上的不同,USB IF将USB接口分为5类,并发布了相应的标识,分别是:Wireless USB、Original USB、Hi-Speed USB、On-The-Go USB及Hi-Speed On-The-Go USB[1] 。
是微软公司向嵌入式领域推出的一款紧凑、高效的32位嵌入式操作系统,具有多任务、实时性、模块化及可伸缩性、强大的通信和多媒体能力等特点[2] ,在移动计算、工业控制和信息家电等诸多领域都有广泛的应用。
本文将通过工具Platform Builder实现TI OMAP850 PDA手机平台下USB OTG设备驱动程序,并实现基于OTG技术的一种应用——在无PC条件下,以PDA手机平台端为USB 主机端的数据通信。
B OTG技术2.1 OTG技术简介USB技术的发展,使得PC和周边设备能够通过较简单、可方便热插拔的方式连接在一起,通过USB总线,在PC的控制下进行数据交换。
但这种方便的数据交换方式,就在不久以前(10年以内),一旦离开了PC,各设备间无法利用USB接口进行操作,因为当时没有任何一种PC以外的其他设备能够充当PC一样的Host。
WINCE移植简要开发步骤
![WINCE移植简要开发步骤](https://img.taocdn.com/s3/m/fc8334f831b765ce04081411.png)
WINCE移植简要开发步骤一、建立新的BP工程,选择适当的CPU选择一个合适的模板勾选必要的组件选择合适的网络组件,去掉设备不支持的设备组件二、为工程添加设备驱动1、添加SD卡的支持添加Device Drivers->SDIO->SD Memory添加Device Drivers->SDIO->SDIO Host->Samsung 2410SDIO Host2、添加BSP板载驱动添加Catalog->BSPs->Samsung SMDK2410:ARMV4I->Device Drivers下要用的各种设备三、添加开发和应用程序支持1、添加MFC支持添加Catalog->Core OS->Windows CE devices->Applications and Servies Development->Microsoft Foundation Classes(MFC)2、添加SQL CE的支持添加Catalog->Core OS->Windows CE devices->Applications and Servies Development->SQL Server CE2.03、添加其它想添加的组件,但要注意不要使用的就不要添加,以免镜像文件太大四、设置各CPU语言和编译设置(注意,每种CPU都要设置一下)设置语言设置编译选项五、修改注册表(打开如图所示platform.reg文件进行编辑)1、设置网卡为DHCP模式设置网卡为DHCP模式,在PB5和EVC4中才可以通过微软同步软件实现远程连接和调试,查找TcpIp子键,添加或者设置AutoCFG,EnableDHCP两个值[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms\TcpIp]"AutoCFG"=dword:1"EnableDHCP"=dword:12、设置触摸屏的初始坐标参数查找TOUCH子键,添加或者设置CalibrationData的值:[HKEY_LOCAL_MACHINE\HARDW ARE\DEVICEMAP\TOUCH]"MaxCalError"=dword:7"CalibrationData"="395,763 799,251 759,1279 47,1275 67,215"3、设置SD/MMC卡的目录名称查找SDMemory子键,设置Folder的值,这个值在我们调用CD卡上的程序时候要用到,如果不设置,也可以通过在程序中遍历目录的方法来查找:[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]"Name"="SD Memory Card""Folder"="Storage Card"六、编译自己的WinCE分别选中不同类型的CPU,点击Build OS->Sysgen编译系统,为了减少错误,请暂时关闭木马防火墙软件七、打包制作SDK把内核编译完成后,就可以打包制作自己的SDK了。
基于WINCE5.0环境下的LAN91C111驱动程序开发
![基于WINCE5.0环境下的LAN91C111驱动程序开发](https://img.taocdn.com/s3/m/d92b9a4e69eae009581bec34.png)
LAN9 Cl l Drv r De eo m e tBa e n W i CE5 0 1 l ie v lp n sd o n .
Z NG u , HA a HA I i Z NGJ n K i (. h 4hKe a hIstt o E C, h i h a gHee 00 8 , hn ; 1T e5t s r tue f T Sia un b i 5 0 1 C ia e c ni C jz 2 Nay n b egat co lB n b n u 23 1, hn) . v guSren Sh o, e guA h i 30 2 C i Be a
S S 公 司生 产 的嵌 入 式 以太 网控 制 器 L N9 C1 1 原 理 和 主要 特 点,给 出 了 L N9C1 1 ¥ C 40构 成 嵌 入 式 以太 网接 M C A 1 1的 A 1 1 和 3 24
口的设计 实例, j 明了硬件和软件设计 。 并 说 经过 实验证 明, 用该设计方案的产品, 采 运行稳 定, 该方案具有较 高的性价 比和 实用价
¥3 C24 0 4 w rt h i e i ng t e drv r und r W i i e nCE 5. 0.Expei e a eul s w a t i r ha vey oo o r to o W i CE5. rm ntl r s t ho t t he dr s h ve s r g d pea n n n i 0
L AN9 1 s 0 wo e t e a f c aa t r t s o AC + HY n efc o AN9 1 n y ARM 9 0 r c s r 1 1 i C1 c n  ̄ d wi t i o h r cei i f M h h d sc p i tr e f L a 1 1 a d b C1 2 T p o es o
怎样将一个驱动加入WINCE中-WINCE-sparkle-cliz
![怎样将一个驱动加入WINCE中-WINCE-sparkle-cliz](https://img.taocdn.com/s3/m/22ec90b2dc88d0d233d4b14e852458fb770b387f.png)
#include<windows.h>
//#include <ceddk.h>
#include<nkintr.h>
#include<pm.h>
#include"pmplatform.h"
#include"Pkfuncs.h"
#include"s2440.h"
#defineIO_CTL_WDD_1_OFF 0x01
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
WDDGpioInit();
switch(dwCode)
{
caseIO_CTL_WDD_1_ON:
s2440IOP->rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<5);
break;
// 1. Virtual Alloc
Virtual_Alloc();
WDDGpioInit();
mInitialized = TRUE;
returnTRUE;
}
//-----------------------------------------------------------------------------
{
RETAILMSG(1,(TEXT("USERWDD: WDD_Open\r\n")));
returnTRUE;
}
//-----------------------------------------------------------------------------
WindowCE驱动程序
![WindowCE驱动程序](https://img.taocdn.com/s3/m/8b046ea0b0717fd5360cdcf9.png)
Windows CE驱动程序模型 CE驱动程序模型
桌面Windows驱动程序模型 桌面Windows驱动程序模型
操作系统在启动后对硬件进行延迟加载,但依然 操作系统在启动后对硬件进行延迟加载, 把驱动程序加载到操作系统的内核空间中。 把驱动程序加载到操作系统的内核空间中。驱动程 序工作在系统的地址空间内, 序工作在系统的地址空间内,实现了驱动的动态加 载。 桌面Windows驱动程序最早采用 桌面Windows驱动程序最早采用VxD(已废弃), 驱动程序最早采用VxD(已废弃 已废弃) 2000开始采用 开始采用WDM( 从Windows 2000开始采用WDM(Windows Driver Model)模型,驱动程序调用DDK;Vista以 Model)模型,驱动程序调用DDK;Vista以 及以后的版本采用WDF( 及以后的版本采用WDF(Windows Driver Founation)是对WDM的建模与封装 Founation)是对WDM的建模与封装,但隐藏了更 的建模与封装, 多的细节,但降低了开发难度。 多的细节,但降低了开发难度。
Windows CE驱动程序的宿主 CE驱动程序的宿主
如果要运行DLL中的代码,那么必须先有一个EXE 如果要运行DLL中的代码,那么必须先有一个EXE 中的代码 进程,把该DLL加载道自己的地址空间内 加载道自己的地址空间内, 进程,把该DLL加载道自己的地址空间内,然后才可 执行DLL中的代码 中的代码。 执行DLL中的代码。 Windows CE的驱动程序也必须被其他EXE——宿 CE的驱动程序也必须被其他EXE——宿 的驱动程序也必须被其他 主加载
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序模型 CE驱动程序模型 Windows CE驱动程序的宿主程序 CE驱动程序的宿主程序 Windows CE驱动程序的类型 CE驱动程序的类型 Windows CE驱动程序的分类 CE驱动程序的分类 示例驱动程序的代码
WINCE6.0+系统定制、SDK定制及一个示例应用程序
![WINCE6.0+系统定制、SDK定制及一个示例应用程序](https://img.taocdn.com/s3/m/90d45a19227916888486d70b.png)
WIN CE6.0 STEP BY STEP Version 1.0一、系统定制1、这里假设您已经把软件环境都搭建完毕,打开VisualStudio2005,选择新建->项目->Platform Builder for CE 6.0。
2、下一步,选择Device Emulator:ARMV4I,如果有实际设备,也可选择对应设备开发板的CPU等型号进行配置。
3、下一步,选择你想开发的设备类型,这里选择PDA Device,继续4、下一步,选择Mobile Handheld。
5、选择你定制操作系统需要的应用程序。
默认,下一步。
6、选择你定制操作系统需要的网络配置。
默认,下一步。
7、下一步,完成配置。
8、选择项目->属性,对操作系统简单修改一下。
9、下图,可以选择SDK的默认开发语言,可自行修改。
10、下图Enable KITL(no IMGNOKIL=1)取消选定,否则可能会造成模拟器黑屏。
11、如有需要可选择Catalog Items View 对你的操作系统进行裁剪,比如加些应用程序、加些字体等。
12、配置完毕后,可进行编译,此处可能需要很长时间,请耐心等待,编译成功后在*\WINCE600\OSDesigns\OSDesign1\OSDesign2\RelDir\DeviceEmulator_ARMV4I_Release\(参考路径)文件夹下会生成一个NK.bin的文件,此文件即为你定制好的操作系统文件,如有硬件并且安装好启动程序,即可启动你自定制的操作系统。
这里我们准备用模拟器进行程序开发,因此,下面要生成一个模拟器类型的SDK。
二、生成SDK1、项目->Add New SDK….2、添加对应的路径、名称等信息。
3、确认你编译的操作系统为ARMV4I Emulator Debug版本。
4、其他一些基本设置略,如添加皮肤、设定分辨率等,最后点完成, Build此SDK5、Build结束后,可在此*\WINCE600\OSDesigns\OSDesign1\OSDesign1\SDKs\SDK1参考路径下找到您的SDK文件。
Windows嵌入式开发系列课程(4):Windows CE电源管理
![Windows嵌入式开发系列课程(4):Windows CE电源管理](https://img.taocdn.com/s3/m/b31836a1b0717fd5360cdce2.png)
WinCE电源管理李小伟软件应用工程经理上海掌微电子技术有限公司本次课程内容包括z电源管理概要z电源管理驱动程序的实现z内核级电源管理收听本次课程需具备的条件z了解WINCE设备驱动程序开发的一般知识z初步了解WINCE 电源管理驱动Level 200内容¾电源管理概要z电源管理驱动程序的实现z内核级电源管理电源管理驱动的功能z建立一个对整个系统环境,电源状态和设备电源状态的全局了解.可以自定义适合你的电源管理驱动来全局地管理你的平台.z设备驱动的电源管理可以从整个系统电源状态管理中脱离, 自己管理自己的电源状态.z控制系统电源状态切换的过程.电源管理架构在WINCE 中电源管理驱动的位置ApplicationsDevice DriversOS ServicesGWES HAL OEM Adaption Layer withPM supportHardwarePower ManagerDevice.exe电源管理驱动框架z电源管理驱动提供了给应用程序和设备驱动程序的APIz PM.DLL 通过自定义接口和DEVICE.EXE联接z用IOCTL来调用驱动程序电源管理APIz应用程序接口类API¾应用程序可以调用此类API改变系统电源状态,或设定对设备电源状态的需求z设备驱动程序接口类API¾设备驱动程序调用此类API来管理设备电源状态z消息通知(Notification)接口类API¾应用程序调用此类接口API来接收到电源状态变化的消息通知.应用程序接口类APIz取得/设置系统电源状态¾GetSystemPowerState¾SetSystemPowerState¾POWER_STATE_XXX 标志¾可自定义的标志¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SET¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETz设置/取消对设备电源状态的要求¾SetPowerRequirement¾ReleasePowerRequirement¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\REQ¾媒体播放器运行时,对显示驱动和背光的需求.z取得/设置设备电源状态¾GetDevicePower¾SetDevicePower*¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETD¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SETD*调用此API会限制电源管理驱动程序更新设备电源状态. 参考帮助文档.设备驱动程序接口类APIz设备驱动程序调用电源管理驱动¾DevicePowerNotify¾RegisterPowerRelationship¾ReleasePowerRelationshipz电源管理驱动调用设备驱动程序¾DeviceIoControl¾IOCTL_POWER_CAPABILITIES¾IOCTL_POWER_SET¾IOCTL_POWER_QUERY¾IOCTL_POWER_GET¾IOCTL_REGISTER_POWER_RELATIONSHIP消息通知接口类APIz RequestPowerNotifications¾PBT_RESUME¾系统从挂起状态恢复时产生此消息.¾PBT_POWERSTATUSCHANGE¾系统在接上和断开外部电源时产生此消息.AC power¾PBT_TRANSITION¾当电源管理驱动改变系统电源状态时产生此消息.¾PBT_POWERINFOCHANGE¾电池状态改变时产生此消息.z StopPowerNotificationsz例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\MON ¾应用程序通过此API获知电源/电池状态,切换电池图标.电源管理驱动管理的设备驱动程序z设备类型: 注册表项IClass-GUID¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\Interfaces]¾Generic power-manageable devices¾Power-manageable block devices¾Power-manageable NDIS miniports¾Power-manageable display¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\DEVSAMPLE¾AdverstiseInterface¾显示驱动程序调用此函数注册为Power-manageabledisplay 类型的驱动.内容z电源管理概要¾电源管理驱动程序的实现z内核级电源管理WINCE里的电源管理驱动程序z最少功能电源管理驱动程序(PMSTUBS)¾SYSGEN_PMSTUBS¾不支持电源管理APIz完全功能电源管理驱动程序¾SYSGEN_PM¾支持电源管理API¾WINCE提供了2个实例¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\PDA¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\DEFAULT电源管理驱动分层架构z MDD¾包含各类设备驱动的句柄¾管理设备的电源状态¾提供电源管理API的实现z PDD¾制定/维护系统电源状态机管理¾改变硬件电源状态z实现电源管理APIz跟踪和设置设备电源状态z跟踪应用程序的消息通知请求.z处理活动监视计数器z处理设备加载/卸载的通知,并维护设备驱动程序的句柄z处理父设备与子设备之间的电源关系z管理设备电源状态需求z实现与设备驱动程序的调用接口¾gStreamInterface. RequestStreamDeviceÆDeviceIoControl ¾gDisplayInterface. RequestDisplayDeviceÆExtEscapez自定义系统电源状态机z检查系统电源管理的注册表内容的一致性.z实现电源管理驱动的消息处理,实现状态机管理.z设置系统电源状态和相应设备进入对应的电源状态.z自定义状态¾On , UserIdle,SystemIdle,DeepIdle,Suspend,OnBattery, InCradle等状态.¾对应的POWER_STATE_XXX 标志¾系统电源状态到设备电源状态的映射z注册表设置[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Power\State\On]Default=dword:0; D0Flags=dword:10000; POWER_STATE_ONCOM1:=dword1; D1D4Off (Off)D3Sleep (Suspend)D2Stand By (SystemIdle)D1Low on (UserIdle) D0Full on (On)系统电源状态到设备电源状态的映射z映射到所有默认的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle]"Default"=dword:2; D2"Flags"=dword:100000; POWER_STATE_IDLEz映射到某一特定类型的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle\{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}] "Default"=dword:4 ; D4¾"{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}“= "Power-manageable display“系统电源管理状态机z GWES监视用户操作,通过事件(Event)来通知电源管理驱动程序z电源管理驱动程序通过事件(Event)和超时机制来实现状态机用户活动计时器z为每个状态创建相应的事件(Event)¾3个事件¾A timer reset event.¾An active status manual-reset event.¾A manual-reset event¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\ActivityTimers\UserActivity]¾Active->Inactive->timeout 然后切换到下一个电源状态电源状态变迁依靠超时机制z[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS et\Control\Power\Timeouts]"ACUserIdle"=dword:1e"ACSystemIdle"=dword:3c"ACDeepIdle"=dword:5a"BattUserIdle"=dword:1e"BattSystemIdle"=dword:3c"BattDeepIdle"=dword:5a"BatteryPoll"=dword:1f4z按秒计数z0 表示功能禁止, 系统不会自动切换到此状态z这些设置可以在”控制面板”里的电源管理里改变.系统电源状态变迁UserActiveUserIdleUserInactiveSystemIdleSystemActiveOnSystemInactiveSuspendTimeoutSystemInactivityUserInactivityTimeoutTimeoutSystemIdleSuspendUserActivityUser Interactive(PM State)(System State)(Event)电源管理状态切换timeoutPlatformUpdateSystemPowerStatePmSetSystemPowerState_IPlatformSetSystemPowerStateGenerateNotifications PowerOffSystemUpdateAllDeviceStatePmSetSystemPowerStateSetSystemPowerStateIf NewState(Internal call)(内部调用)(外部调用)If External callPlatformMapPowerStateHint(MDD)(PDD)内容z电源管理概要z电源管理驱动的实现¾内核级电源管理内核级电源管理¾OEMIdle¾当系统里没有线程要运行时被调用¾OEMPowerOff¾当系统要进入睡眠或关闭状态时被调用¾睡眠——唤醒的流程OEMIdlez当线程调度器里,没有线程需要运行时,调用此函数. (Blocked waiting for input or event.)z负责将CPU置于低功耗状态,并且能快速恢复到正常运行状态.z不能将内存(DRAM)置于自刷新状态OEMPowerOffz进入睡眠时,此函数负责将系统置于一个功耗最低的状态:¾保存系统设置¾将内存(DRAM)置于自刷新状态¾CPU停止工作(掉电)¾禁止中断处理(用于唤醒系统的中断除外)z退出睡眠状态时,此函数负责恢复系统的设置z睡眠¾调用SetSystemPowerState进入睡眠状态¾电源管理驱动里设置设备的电源状态¾调用PowerOffSystem()进入内核处理¾调用各设备驱动的XXX_PowerDown()¾调用OEMPowerOff()¾进入睡眠Zzzzz….z唤醒¾触发唤醒中断, CPU被唤醒¾开始执行Bootloader代码,判断冷启动还是唤醒¾判断为从睡眠中唤醒,用保存在内存上的地址跳回OEMPowerOff()里的唤醒位置,恢复系统设置¾调用各设备驱动的XXX_PowerUp()¾回到电源管理驱动中,更新各设备驱动的电源状态¾电源管理驱动发出系统状态变迁的消息通知¾整个系统恢复到正常运行状态PowerOffSystem的流程z SC_PowerOffSystem()¾WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\kwin32.c内容z电源管理概要z电源管理驱动程序的实现z内核级电源管理移动与嵌入式开发者大会(MEDC)汲取新知,加速未来——移动与嵌入式开发者大会(MEDC)您想洞悉最前沿的微软移动与嵌入式技术吗?您想聆听最权威的技术专家现场讲授吗?您想全方位体验移动新产品所带来的无穷魅力吗?2006微软移动与嵌入式开发者大会将带领您与科技同步、与市场同行。
基于S3C6410的WinCE流式驱动开发
![基于S3C6410的WinCE流式驱动开发](https://img.taocdn.com/s3/m/c2908043e45c3b3566ec8b0d.png)
ZHANG . i g.YE T a . u De x n i n g o,ZHANG . n Aimi
(o C mmu iainT ann aeo e ea tf Hed u res X a h ao 50 , hn ) nct riigB s f n rl a a q a tr, u n u 7 1o C ia o G S
d v ri ie sa x mp e t n lz h r c s fte s e n e fc rv rde eo me t i r e sgv n a n e a l o a ay e t e p e so t a it ra e d ie v lp n . o h r m Ke r s:W iCE ;sr a i e f c rv r 3 41 y wo d n te m ntra e d e ;¥ C6 0;d v rd v lp n i i r e e eo me t
0 引言
在 嵌人式 系统 应用 开 发 中, 由于系 统 需求 千 差 万 别 , 品从 功能到外 观都 相差悬殊 , 往需要开 发 产 往 者 自行设 计硬件 系统 、 定制 软件 系统 、 开发设 备驱 动 程 序 。设 备驱 动程序 提供 了操作 系统和硬 件之 间的 接 口 , 既包含 特定操 作系 统相关 的代码 , 它 也包含 特 定 硬件 相关 的部分 … , 直在 开 发者 心 中笼罩 着 一 一
windows ce RS232C串行口驱动程序设计
![windows ce RS232C串行口驱动程序设计](https://img.taocdn.com/s3/m/856363e8856a561252d36f43.png)
实验5 RS232C串行口驱动程序设计实验目的掌握RS232串行口设备驱动程序的编写方法,实现串行口的初始化、中断管理、发送与接收处理的程序设计技巧。
实验环境⏹操作系统:windows 2000以上版本,要求安装.NET Framework 1.1⏹软件工具列表:⏹Microsoft ActiveSyn 4.5;⏹Platform Builder 5.0;实验学时2学时,必做实验。
实验内容理解驱动程序的原理与功能,掌握流式接口驱动程序的结构、编写、加载及调试过程预备知识驱动程序是对底层硬件的抽象。
应用程序开发者不需要真正理解底层驱动的工作原理,他们只需要通过Windows CE提供的API函数,就可以直接与硬件进行交互。
例如,如果应用程序要对串口进行操作,只需要:1.在COMx上调用CreateFile( )2.调用WriteFile( ) 往串口写数据3.调用CloseHandle( ) 关闭串口对于其他类型的API也是一样的。
如果我们需要向显示器输出,我们只需要调用PolyLine( ), 或者MoveToEx( ), LineTo( )等函数,而不需要理解显示器的真正工作原理。
在Windows CE中,驱动就是一个简单的用户态动态链接库(DLL),DLL 会导出一些公共的接口,DLL被父进程(通常是device.exe或者gwes.exe)加载,然后,父进程通过DLL导出的接口调用DLL。
流式接口的驱动程序导出一系列大家熟知的接口。
还拿串口驱动当例子。
我们希望可以往串口读写数据,因此,我们希望驱动程序可以导出Open, Close, Read, 和Write接口。
此外,流式接口的驱动程序还导出如下函数:PowerUp, PowerDown, IO Control, Init, 和DeInit.实验步骤一.、编写流式接口的驱动程序1.打开Platform Builder。
2.利用Platform Wizard创建新的平台3.在Platform Builder中选择“File”->“New Project or File”,创建一个“Windows CE Dynamic link library”项目,项目的名称填写“My Driver”。
Windows CE嵌入式系统程序开发(基于ARM11)
![Windows CE嵌入式系统程序开发(基于ARM11)](https://img.taocdn.com/s3/m/8ae301cebb68a98271fefae1.png)
2 搭建Windows CE 开发环境 2.3 定制DMA-6410 XP 系统
2.3.1 使用项目向导 2.3.2 构建新的平台 2.3.3 编辑和修改 Windows Embedded CE项目 2.3.4 添加必要的功能 2.3.5 Build
3 Windows CE应用程序开发
3.1 第一个 WinCE程序
位程序
D
7 GPS与Google Earth定位系统
7.1 GPS相关知识
7.1.1 卫星星座 7.1.2 地面监控系统 7.1.3 信号接收机
7 GPS与Google Earth 定位系统
7.2 搭建环境
7.2.1 解析GPS定位信息 7.2.2 下载并安装Google Earth
7 GPS与Google Earth定位 系统 7.4 GPS与Google Earth定位程序
7.4.1 Google Earth_Start程序 的建立 7.4.2 地图定位功能 7.4.3 在地图上新增地标
8 鲜奶配送系统
8.1 系统总体 设计
A
8.2 搭建开发 环境
B
8.3 系统数据 库设计
C
8.4 系统初始 化
D
8.5 终端应用 程序设计
E
8 鲜奶配送系统
8.5 终端应用程序设计
6.3 键盘接口及 驱动程序
6.6 GPRS接口 及驱动程序
6 接口驱动程序开发
6.7 直流电动机接口及驱 动程序
6.9 蓝牙接口及驱动程序
6.8 步进电动机接口及驱 动程序
6 接口驱动程 序开发
6.1 驱动架构分析
6.1.1 驱动程序分类
6.1.2 流接口驱动程序架 构
WinCE流驱动程序设计概述
![WinCE流驱动程序设计概述](https://img.taocdn.com/s3/m/bb0b948f83d049649b665821.png)
Th sg fSte m n e f c ie iCE e De i n o r a l t r e Dr r orW n a v f
GU Z e g—h o, ANG Z —q a g N E W e —h a hn a W i in , I n u
( eat etfEet n sadE gne n N n n nv sy N n n 10 3 C i ) Dprm n l r i n n i r g, aj g U iri , aj g2 09 , h a o co c ei i e t i n
1 引 言
Wi E是 一 款 由微 软 公 司推 出 的 面 向嵌 人 式 n C 领域 的操 作 系统 , 广 泛应 用 于手 机 、 D 平 板 电 被 P A、
S 11 A 10的新一代嵌 入式应用 处理 器, 属于 8 _ r m系 列, 它拥有 T u b h m 压缩指令、4 6 位长乘法指令、 增强 型 D P指 令 等 先 进 特 性 , 集 成 了众 多 的外 部 接 S 并
驱动。其中流驱动由于接 口简单、 支持硬件设备最
多, 因而最 为 常用 。下 面 将结 合 D P A 5 B X 25开发 板
D IE SB i n 。例如音频设备 ( vD v 的加 RV R \u I” h Wae e ) 载信息 : f K Y— O A —M C IEi resi,hni E L C L A HN D vr u I H i B i
Wae e \ vD v ]
”Prfx = ”W AV ” e i”
中流驱动的一个简单实例 , 详细说 明其设计方法 。
2 流 驱 动 开 发 的 基 本 知 识
2 1 开发 WiC . n E驱动 的基本 工具
WinCE下的GPIO驱动程序开发
![WinCE下的GPIO驱动程序开发](https://img.taocdn.com/s3/m/44494240c850ad02de8041f7.png)
点。为了总结出简洁、实用和具有参考意义的在 ARM+WinCE 架构下的 GPIO 驱动程序开发过程,深入研究了 WinCE 下流驱动的基本原理、梳理
出了 WinCE 下 GPIO 驱动程序的开发方法和完整流程。最后编写了一个驱动 LED 灯的示例性驱动程序,以供开发者参考。
Abstract: The development of embedded system based on the ARM +WinCE framework has been widely used in many fields, but device driver
技术学习效果。随着 3G 时代的到来这一现状问题得到了良好的改
4 结语
善,因此广大教师应充分利用这一高速率信息传输的技术优势,打
行业得到了广泛的应用。嵌入式系统是由嵌入式硬件和嵌入式软件 API 函 数 (如 CreateFile ()、
两部分组成,嵌入式软件包括嵌入式操作系统和嵌入式应用程序。 WriteFile()等)来调用驱动程
WinCE 是一款由微软公司推出的面向嵌入式领域的操作系统,被广 序达到访问设备的目的。流
泛应用于手机、PDA、平板电脑以及各种工控领域中。由于嵌入式设 接口驱动程序架构如图 2 所
Value Engineering
· 131 ·
WinCE 下的 GPIO 驱动程序开发
The Development of GPIO Driver Based on Embedded WinCE
周富相 Zhou Fuxiang;王庆辉 Wang Qinghui;郑晓晶 Zheng Xiaojing;宋刚 Song Gang
作系统与硬件交互的途径,是连接硬
其中,表中所列标准流驱动接口函数名称中的“XXX”表示设备名
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
wince驱动开发学习笔记嵌入式技术/walking_man 发表于2007-03-20, 20:03首先是wince驱动的分类问题。
按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。
经过microsun大哥的指点,把这两种分类法分开了。
在这里引用一下:“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PD D与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。
单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。
至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。
而串口,网卡等就是流接口驱动程序. 所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以是分层的流式: 如OHCI ”按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。
第二点:驱动的功能属性。
设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。
从应用程序到具体硬件间有如下这些环节起作用:应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。
在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。
共有三类系统进程用来加载:Device.exe,GWES.exe,File Sys.exe.绝大多数设备驱动都是通过Device.exe加载的。
需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows 和wince就不同。
第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。
其流程是:上电-启动bootloader-启动N K-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buil din的所有子键。
这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。
在OS启动完毕后,我们可以用PB的Remot e Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载。
第四点:流接口驱动的概念。
暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。
过程是:应用程序使用文件API 对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。
所谓流接口函数有十个,包括XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_P owerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,在wince5.0中增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件A PI有CreateFile、DeviceIoControl、 ReadFile、 WriteFile,CloseHandle,SetFilePointer.第五点:编写流驱动的步骤。
有两种实现途径:1。
写DLL,做成Project,加入到OS里。
2。
改BSP,把驱动写在BSP里,再选择那个BSP做OS。
第一种方法步骤是在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;实现流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,还需要修改bib文件。
第二种方法就是在platform/BSP/dr ivers下新建一个目录,然后在drivers目录中的dirs文件中加入新建的目录名。
在新建的目录下,新建你的源代码文件,在其中实现DL L函数。
新建名称分别为sources, makefile, ***.def的文件;修改pl atform.reg和p latform.bib文件。
几个小知识点:(1)应用程序可以通过ActivateDeviceEx()加载设备驱动;(2)注册表里的设备前缀Prefix项应该用三个字母表示,驱动的索引是I ndex.如果应用程序用CreateFile()来打开驱动程序时,第一个参数应该是这个Prefix项加上Index的值。
(3)驱动程序中要用DMA,需要为其保留一段物理空间,就要修改config.bib给驱动程序共享数据用。
(4)查看驱动是否加载,可以用远程工具看注册表buildin/a ctive键,或者是看device.exe的进程是否包含DLL文件。
(5)DL L的入口函数名称默认是DllMain,但我们可以改成别的名称,在SOU RCES文件中加入这样一行,DLLENTRY=ABCD入口函数就被改成了ABCD,我们就应该实现名为ABCD的函数.(6)感觉写驱动无从下手的时候,可以尝试看现有的代码与平台无关驱动源码位于public\common\OAK\Drivers与平台相关驱动platform\{bsp}\srv\Drivers基础知识:1)系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。
设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来硬件只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。
设备驱动是内核的一部分。
2)驱动程序完成以下功能:——对设备初始化和释放;——把数据从内核传送到硬件和从硬件读取数据;——读取应用程序传送给设备文件的数据和回送应用程序请求的数据;——检测和处理设备出现的错误。
3)上层应用程序运行在用户模式(非特权模式,Ring 3),代码被严格约束执行。
如不能执行硬件IO指令。
所有的这些被阻止的操作如果想运行必须通过陷阱门来请求操作系统内核。
4)操作系统内核运行在内核模式(特权模式,Ring 0),可以执行所有有效的CPU指令。
包括IO操作,可访问任何内存区。
5)整个硬件系统资源在驱动程序面前是赤裸裸的,驱动可以使用所有系统资源,编写驱动程序时我们必须格外小心驱动代码的边界条件,确保它们不会损坏整个操作系统。
2、Windows支持的驱动:1)虚拟设备驱动程序(Virtual Device Driver):Windows3.1(Windows95/98/Me)2)内核模式驱动程序(Kernel Mode Driver):Windows NT3)Win32驱动程序模型(Win32 Driver Mode):从Windows98开始使用。
其中WDM是目前主流,然而在WinCE系统中,由于硬件资源有限和嵌入式系统的特点,对其的支持非常有限。
3、WinCE系统驱动简介:1)WinCE毕竟是一个嵌入式系统,有其自身的特殊性,为了提高运行效率,所有驱动皆为动态链接库,驱动实现中可以调用所有标准的API。
而在其他Windows系统中可能的驱动文件还有.vxd,.sys 和动态链接库。
2)WinCE驱动从结构上讲分为本地驱动(Native Driver)和流接口驱动(Stream Driver)。
——本地驱动主要用于低级、内置的设备。
实现它们的接口并不统一,而是针对不同类型的设备相应设计。
因此开发过程相对复杂,没有固定的模式,一般做法是通过移植、定制现有的驱动样例来实现。
——流接口驱动是最基本的一种驱动结构,它的接口是一组固定的流接口函数,具有很高的通用性,WinCE的所有驱动程序都可以通过这种方式来实现。
流接口驱动程序通过文件系统调用从设备管理器和应用程序接收命令。
该驱动程序封装了将这些命令转换为它所控制的设备上的适当操作所需的全部信息。
流接口驱动是动态链接库,由一个叫做设备管理程序的特殊应用程序加载、管理和卸载。
与本地驱动程序相比,所有流接口驱动程序使用同一组接口函数集,包括实现函数:XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write、XXX_PowerUp、XXX_PowerDown、XXX_Seek、XXX_IOControl,这些函数与硬件打交道。
用户函数:CreateFile、DeviceIoControl、ReadFile、WriteFile,这些函数方便用户使用驱动程序。
3)WinCE下驱动的加载方式:——通过GWES(Graphics, Windowing, and Events Subsystem):主要加载与显示和输入有关的驱动,如鼠标、键盘驱动等。
这些驱动一般为本地驱动。
——通过设备管理器:两种结构的驱动都加载,加载的本地驱动主要由PCMCIA HostController,USBHost Controller driver,主要是总线类的驱动;流接口驱动主要有音频驱动,串并口驱动。
——动态加载:前两者都是系统启动时加载的,动态加载则允许设备挂载上系统时将驱动调入内核,主要有外接板卡驱动,USB设备驱动等。
4、流接口驱动函数介绍:1)DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext);pContext:指向一个字符串,包含注册表中该流接口活动键值的路径lpvBusContext:该函数是驱动挂载后第一个被执行的。
主要负责完成对设备的初始化操作和驱动的安全性检查。
由ActiveDeviceEx通过设备管理器调用。
其返回值一般是一个数据结构指针,作为函数参数传递给其他流接口函数。
2)BOOL XXX_Deinit(DWORD hDeviceContext);hDeviceContext:XXX_Init的返回值。
整个驱动中最后执行。
用来停止和卸载设备。
由DeactivateDevice触发设备管理器调用。
成功返回TRUE。
3)DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode , DWORD ShareMode);hDeviceContext:XXX_Init的返回值。
AccessCode:访问模式标志,读、写或其他。
ShareMode:驱动的共享方式标志。
打开设备,为后面的操作初始化数据就够,准备相应的资源。
应用程序通过CreateFile函数间接调用之。