WINDOWS功能内核驱动程序如何与实际硬件通信



所以我知道内核驱动程序位于硬件设备的顶部,然后要通过用户空间与设备通信,您需要通过CreateFile && Read && Write与内核驱动程序进行通信。我看过Window内核驱动程序的设计及其示例代码,无论是USB、PCI还是。。。

现在我想了解的是内核驱动器是如何与硬件通信的?驱动程序代码在哪里?我们通常会在某个设备上找到负责读取/写入寄存器的代码吗?驱动程序需要什么才能与设备通信?有人告诉我,是BAR0值将HW映射到虚拟内存区域,这意味着我们想在物理设备上访问的任何地址都将从该地址开始。这是正确的吗?什么如果我有BAR0=0xfc500000,我必须在设备上找到某个寄存器的地址,然后将其作为偏移量广告吗?

驱动程序需要从操作系统获取硬件资源。在PCI设备示例中,您将获得MMIO地址和中断矢量。MMIO地址是PCI控制器和BIOS也映射设备的物理地址。

驱动程序在CCD_ 2回调(在KMDF中(中获得该值,然后需要使用CCD_ 3((将其映射到内核虚拟地址。一旦你从理论上得到内核虚拟地址;指针";到硬件内存空间,您可以根据需要访问寄存器。

但是建议使用HAL宏来避免高速缓存和访问该存储器的其他问题。例如READ_REGISTER_ULONG64

要查找地址,请注册硬件设备规范

欲了解更多信息,请阅读";读取和写入设备寄存器";

最新更新