none
何宗键老师,向您请教一个问题 RRS feed

  • 问题

  •  
    尊敬的何老师:
    您好!
    我是您的《Windows CE嵌入式系统》的读者,我最近在做PCI驱动开发的时候遇到一些问题,想向您请教一下,希望您能帮助我!
    问题是是这样的,我现在有一个PCI设备,在x86平台上,我要做驱动,该设备有一个memory区和一个I/O区,我用DDKReg_GetWindowInfo分别获取到它们的基地址和长度,I/O的是可以直接使用该地址进行访问的,但是Memory是不能直接访问,于是我就使用HalTranslateBusAddress对其进行转换,然后在用MmmapIoSpace进行映射,可是即便如此我还是不能正常操作该设备,请问是不是我映射做错了?
         我查了我的ddk_bus中的ddk_bus.c,HalTranslateBusAddress竟然什么都没有做,只返回了我传入的地址。
    NTHALAPI
    BOOLEAN
    HalTranslateBusAddress(
        IN INTERFACE_TYPE  InterfaceType,
        IN ULONG BusNumber,
        IN PHYSICAL_ADDRESS BusAddress,
        IN OUT PULONG AddressSpace,
        OUT PPHYSICAL_ADDRESS TranslatedAddress
        )
    {
    #if !defined(x86)
     // AddressSpace 0x0 indicates memory, 0x1 is I/O space.  If not x86, default
     // is memory.
     *AddressSpace = 0;
    #endif
     
        *TranslatedAddress = BusAddress;
     
        return(TRUE);
    }
     
    在您的书中,您写到“由于不同平台的硬件设备都不一致,因此对于每个平台,BSP的提供商都要负责提供针对具体平台的ceddk库......”
        请问我这种情况是不是属于BSP没有提供我需要使用的ddk库啊?
    如果我不使用ceddk,我直接操作该memory区,我该怎么操作?
     
    新手上路,麻烦何老师了!
    万分感激!
     
     
    您的读者 will
    2009-08-20
     
    2009年8月20日 5:21