调试wince流设备驱动遇到的问题

 

刚学习wince一个月,前几天调了流设备驱动,顺利通过,今天再回过头去看发现了一些问题:


之前的方法步骤:
1、在drivers目录下新建flush文件夹,修改dirs文件,在flush文件夹里面新建flush.cpp、flush.def、sources、flush.reg等文件,编译通过,生成flush.dll文件,下载至模拟器,通过驱动调试助手,导入注册表,激活驱动,驱动加载成功。在subproject下新建flushtest项目,编译生成flushtest.exe文件,下载至模拟器运行,可正常调用flush.dll文件.


2、修改platform.bib、platform.reg文件,重新makeimg后,下载至模拟器,驱动可自动加载成功,应用程序可正常调用!

今天打开修改过的platform.bib文件,发现之前是将
flush.dll $(_FLATRELEASEDIR)/flush.dll NK SH
加在platform.bib的最后一行,即加在了files下
FILES
; Name Path Memory Type
; -------------- ---------------------------------- -----------
将其剪切至

MODULES
; Name Path Memory Type
; -------------- ---------------------------------- -----------
重新makeimg,下载后通过驱动调试助手发现驱动加载失败。
在网上看到HJB大侠的博客,有一篇图解WinCE6.0下的内核驱动和用户驱动的文章,里面有他调试成功的相关文件,下载了源代码后,将WCEDrv.dll及WCEDrv.reg文件下载至模拟器,通过驱动调试助手,导入注册表,激活驱动,驱动加载成功。同样修改了platform.bib、platform.reg文件,重新makeimg后,下载至模拟器,有两个驱动加载成功,两个加载失败,发现加载到用户空间的驱动加载成功,加载到内核空间的驱动加载失败。注册表中flags的设置,决定了加载到内核空间或用户空间。


以下为注册表内容:

[HKEY_LOCAL_MACHINE/Drivers/WCEDrv1]
"Prefix"="AAA"
"Dll"="WCEDrv.dll"
"Index"=dword:1
"Flags"=dword:8 ; DEVFLAGS_NAKEDENTRIES
"Order"=dword:0

 

[HKEY_LOCAL_MACHINE/Drivers/WCEDrv2]
"Prefix"="BBB"
"Dll"="WCEDrv.dll"
"Index"=dword:1
"Flags"=dword:8 ; DEVFLAGS_NAKEDENTRIES
"Order"=dword:0

 

[HKEY_LOCAL_MACHINE/Drivers/WCEDrv3]
"Prefix"="CCC"
"Dll"="WCEDrv.dll"
"Index"=dword:1
"Flags"=dword:18 ; DEVFLAGS_LOAD_AS_USERPROC | DEVFLAGS_NAKEDENTRIES
"Order"=dword:0

 

[HKEY_LOCAL_MACHINE/Drivers/WCEDrv4]
"Prefix"="DDD"
"Dll"="WCEDrv.dll"
"Index"=dword:1
"Flags"=dword:18 ; DEVFLAGS_LOAD_AS_USERPROC | DEVFLAGS_NAKEDENTRIES
"Order"=dword:0

 

驱动动态加载可以加载成功,
1、为什么加入到bib文件放在files下可正常加载驱动,放在modules下不行呢?
2、为什么加载到用户空间可以加载到内核空间不行呢?时不时漏掉了什么步骤?

 

经HJB大侠的提醒,如果驱动要加载到内核态,需在SH后加一个K,即SHK,查了一下(之前觉得比较简单,忽略了)

类型

描述

S

系统文件。

H

隐藏文件。

R

只压缩模块的资源部分。

C

压缩模块的所有部分。

D

禁止调试。

N

模块是不可信任的。

P

告诉Romimage.exe不需要检查CPU的类型。

K

告诉Romimage.exe必需固定该模块的内核地址。有该标记的模块只能被LoadKernelLibrary函数加载。

X

告诉Romimage.exe对该模块签名。

M

运行时加载整个模块,不要按需分页。

L

告诉Romimage.exe不要分离ROM DLL

 

重新修改为

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

果然,修改后重新编译下载,驱动加载成功!

还是基础知识太弱,动手太少,后面得加快学习进度啊!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值