阅读:1076回复:1
请教:WDM 中断死机问题
/卡是一块PCI声卡,在驱动安装之前,用Windriver查看其资源,
Bar0=00000001 INTLN=0 然后准备驱动。非常简单的驱动。几乎什么都没有添加,直接用DriverWorks的生成的框架。 请看OnStartDevice(KIrp I)部分: NTSTATUS Pcimodem_3Device::OnStartDevice(KIrp I) { NTSTATUS status = STATUS_SUCCESS; I.Information() = 0; PCM_RESOURCE_LIST pResList = I.TranslatedResources(); KPciConfiguration PciConfig(m_Lower.TopOfStack()); status = m_IoPortRange0.Initialize( pResList, PciConfig.BaseAddressIndexToOrdinal(0)); if ( !NT_SUCCESS(status) ) return status; } 如果在OnStartDevice中简单的只初始化端口范围,则这个驱动可以安装。安装之后, 在硬件管理器中查看该卡的资源时, 中断号11, 口地址范围:1400-14ff 这是正常的。 但是,只要添加了与中断有关的部分,见如下代码: NTSTATUS Pcimodem_3Device::OnStartDevice(KIrp I) { NTSTATUS status = STATUS_SUCCESS; I.Information() = 0; PCM_RESOURCE_LIST pResList = I.TranslatedResources(); KPciConfiguration PciConfig(m_Lower.TopOfStack()); status = m_IoPortRange0.Initialize( pResList, PciConfig.BaseAddressIndexToOrdinal(0)); if ( !NT_SUCCESS(status) ) return status; //--------------------------------------------------- // Initialize and connect the interrupt status = m_Irq0.InitializeAndConnect( pResList, LinkTo(Isr_Irq0), this ); if (!NT_SUCCESS(status)) return status; InitializeDpcForIsr(LinkTo(DpcFor_Irq0)); return status; //--------------------------------------------------- 添加了与中断有关的部分,该中断是一个共享类型。 } 驱动可以编译通过。但安装时,没有任何提示信息,机器就死机了。 猜测是中断的问题,例如冲突等,初始化中断的问题。但是,这是标准的例子, 没有再多添加任何其他语句。 请论坛的朋友帮忙诊断一下。 谢谢! |
|
|
沙发#
发布于:2003-10-23 20:45
不懂!
|
|