我的第一个WINCE驱动

简介: 早在两年前就开始做WINCE应用程序了,但是由于分工的原因,一直以来都没有机会深入了解WINCE 驱动层面的开发(包含PB相关的系统定制)。

早在两年前就开始做WINCE应用程序了,但是由于分工的原因,一直以来都没有机会深入了解WINCE 驱动层面的开发(包含PB相关的系统定制)。要不是前段时间马宁安排了FakeGPS开发工作,真不知道什么时候才能了解WINCE驱动开发。

FakeGPS从字面理解就是伪装的GPS,也就是说,打开的一个串口实际上并没有连接GPS设备,但是相关应用程序却能从这个串口中获取GPS定位信息(当然这个信息是伪造的了)。

我最初的思路是做两个串口驱动程序,一个串口是就是GPS应用程序使用的串口,另个一个串口与这个串口建立一个软通道,通过一个专门的应用程序向这个串口发送GPS相关定位信息,同时GPS串口就能接收到这些数据。后来在马宁的提示下,还是觉得通过共享内存交互数据更好,所以最终的方案选择的是共享内存的方法。

根据我个人的体验,编写具体的驱动程序只要有C语言功底,应该是不难的。但是要把写好的驱动程序放在什么地方,需要设置什么参数等等,就不是短时间就能掌握和了解的了。这一方面幸好看了唐勉的blog,这部分内容就化难为易了,相关文章请参见:http://blog.csdn.net/nanjianhui/archive/2008/07/18/2674753.aspx

下面就把我开发这个驱动的步骤详细说一下:

1、驱动代码编写(FakeGPS .c

由于我把驱动集成在模拟器中,所以源码存放的路径,我选择的是./WINCE600/PLATFORM 目录下,具体路径,如下图:

驱动的代码(标准流式驱动)这里暂略,在介绍FakeGPS具体实现的时候在详细说明。

驱动相关代码编写完毕后,在该项目的选项上单击右键,选择Build选项即可编译该程序为dll文件(如下图)。

注:在/WINaaaabbbbCE600/PLATFORM/DEVICEEMULATOR/SRC/DRIVERS目录下创建FakeGPS时,注意要修改该目录下的Dirs文件,在结尾添加一句“FakeGPS  /

2DEF文件

文件名:FakeGPS.def (和FakeGPS .c同一个目录)

LIBRARY FAKEGPS

EXPORTS COM_Init

         COM_Deinit

         COM_Open

         COM_Close

         COM_Read

         COM_Write

         COM_Seek

         COM_IOControl

         COM_PowerDown

         COM_PowerUp

3makefile文件

就下面一句

!INCLUDE $(_MAKEENVROOT)/makefile.def

4sources文件

内容如下:

TARGETNAME=FAKEGPS

TARGETTYPE=DYNLINK

RELEASETYPE=PLATFORM

 

TARGETLIBS=$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib           

DEFFILE=FakeGPS.def

PREPROCESSDEFFILE=1

DLLENTRY=DllEntry

INCLUDES=../../inc

SOURCES=FakeGPS.c

5、修改platform.reg文件(注册表选项)

platform.reg文件在/WINCE600/PLATFORM/DEVICEEMULATOR/FILES目录下

打开该文件,添加如下内容:

[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/FakeGPS]

   "Prefix"="COM"

   "Dll"="FakeGPS.dll"

   "Index"=dword:8

   "Order"=dword:0

   "FriendlyName"="YeFan FakeGPS"

6、修改platform.bib文件(把DLL文件集成到NK中)

platform.bib文件在/WINCE600/PLATFORM/DEVICEEMULATOR/FILES目录下

打开该文件,添加如下内容:

FAKEGPS.dll  $(_FLATRELEASEDIR)/FAKEGPS.dll                         NK SHK

7、修改deviceemulator.pbcxml文件

deviceemulator.pbcxml文件在/WINCE600/PLATFORM/DEVICEEMULATOR/CATALOG目录下

<BSP></BSP>中添加如下一句:

 <BspItemId>Item:YF:FakeGPS:DeviceEmulator</BspItemId>

< CatalogFile ></CatalogFile>中添加如下内容:

  <Item Id="Item:YF:FakeGPS:DeviceEmulator">

    <Title>FakeGPS</Title>

    <Description>FakeGPS Driver</Description>

    <Type>BspSpecific</Type>

    <Location>#MS:Deviceemulator:DeviceDrivers:Location</Location>

    <SourceCode>      <Title>$(_WINCEROOT)/PLATFORM/DEVICEEMULATOR/SRC/DRIVERS/FakeGPS</Title>      <Path>$(_WINCEROOT)/PLATFORM/DEVICEEMULATOR/SRC/DRIVERS/FakeGPS</Path>

    </SourceCode>

  </Item>

注:千万不要用VS2005集成环境编辑pbcxml文件,我就是用该环境把pbcxml文件搞坏了,最后新建工程时,连模拟器选项都没有了。

 

最后的结果一览:

 

aaaabbbb

 

 

 

 

 

aaaabbbb   

 

   驱动代码及相关测试程序的代码,待详细讲解FakeGPS的时候在一一说明。

相关文章
|
JavaScript
fastadmin表格列表内部自定义按钮
fastadmin表格列表内部自定义按钮
664 0
fastadmin表格列表内部自定义按钮
|
Kubernetes 监控 Cloud Native
|
12月前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
986 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
缓存 负载均衡 网络协议
代理服务器之squid、lvs、nginx、haproxy之间的区别
根据不同的需求和场景,选择适合的代理服务器可以提升应用性能和可用性。
823 4
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
504 2
基于bind软件部署DNS服务器
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在智能客服中的应用:重塑客户体验
AI技术在智能客服中的应用:重塑客户体验
|
JSON 前端开发 Java
Spring Boot中的MVC支持
本节课主要讲解了 Spring Boot 中对 MVC 的支持,分析了 @RestController、 @RequestMapping、@PathVariable、 @RequestParam 和 @RequestBody 四个注解的使用方式,由于 @RestController 中集成了 @ResponseBody 所以对返回 json 的注解不再赘述。以上四个注解是使用频率很高的注解,在所有的实际项目中基本都会遇到,要熟练掌握。
|
关系型数据库 MySQL 数据库
MySQL中find_in_set函数的使用
1.语法 FIND_IN_SET(str,strlist) (1)str 要查询的字符串 (2)strlist 字段名; 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回
1202 0
MySQL中find_in_set函数的使用
|
存储 运维 NoSQL
悦数图数据 | 图技术在金融风控中的应用选型建议
在金融行业中,风控是业务中十分重要的一环。风控包含了非常多的业务类型,囊括了反赌博、反诈骗、反洗钱、反作弊等等,而根据不同的业务类型,又可以细分为更多的业务场景,例如信贷反欺诈场景,在贷款申请、授信、支用等各个环节都会涉及到,对风控的具体要求也不一样。
悦数图数据 | 图技术在金融风控中的应用选型建议
|
虚拟化 Windows
VMware虚拟机怎么安装win7系统【图文】
VMware虚拟机怎么安装win7系统【图文】
740 0