gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-08-22 13:23
你是说干掉了PageOutWhenUnopened 也会导致无法关机吗,我也试试看。
saa7146含dma控制器,能够进行主动的dma控制,对于视频流的采集他是通过对寄存器的设置进行的,当受到srb_read后,从srb中取得数据缓冲区,由于7146支持scatter/gather,因此必须根据srb中缓冲区的情况初始化好一个页面,该页面内容为缓冲区中页面地址的索引,然后将索引页面的物理地址传给7146,写寄存器启动dma,视频数据就写到缓冲区中了。当一个frame的数据写完后,7146会产生一个中断,在中断处理程序中完成srb,取得新的srb,初始化索引页面.....
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2002-08-23 16:00
**********
gung
**********
我们的DMA控制其实差不多,都是通过控制芯片的寄存器,不同的是你是在寄存器中指定数据缓冲区的页面地址索引,而我是要在一个寄存器中制定risc程序的地址,写数据由risc程序完成。

//////////////////////////////////////
问题:我由Srb->CommandData.DataBufferArray.data得到目标地址
用IoAllocateMdl获得一缓冲区,可是当我执行命令MmBuildMdlForNonPagedPool时却出现break due to page fault fault=000的错误,msdn中说必须要用这个函数,可是为什么有通不过呢?
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2002-08-23 16:22
你能保证srb中提供的缓冲区是非分页内存区的吗,好像是分页的吧
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-08-23 16:27
另外,你说“用IoAllocateMdl获得一缓冲区”,我的理解缓冲区已经是系统申请好了,用srb传给你的,IoAllocateMdl只是针对这个缓冲区构造一个描述子罢了,做dma时不一定非要用mdl的,从srb中就可以得到缓冲区的逻辑地址和物理地址,直接写寄存器启动dma好了
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2002-08-23 16:35
*********
gung
**********
取自msdn:
IoAllocateMdl can be used by a driver that needs to break a buffer into pieces, each mapped by a separate MDL, or to map a driver-allocated buffer. The driver should call MmBuildMdlForNonPagedPool with the MDL allocated by this call to set up an MDL describing a driver-allocated buffer in nonpaged pool.
这里说是driver的buffer要用MmBuildMdlForNonPagedPool 将其设置成不分页的!
你没有进行转换可以写吗?
////////////////////////////
问题:分页内存与不分页内存的区别及用途?
 :)
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2002-08-23 16:54
这里说是driver的buffer要用MmBuildMdlForNonPagedPool 将其设置成不分页的!
你没有进行转换可以写吗?
////////////////////////////
问题:分页内存与不分页内存的区别及用途?
 :)  


不是这样的,当你拿到srb时,buffer已经是申请好的,是否分页已经确定了,不可能再进行设置和转换的,mdl只是向某些用到这种结构的函数描述这块内存的具体情况,如大小,属性,逻辑地址等等,不管有没有mdl,只要有相应权限都可以写这块内存的,我现在就没有用mdl,直接写的内存
    typedef struct _MDL {
        struct _MDL *MdlNext;
        short MdlSize;
        short MdlFlags;
        struct _EPROCESS *Process;
        ULONG *lpMappedSystemVa;
        ULONG *lpStartVa;
        ULONG ByteCount;
        ULONG ByteOffset;
    } MDL;

我的理解,非分页内存除了没有被系统的分页机制所映射外,它还永远驻留,且能保证物理上连续,适于做dma的缓冲区,分页内存则若没有被锁定的话很容易被系统page out,且物理地址通常不连续,未锁定时物理地址不固定,不能用于dma,但是srb提供的内存可以是分页的(不知是不是一定分页),但已经预先锁定,可以直接使用
mike_wang
驱动中牛
驱动中牛
  • 注册日期2003-01-22
  • 最后登录2012-01-04
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2002-08-23 17:04
**********
gung
***********
非常感谢你的回答!:)
我先试试看!


weichaozhou
驱动牛犊
驱动牛犊
  • 注册日期2002-08-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2002-10-21 13:51
如果视频流的格式是RGB8的,如何将调色板传给directdraw的,在intersectinfo中好像只有ks_vedio,没有ks_dataformat_video_pallete,有无人知道?
zuowei999
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2018-02-05
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望53点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
28楼#
发布于:2002-11-01 09:08
看不明白!
tony221
驱动牛犊
驱动牛犊
  • 注册日期2001-12-03
  • 最后登录2013-04-16
  • 粉丝0
  • 关注0
  • 积分187分
  • 威望61点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2005-03-16 16:16
gz
bluewater
驱动牛犊
驱动牛犊
  • 注册日期2005-03-15
  • 最后登录2005-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2005-03-21 15:15
请问楼上各位高人,在Minidriver中,中断是如何处理的?
调用HwInterrupt之前,需要一些什么样的设置?是不是只设置一下IRQL就可以了? 要不要中断资源的申请?该如何做?
非常多谢!!被老板压着做Minidriver就差这最后一步了,看了一些例子代码,还是不太明白。
上一页 下一页
游客

返回顶部