ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2807回复:14

小弟关于PCI配置空间基址寄存器的几个问题

楼主#
更多 发布于:2004-06-03 08:56
请仙人指路:
(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设备空间映射区域所分配的内存,二者是什么关系?是完全独立的吗?
不吝赐教,小弟在线等 :(
ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-15 14:20
那位高手可以指教一下吗?
这个问题也许真的很弱,没有人回答;但高手也毕竟是从菜鸟成长起来的吧,就可怜一下菜鸟求教五门的苦楚吧。谢谢 :(
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-15 15:39
俺不是高手,
但觉得你还没有很好地了解基础的PCI总线原理、没详细地看PCI文档、也没有花很多的时间去阅读相关源代码,

在这种情况下就立即开始钻入到技术细节当中去,
肯定会遇到大量的细节问题尤其是一些基本的原理性问题无法解决。

所以,
你现在应该把基本原理弄清楚。

好好地阅读PCI总线规范文件吧,
然后再找PCI总线枚举、X86体系下PCI总线资源的资料来好好看看,
也许会有用处。



Best regards
&
Good luck!


[编辑 -  6/15/04 by  hzhq1]
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-15 15:48
PCI总线无论是硬件还是软件,
都是相当复杂的,
不要指望自己在短短的时间比如十天八天内,
立即能把专家们花很长时间才做好的工作全部理解。

单是理解PCI协议、X86体系下的系统配置、阅读相关的原代码,
肯定要花一段不算太短的时间的,
这时,
还没开始动手写程序呢。

希望我说话太过直率的口气没有吓着你而影响你的学习热情。

Best regards
&
Good luck!








[编辑 -  6/15/04 by  hzhq1]
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-15 15:52
不知道浙大的〈LINUX原代码情景分析〉这本书能不能给你一些帮助?
这本书的下册有详细的PCI枚举过程原代码及介绍。





[编辑 -  6/15/04 by  hzhq1]
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-17 08:51
首先十分感谢论坛大佬的建议和意见,字字珠玑,小弟十分首肯。
但小弟的确是下了一定功夫去钻研了,我提出的几个问题,确实是想了很久也想不明白的问题,所以很仔细的罗列了出来。
这里是ABC初学者论坛,所以我来到这里,因为很多初学者的确面临很多求教无门,自己又想不通的问题,所以来到这块宝地,希望可以有前辈或者有经验的同仁给予点拨和帮助,其实,我们的问题看似简单,但很有可能是困惑很多初学者的比较普遍的问题。圣人云,拯救一人即是拯救世界,望诸位大侠查纳雅言。
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-17 11:57

我提出的几个问题,确实是想了很久也想不明白的问题,所以很仔细的罗列了出来。


不懂就问,人人都是这样过来的了。

〈LINUX原代码情景分析〉里面,
确实有你的问题的答案,
翻翻就找到了。


另:
这里没有谁拯救谁的说法,
大家都是平和地交流探讨。
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-17 20:47
     我发现时间总是让你还没怎么看明白那些东西就要你下手做了
sky
zhouandraw
驱动牛犊
驱动牛犊
  • 注册日期2004-03-19
  • 最后登录2005-10-21
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-18 11:18
基础是要慢慢打好的,但是老板让你没有时间打基础,有了基本的概念就上手吧!
首先声明我也是才开始做驱动,希望多交流。
我得做法是:
1。在机子上装windriver 6 和driver studio 2.7
2。使用windriver 6查出你要开发的Pci控制芯片的一系列信息,比如:VID、DID、SVID、SDID、BAR0、内存映射范围等等。
3。再用driverstudio按照需要生成驱动程序的框架,这就用到上面的信息。
4。再根据要求添加控制代码。
5。最后生成驱动。
其中第4步中我是做好一个功能就试一试,不要求全。
扒皮周
lclan
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2004-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-21 15:45
多看看9056的datasheet
你会明白很多的
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-23 03:02
1. PCI配置空间中有6个BAR
they are used to store System Mapped Base Address when access the pci card from host;
(you may mixed up beteen two addresses: host pc address and pci card loca address)

2. BAR中的内容理当由OS分配,机器刚上电时,BIOS检测到PCI设备时,不读BAR中的信息;


3. PCI设备的驱动程序在PCI设备与CPU通信的过程中是在时时刻刻起作用的吗?
Mapped registers/port read/write are go through driver;
DMA operation are controled by DMA engine. (driver just setup the DMA environment parameters)


(4)OS对PCI设备所分配的内存区域就是所谓的PCI配置空间的内存映射区域吗?如果是,为什么不正好分配256B?PCI配置空间的大小不正好是256B吗?
why do u think this way?
some pci card need more and some need less mapped space.
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-06-23 16:26
请仙人指路:
(1)PCI配置空间中有6个BAR,但它们在物理上是完全相同的吗?
   我选用的PCI接口芯片为9056,既然9056从物理上将MEM BAR 和I/O BAR 的地址分开,那判断BAR的最低位为‘0’还是为‘1’,还有什么意义?


0 和 1 是判断你取得的这个地址是 mem 还是io的。 因为虽然他们操作的结果一样,但是操作方法不一样。所以要区分。



ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-24 15:32
小弟这几日出差,好久没有来论坛了,想不到各位给了这么多有价值的信息,实在是感激不尽,我一定会努力的,再次谢谢各位。
ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-30 09:53
PCI 的LOCAL ADDRESS  和BASE ADDRESS 到底有什么区别?
BASE ADDRESS就是配置寄存器映射到内存中的地址,那么LOCAL ADDRESS究竟是什么呢?看书看了很久,怎么也弄不明白。只好求救了。
ghostlive
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-07-01 09:05
我用的是PLX9056芯片,有几个概念总也弄不清楚:
(1)Local PLX基地址
(2)Local User基地址
(3)Local Bus地址
希望哪位可以给我讲讲,谢谢了。
游客

返回顶部