wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1387回复:14

死机?

楼主#
更多 发布于:2004-04-21 17:37
在windows 2000 下我写了一个dma的程序从卡上读一次数据,但是驱动安装好后。当从新启动机器后出现了蓝屏现象,出现了下面的提示:
PAGE_FAULT_IN_NONPAGED_AREA.和 IRQL_NOT_LESS_OR_EQUAL请指点一下这是什么原因?好象是页面和中断的错误是么?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-04-21 18:58
你WINDBG调试看看,是什么错误.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-22 08:34
谢谢,你的回复,我先是一下吧。
yutong1112
驱动牛犊
驱动牛犊
  • 注册日期2004-04-19
  • 最后登录2005-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-22 08:59
DMA内存不能分页~~~~~~~~~~~而且DMAC必须使用物理内存地址编程~~~~~
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-22 09:06
WOWOCOCK 我用的是driverstudio写的程序,用windbg能够调试么?还有,就是机器启动后就蓝屏了,这个怎么能够调试么?


wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-22 09:11
是的,我是使用的非分页的内存!整个DMA中就只有个KTransfer类的对象才用了内存而且是非分页的内存。
还有出现的错误是不是内存的错误和中断错误?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-04-22 09:12
WINDBG可以完全控制发生的异常,比SOFTICE功能更强大,在启动的时候蓝屏,WINDBG会跳出来,并显示相关的信息,建议你在VM里调试,对机器也没什么损伤。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-22 09:20
你能够说一下在WINDBG里面怎样调试驱动么?在WINDBG里打开应打开哪个驱动的文件进行调试是SYS还是其他的文件?我用的是DRIVER STUDIO写的程序应该打开哪个文件调试?
VM是怎么设置的?
yutong1112
驱动牛犊
驱动牛犊
  • 注册日期2004-04-19
  • 最后登录2005-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-22 09:32
WinDbg是DDK为W2K提供的吧~~~~~~~~~DS能用么?
yutong1112
驱动牛犊
驱动牛犊
  • 注册日期2004-04-19
  • 最后登录2005-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-22 09:35
你有没有访问不存在的内存啊?或者在DISPATCH_LEVEL或者更高的中断级上访问了分页内存?????
hellangel
驱动中牛
驱动中牛
  • 注册日期2004-02-16
  • 最后登录2016-04-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望236点
  • 贡献值0点
  • 好评度205点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2004-04-22 11:28
你能够说一下在WINDBG里面怎样调试驱动么?在WINDBG里打开应打开哪个驱动的文件进行调试是SYS还是其他的文件?我用的是DRIVER STUDIO写的程序应该打开哪个文件调试?
VM是怎么设置的?

WINDBG好专业哦!配制复杂哦,双机才能调试内核
打开SYS文件。
VM是虚拟机吧?有类似软件,可以虚拟一个操作系统在另一操作系统之上
春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少?
hellangel
驱动中牛
驱动中牛
  • 注册日期2004-02-16
  • 最后登录2016-04-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望236点
  • 贡献值0点
  • 好评度205点
  • 原创分1分
  • 专家分0分
11楼#
发布于:2004-04-22 11:29
你能够说一下在WINDBG里面怎样调试驱动么?在WINDBG里打开应打开哪个驱动的文件进行调试是SYS还是其他的文件?我用的是DRIVER STUDIO写的程序应该打开哪个文件调试?
VM是怎么设置的?

可以调试
WINDBG好专业哦!配制复杂哦,双机才能调试内核
打开SYS文件。
VM是虚拟机吧?有类似软件,可以虚拟一个操作系统在另一操作系统之上
春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
12楼#
发布于:2004-04-22 11:49
参考本站首页的
JIURL的借助VMware实现单机使用WinDbg
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-22 15:06
谢谢各位的帮助我那个死机的问题是把那个卡上的存储空间地址弄错了
。非法访问到了CPU的存储空间。
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-22 15:32
在武安和的书里有个PCI9054DMA传输的例子,有段获取段描述符的代码如下:
while (pXfer->SequenceTransferDescriptors(&ptd)) {
      // program the h/w using  ppTD
     t << \" Physical address 0x\" << ptd-_PhysAddr.LowPart
          << \". Length is 0x\" << ptd->td_Length << \".\"
              << EOL;
}

if ((ULONG) pXfer->BytesRemaining() == I.ReadSize())
      StartDMA(ptd->td_PhysAddr.LowPart,ptd->td_Length);
}

他在设备描述结构中设置dd.ScatterGather=FALSE;不支持分散聚集传输,也就是说在整个DMA缓冲区只有一个段描述,他为什么要用个WHILE循环来调用SequenceTransferDescriptors())反复的获取段描述符。
能不能调用SequenceTransferDescriptors())函数一次就把地址和长度
传给StartDMA()?
游客

返回顶部