两个问题:
1,很初级的问题:调试驱动一定要修改bib和reg文件吗?能否直接用activeSync把驱动的dll拷贝到目标设备的windows目录下,然后在应用程序中用loadsource 调用来测试?我这样试着做时,在运行到驱动里面操作GPIO的地方就出现了Access Volatile的错误,撒原因呢,跟内核态和用户态有关吗?
2,有人说可以不用改注册表等配置文件,只需在调用驱动之前,把驱动的dll拷贝到目标设备,RegisterDevice一下,调完后就deRegisterDevice,这样可以吗?
thanks.
引用: 引用楼主 rushonin 的帖子:
两个问题:
1,很初级的问题:调试驱动一定要修改bib和reg文件吗?能否直接用activeSync把驱动的dll拷贝到目标设备的windows目录下,然后在应用程序中用loadsource 调用来测试?我这样试着做时,在运行到驱动里面操作GPIO的地方就出现了Access Volatile的错误,撒原因呢,跟内核态和用户态有关吗?
2,有人说可以不用改注册表等配置文件,只需在调用驱动之前,把驱动的dll拷贝到目标设备,RegisterDevice一下,调完后就deRegi…
loadsource写错了,应该是loadlibrary。
谢谢上面各位的建议。
这可能不是一个简单的驱动调试方法的问题了!
现在实际的问题是,用loadlibrary加载了一个dll后,用 GetProcAddress得到这个dll的导出函数,然后调用这些导出函数发现有问题:
确认已经成功的进入了一个导出函数,在执行到对GPIO口的寄存器操作时,出现Access Volatile的非法访问的错误,这是什么原因,是否是访问权限的问题?
引用: 引用 4 楼 ceFighter 的回复:
用CETK调试吧
我用KITL,应用程序动态加载。CETK是下一步要学习的东西。
楼主没有什么访问权限吧。充其量就是堆内存等没有使用正确。慢慢找原因。
可能是这样的:
我这个驱动不是标准的流式驱动,并没有由设备管理器加载.
而是在应用程序中用loadlibrary加载驱动的dll ,然后用GetProcAddress 得到dll的入口函数,在应用程序中调用。
dll被加载进了应用程序的地址空间,而dll中有对GPIO的操作,属于内核空间, 这样访问就非法了。
是这样吗,i'm not sure!
对GPIO的操作用户应用程序是可以操作的,LZ应该检测自己的调用方式,还有DLL本身是否有问题
谢谢各位,还是打算把驱动封装成标准的流驱动,再用createfile来调用的。
用loadlibrary + GetProcAddress的方式来调用驱动有隐患,因为绕过了设备管理器的管理。
晚些时候结贴, 看还有没有新观点。