阅读:916回复:1
求助高手:如何修改PCI映射内存的cache属性
我有一块PCI板卡,卡上有CPU及SDRAM,当驱动程序把该卡上SDRAM的物理地址映射为WINDOWS程序侧的线性地址后,Windows程序读取该片内存时,只会获得第1次卡上CPU写入的值,原因是该片内存被Cache了。请问如何修改该片内存的Cache属性?
1、通过该线性地址,找到该片内存对应的页表地址,然后修改该片内存空间对应的页表项属性,将Cache属性去掉。请问Ring 3级的程序能够直接修改页表吗? 2、驱动程序在调用VMMCall _MapPhysToLinear < dwPhysAddr, dwBytes, dwFlags >时,dwFlags中是否可以设置No Cache属性? 另外,PCI板卡插入计算机后,其物理地址是如何分配的? |
|
沙发#
发布于:2003-03-01 14:55
问题基本解决,经过确认,是PCI板卡上的CPU做了写Cache,造成数据没有Write through到SDRAM。
VXD的VMMCall _MapPhysToLinear < dwPhysAddr, dwBytes, dwFlags >,dwFlags就是设置Cache属性的。 WDM的 MmMapIoSpace( IN PHYSICAL_ADDRESS PhysicalAddress, IN ULONG NumberOfBytes, IN BOOL CacheType);中的CacheType设置为FALSE,映射后的内存就不会进行Cache操作。 第1次接触驱动程序的编写,让大家见笑了。 |
|