阅读:1911回复:3
PCI驱动请教
菜鸟求助,望大侠不吝赐教啊:
(1)PCI配置空间中有6个BAR,但它们在物理上是完全相同的吗? 我选用的PCI接口芯片为9056,既然9056从物理上将MEM BAR 和I/O BAR 的地址分开,那判断BAR的最低位为‘0’还是为‘1’,还有什么意义? (2)BAR中的内容理当由OS分配,但机器刚上电时,BIOS检测到PCI设备时,一定读取了BAR中的信息吧,但BAR中原本存地是什么内容? 有本书上讲:通过向BAR中写全‘1’:“FFFFFFFFH”,来获悉该PCI设备所申请空间的大小(MEM 或 I/O),然后根据这个值,将BA,写入BAR吗? 有本书举例说明: 如果BAR中返回的值是“1M”,则OS给该PCI设备分配的BAR必须 为“1M”的整数倍。为什么?BAR只是一个基地址,在哪里有什么关系呢? (3)PCI设备的驱动程序在PCI设备与CPU通信的过程中是在时时刻刻起作用的吗?每次数据发送和接受都必须通过驱动程序吗? (4)OS对PCI设备所分配的内存区域就是所谓的PCI配置空间的内存映射区域吗?如果是,为什么不正好分配256B?PCI配置空间的大小不正好是256B吗?(设备有关区的很多空间甚至都用不到)。OS为什么的同时对PCI设备和用户区域分配内存?是不是PCI设备每次和CPU通信时,数据都暂存在所谓的“用户区”,那么对用户区内存和PCI设备空间映射区域所分配的内存,二者是什么关系?是完全独立的吗? |
|
沙发#
发布于:2009-08-23 10:32
哎,我也搞不懂这些东西.
|
|
板凳#
发布于:2009-11-19 15:11
1. 可以相同也可以不同 比如PCI9052的bar0和bar1物理上是相同的。
2 记不太清了,写全1后有个返回值,比如FFFFFF00,写全1后,相当于做一个异或之类的操作,然后返回值000000ff就可以知道大小了。 另外你说bar只是1个基地址 这应该是不对的,bar除了基地址还有大小,和其他一些东西,比如是IO还是mem 3 应该是通过驱动吧,不过PCI端寄存器应该可以直接读到,这个我也不太懂。 4 我也很菜 没看懂问题。。。 |
|
地板#
发布于:2009-12-08 21:18
当然不一样,各有各的用处,当然你选用哪一个地址空间进行映射是你的自由
|
|