阅读:1789回复:12
有关MTRRS的设置问题
1.如果一个PCI设备的地址空间为0E000_0000H to 0E000_4000H,我是否能在MTRR中对这段地址空间进行设置?MTRR的设置范围是否只能是物理内存?
2.再问一个很菜的问题,如果要在DOS下对这个PCI设备的地址空间进行操作,是否直接用比如MOV 0E0002000H,EAX 就可以了? |
|
沙发#
发布于:2002-11-14 10:51
MTRR只需要设置物理内存范围。
可以直接这样访问,但要保证你当前的环境是可访问4G内存范围。怎样切换到这种32位平板式内存空间访问环境,本站有专门贴介绍。最好用指针如: mov ebx,040002000h mov eax,[ebx] |
|
|
板凳#
发布于:2002-11-14 11:08
谢谢,我想再问一下
对这个PCI设备的地址空间为0E000_0000H to 0E000_4000H,我能否在MTRR中进行设置?或者只能设置为UC方式? 另,你是否熟悉815E的芯片组? |
|
地板#
发布于:2002-11-14 11:14
应该是不能在MTRR中设置,MTRR只对系统的物理内存(不包括PCI设备的映射内存)有效。
说不上很熟悉,但有做过815E的BIOS。 |
|
|
地下室#
发布于:2002-11-14 17:47
我看了intel的datasheet,它并没有明确地说明,而且看它给的例子中有
MTRRPhysBase5 = 0000_0000_A000_0001h MTRRPhysMask5 = 0000_000F_FF80_0800h Cache A0000000h-A0800000 as WC type. 所以很迷惑,是否它也可以对memory mapped的io devices 可以用,只不过产生什么后果就不知道了 做过815E的BIOS?应该另外开贴给分的,不过先就着问一下 如果我只用internal graphics,并且设了最高1M作为share memory,这1M空间是否保存了一些与显示有关的驱动程序? 我想这驱动就是i815.vga。问题在于这儿:在i815.vga中,它肯定要去内存的容量,那它是根据写在数据区的信息来确定,还是根据北桥填的值? |
|
5楼#
发布于:2002-11-15 08:45
share memory是显存,不是存放显示驱动的内存,而是直接写屏用的内存。(知道这样说清楚了么)驱程用显存根据PCI配置空间的资源BAR寄存器获知。
基本内存的减小受share memory影响,它是读北桥的值决定,而北桥的值又会BIOS根据用户在CMOS中的设置写入。 看看MTRRPhysBase指物理内存。 |
|
|
6楼#
发布于:2002-11-15 09:40
----北桥的值又会BIOS根据用户在CMOS中的设置写入。
北桥的值是BIOS根据内存条的特性写入。我曾经玩了一个小把戏,插一根双面的256的内存条,在bios中又把它改为192m(改北桥的寄存器就可以了),然后启动dos,读写192以上的值失败了。然后我又直接在dos下改北桥值为256m内存的值,黑屏了!!!接下来(摸黑)再改为192m,屏幕又正常显示。问题在于显示上面,所以我又写了一个程序,把北桥值改为256,读写250m的值到192m以下的内存中,在改北桥的值到192,显示告诉我,读写250m的内容成功了!所以我很奇怪,i815.vga是怎么操纵这一切的!!! 不好意思,再纠缠一下第一个问题,(我是想对这条路彻底死心...) 下面是从intel 的datasheet中拷的The memory type range registers (MTRRs) provide a mechanism for associating the memory types with physical-address ranges in system memory. They allow the processor to optimize operations for different types of memory such as RAM, ROM, frame-buffer memory, and memory-mapped I/O devices. ...... Intel recommends the use of the UC (uncached) memory type for all physical memory addresses where memory does not exist. |
|
7楼#
发布于:2002-11-15 11:59
BIOS是这样做的
1、通过I2C读取当前物理内存的总量 MS(memory size) 2、读取CMOS中用户设定的共享内存大小SS(share memory size) 3、计算TOM(top of memory)=MS-SS写入北桥。 显示芯片很可能就从TOM中的值为显存起始地址,由硬件内部逻辑实现。所以就有你上面的那种现象。程序欲访问显存得将地址按PCI规范重新映射后,才能读写,而不是象你那样直接在DOS读写,那样肯定失败,而你直接修改TOM则显示芯片不知道怎样读写显存了。 |
|
|
8楼#
发布于:2002-11-15 12:53
BIOS是这样做的 ---从source code中是读北桥寄存器70h(对815e来说)
---北桥的值就是根据1所读出来的信息判断再填入的,不会减去SS,看寄存器52H的资料。
我在修改过程中不显示,是能对192-255M之间的内存进行操作的。如果share memory不是存放显示驱动的内存,而是直接写屏用的内存的话,我修改TOM应该没有影响啊?而且我插一块PCI显卡的话,就一切如我所愿了,不会有黑屏等现象。 罗嗦了,请多指教!! |
|
9楼#
发布于:2002-11-18 11:50
自己再up一下
|
|
10楼#
发布于:2002-11-19 09:17
Hi,Sorry.几天没来。
我想有点误解了,我说的TOM是指内存平面的最大物理内存,而你说的52H单元是指插在DIM槽上的物理内存容量,它是包含显存的就是我说的MS。由于显存也存在于DRAM中,所以软件对这种系统不是能访问所有的物理内存,显存部分必须重映射后才可访问,还有如果你更改了52单元而没调整TOM,那显存部分就成了不存在的内存空间了。 由于是1年前的事了,具体每个Register的定义我也忘了,看你这么一问,我得再细细读DATASHEET。 如果有错误请指正。 |
|
|
11楼#
发布于:2002-11-19 09:41
谢谢你的耐心回答 :)
TOM 应该就是TOM OF MAIN MEMORY吧? ----显存部分必须重映射后才可访问 我就是不太了解这一点,具体是怎么实现的? ----如果你更改了52单元而没调整TOM 815E芯片也就支持三根内存条,通过填52H,54H,每4个BIT描述一根内存条,所以TOM就是把这三个值加起来。当然此时北桥的总值跟填在主存中数据区的信息就是不一样了,主存中的信息就是少了64M。 |
|
12楼#
发布于:2002-11-22 09:58
多谢minsoft的回答,周末了,给分先!!
不解之处,希望各位有兴趣,有能力的大虾继续讨论,说的妙的话另外开贴给分。 |
|