sangonb
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1839回复:3

PCI驱动请教

楼主#
更多 发布于:2008-06-02 17:17
菜鸟求助,望大侠不吝赐教啊:
(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设备空间映射区域所分配的内存,二者是什么关系?是完全独立的吗?
skymelai
驱动牛犊
驱动牛犊
  • 注册日期2007-08-10
  • 最后登录2010-01-29
  • 粉丝1
  • 关注0
  • 积分81分
  • 威望711点
  • 贡献值3点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-08-23 10:32
哎,我也搞不懂这些东西.
achillowy
驱动牛犊
驱动牛犊
  • 注册日期2009-05-26
  • 最后登录2010-02-18
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望171点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-11-19 15:11
1. 可以相同也可以不同 比如PCI9052的bar0和bar1物理上是相同的。
2 记不太清了,写全1后有个返回值,比如FFFFFF00,写全1后,相当于做一个异或之类的操作,然后返回值000000ff就可以知道大小了。
另外你说bar只是1个基地址 这应该是不对的,bar除了基地址还有大小,和其他一些东西,比如是IO还是mem
3 应该是通过驱动吧,不过PCI端寄存器应该可以直接读到,这个我也不太懂。
4 我也很菜 没看懂问题。。。
philoman
驱动牛犊
驱动牛犊
  • 注册日期2005-05-29
  • 最后登录2011-07-13
  • 粉丝0
  • 关注0
  • 积分73分
  • 威望235点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-12-08 21:18
当然不一样,各有各的用处,当然你选用哪一个地址空间进行映射是你的自由
游客

返回顶部