阅读:1913回复:10
关于非PNP的ISA驱动软件设计
我现在要做的驱动是跳线的ISA,还用的DIP开关确定基址,WIN2K根本就无法识别,所以在把大体框架(完全是虚拟设备)的基础上,我开始想办法来系统识别设备和分配资源
首先我是想硬编码hard-code,还是没办法 于是就想用NT4.0下的办法,在安装驱动的时候先让用户设置基址portbase和irql级别,程序就把设置放入到注册表中,在重新启动以后我就按ISA和EISA总线进行设备搜索,如果找到合适的就按注册表分配资源 不知道我这个办法是不是欠妥当啊?或者说是根本就是瞎搞?请大家评论一下,我每次有了进展都会向大家汇报的,希望大家多多支持 谢谢 |
|
沙发#
发布于:2003-07-26 23:57
友情混分!
|
|
板凳#
发布于:2003-07-27 11:42
你的问题是不是说你的ISA地址每次可能不同,所以向系统申请资源的时候不能把地址定死,由于系统不能检测ISA(非PNP ISA)硬件地址,所以难点是驱动程序怎么知道每次硬件设置的地址是多少?硬件怎么来通知驱动!
不知道我说的对不对! |
|
|
地板#
发布于:2003-07-27 17:17
我的意思是由于我的ISA板卡是遗留设备采用的DIP跳线来设置PORTBASE,所以地址当然是死的,不存在动态分配,我说的难点是在于采用的方法是只有在OS启动的时候由程序查询ISA和与其兼容的EISA总线来查找设备
真是不好意思,我也不太清楚我这样做是不是有问题,因为微软毕竟在WIN2K中努力取消掉关于非PNP的ISA设备规范 这是我想问你们的,不是你来问我的啊!!!!:) |
|
地下室#
发布于:2003-07-27 19:38
那你的问题还有什么难度吗?把它写成NT试的驱动或者WDM试的驱动都可以的,我刚写过,我是用DS写的,两者的分别是资源的申请,在NT试里,是你把你的硬件信息写到注册表里,在驱动程序里查询注册表,把你的这些信息构造资源请求列表,然后向系统申请资源,系统同意后给你分配资源,这些用DDK写的话,都在驱动的入口点实现。
如果是WDM的话,你的硬件信息,是写在INF文件里,安装的时候就指定了这些信息。 你明白吗? |
|
|
5楼#
发布于:2003-07-29 15:47
非常感谢!!!我正在实验呵呵,等结果出来再汇报吧:)
|
|
6楼#
发布于:2003-07-29 15:55
还是用WDM比较好
|
|
|
7楼#
发布于:2003-07-29 15:57
还是用WDM比较好 你比较过他们的性能吗?? |
|
|
8楼#
发布于:2003-07-29 17:06
引:/libin2309在NT试里,是你把你的硬件信息写到注册表里,在驱动程序里查询注册表,把你的这些信息构造资源请求列表,然后向系统申请资源,系统同意后给你分配资源,这些用DDK写的话,都在驱动的入口点实现。/
说的很有用.用DS的NT式 |
|
9楼#
发布于:2003-07-30 13:17
我的INF文件写好了,在测试过程中发现系统不能辨认该设备,但是好象它连错误代码都给不出来哦,但是我的驱动程序在系统启动时能自动加载运行,好象驱动程序还是没有和设备联系起来
我的工作流程(简要)是: 0. ISA BUS上插上设备 1。拷贝SYS文件到相关目录以及到注册表登记 2。重新启动PC 3。手动安装INF文件,再重启动 4。结果出来了感叹号! 我的程序(也是简要)是: 0。构造资源列表 1。DbgPrint(\"start!!!!!\"); 2。call:IoReportDetectedDevice 3。if (!NT_SUCCESS(status)) DbgPrint(\"ERROR:%X\",status);return; 4. DbgPrint(\"successful!\") 结果是除了start!!!!!出来了,其他什么都没出来,哎~~~~~~~~~~~~~ 现在我的设备在设备管理器里面还是一个黄色的感叹号,没资源冲突,只是说: 无法加载驱动程序,设备工作异常(代码31) 提问: 1。插在ISA BUS上的接口板设备的设备类名是什么,我定的是SYSTEM,现在看来一定不对,那应该是什么呢,是不是要自定义呢? 2。我的问题可能出现在什么地方呢 mail:ck_ok777@hotmail.com QQ:41940185 非常感谢! |
|
10楼#
发布于:2003-08-01 23:16
工具:DDK+VC6+WIN2K
设备:带DIP跳线的ISA板卡 程序:单层驱动,单个设备 事情真是越来越复杂了 1。我搭好一个程序框架,能读能写 2。写了INF文件,手工安装,在设备管理器里面告诉我工作正常,包括资源也使用得很好一样 当我决心和真实硬件打交道的时候,问题出现了: 3。加入了程序模块,核心是IoReportDetectedDevice,设备管理器里出现了黄色的感叹号,错误代码31,意思是无法加载驱动 4。于是加了个ADDDEVICE例程,结果发现并没有调用它 5。上次那个朋友说安装时写注册表,然后OS启动时读注册表,然后申请资源,申请成功就行了,于是调IoGetDeviceProperty去查询我用INF写在注册表里的信息,就BSD!错误代码C000000E,意思是没有这样的设备,只好去掉第5步的修改 6,于是在IoReportDetectedDevice前面加了个IoReportResourceForDetection,其中PCM_RESOURCE_LIST为NULL,只是实验性地试一试,结果在安装时就出现STATUS_INVALID_IMAGE_NOT_MZ错误,说IMAGE文件格式错误,所以无法加载我的驱动程序,硬重启后又BSD!调试错误代码为C000026C,意思是无法载入驱动程序,我看了看注册表,该有驱动地方的都有驱动啊,怎么可能无法载入呢? 好现象是在安全模式下进入,自动提示发现新硬件,在控制面板里面对未知设备的程序更新(错误代码1),windows2000自动就找到了我的INF安装文件,说这个最匹配,错误原因可能是由于它在注册表中没有发现此设备的 ConfigFlags 值,出现此情况常常是因为 Windows 2000 已枚举了此设备,但没有找到关联的 .inf 文件,我很高兴,于是卸载程序,重新进入正常模式,结果什么都没有发生,安装以后还是BSD 7。于是到了厕所抽烟,感觉是一直以来要不然没设备,要不然没驱动,两个就是没能联系到一起,帮助文档上说是IO管理器如果发现有匹配的驱动给分配给该设备,问题是我该告诉IO manager关于ISA的什么呢,不就是什么资源啊厂商啊版本号啊接口啊驱动是谁啊。。。但是物理设备到底是什么它还是不知道,怎么能让IO管理器知道呢 驱动实在让人高兴不起来 提问: 到底问题在什么地方?????????????????? STATUS_INVALID_IMAGE_NOT_MZ错误到底是怎么引起的,什么意思啊?!?! 非常感谢 附:调试错误代码 Unknown bugcheck code (c000026c) Unknown bugcheck description Arguments: Arg1: e12c4ea8 Arg2: c000012f Arg3: 00000000 Arg4: 00000000 Debugging Details: ------------------ IMAGE_NAME: one.sys MODULE_NAME: one DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0xC000026C LAST_CONTROL_TRANSFER: from 8042c068 to 80452e70 STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. f081e80c 8042c068 00000003 00000000 00000100 nt!DbgBreakPointWithStatus+0x4 f081eb94 80482c2a 00000001 e12c4ea8 c000012f nt!KeBugCheckEx+0x154 f081f02c 804c8a9b c000026c 00000002 00000001 nt!MmAdjustWorkingSetSize+0xbe0 f081f1a0 8048cf4e c000026c 00000002 00000001 nt!ExRaiseDatatypeMisalignment+0x69 f081f210 804c8ec9 c000026c 00000002 00000001 nt!ExRaiseHardError+0x12e f081f278 80461691 c000026c 00000002 00000001 nt!ExRaiseDatatypeMisalignment+0x497 f081f298 ffffffff f081f2ac 80461691 00000088 nt!ExReleaseResourceForThread+0xbd5 804095d8 00000000 8044c721 00000000 00000000 0xffffffff |
|