fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:3135回复:30

pci基地址是什么类型的地址,答对有10分送上

楼主#
更多 发布于:2003-04-09 09:47
有谁知道pci板子的pci基地址是什么类型的地址,答对有10分送上。

最新喜欢:

flyingflying
有了驱动,人才有了力量。
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-19 14:07
松涛,我传上<<programing the wdm>>一书,里面提到总线地址。
你看一看!有什么观点在说一说!

找到这一段了,里面提到了alpha处理器,我现在手头上没有alpha处理器的体系结构的说明.关于alpha的map register具体怎样工作以及在系统中的地位还不清楚.
里面提到的不支持集散模式的DMA的工作包含两种情况,一种使用分页内存,这在公共缓冲区内一般得到的都小于页边界(有时也可能存在物理连续的两页甚至更多),如果大于就必须多次启动DMA,每次只完成物理连续的一部分.另一种办法是使用非分页内存,这里可以得到大的连续物理空间,但必须复制到分页内存中使用.
至于总线地址,我的感觉这个名词有些使用的不准确,DMA这一章中只使用了2次,
\"On many CPU architectures, a logical address will be a physical memory address that the CPU understands. On other architectures, it might be an address that only the I/O bus understands. Perhaps bus address would have been a better term.\"
很明显,我们通常说的逻辑地址,物理地址概念在IA体系下还是清楚的,但扩展到其他体系概念就乱了,他这里打算使用总线地址概念,这在以后的设计里可能很有用,比如1394.但现在似乎仍然不是很明确的提出,具体问题还是具体分析的好一点.

兄弟们,给点分吧
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-19 11:49
to x_ray:
首先我觉得你的讨论有些文不对题,最初的问题是配置寄存器里是否就是确切的物理地址,你的回答成了PNP的地址是否是可变的.
COM口的问题有它的特殊性,我们甚至可以把并不在自己设备上的一台远程设备映射成自己的COM口.如果我没有曲解你的意思的话,这应当就是你所说的逻辑地址的概念的一个明显例子.但这显然和PCI配置寄存器没有关系.至于COM口的动态分配,具体问题还是应当具体分析,对于严格使用file操作实现com口控制的应用来说,动态的分配简单的说实际上是在改变符号链接名,但如果是要通过使用端口或指针实现.那么就必须改变配置寄存器的内容(VXD不讨论),但是毫无疑问此时配置寄存器里仍然是物理地址.
驱动我只写过7~8个,虽然不必要每次都去修改DeviceEntry和AddDevice例程,但这两者的区别至少我认为自己还是非常清楚的,如果你认为我的观点有什么缺陷,请具体说明,我不喜欢卖关子.
我们的问题是PCI的配置寄存器里是否就是物理地址,我的答案是毫无疑问的是,如果有不同论点,请针对这个问题,不要扯远.

 

不是卖关子,是不喜欢打字。

“我们的问题是PCI的配置寄存器里是否就是物理地址,我的答案是毫无疑问的是,如果有不同论点,请针对这个问题,不要扯远.”
我没说不是物理地址,只是此物理地址非常规概念的物理地址。由于我看出他的理解有些片面,给他提个醒,让他少走弯路,因为他按此地址设计硬件或编软件一定失败。
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-18 21:47
松涛,我给你发到邮箱了,共7M.邮箱够大不?
有了驱动,人才有了力量。
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-18 21:28
松涛,我传上<<programing the wdm>>一书,里面提到总线地址。
你看一看!有什么观点在说一说!
有了驱动,人才有了力量。
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-18 21:11
对于x86保护模式,将虚拟地址通过分段机制转换成线性地址,
通过分页机制将线性地址转换为物理地址。
而关于nt,2000的书,只子不提分段。又谈到nt采用平面地址体系。
是否nt,2000下不采用分段机制,只用分页机制。其线性地址就是
虚拟地址。我目前是这样理解的。请各位高手指点!

关于地址的概念我觉得讨论的乱了一点,下面的这段话是教科书上的,比自己组织语言说得清楚多了.
\"从软件角度上看,地址是由两部分组成的:选择器和偏移地址(V86模式下是段和偏移地址).这种形式的地址被称作逻辑地址.当软件使用这种地址的时候,处理器酒吧这种逻辑地址转换成一种中间形式的地址:线性地址.然后再转换成物理地址.物理地址才是真正放在总线上并被内存或设备译码的地址.\"
概念是有相对性的,平面地址的对应概念就是段页地址.物理地址的对应概念是逻辑地址(在采用VMM的系统中就对应虚拟地址),线性地址是一个中间概念,32为保护模式下的线性地址到物理地址的转换是在页面表中实现的,所以线性地址不是虚拟地址.

兄弟们,给点分吧
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-18 21:09
[quote][quote]再问一下,《programing the wdm》一书中提到将不连续的物理
地址映射为连续的总线地址,到底什末是总线地址,别的书中没有
提到这个概念。谢谢各位的支持!!!!

如果是这样,那么所谓总线地址的概念似乎就接近虚拟地址了. [/quote]
但《programing the wdm》中的确这末说,而且肯定不是虚拟地址。
因为提供连续的总线地址的目的是给没有分散集中能力的pci桥实现dma用的。将连续的总线地址赋给 pci桥,映射积存器将其映射为不连续的物理地址,进而又对应连续的虚拟地址。我现在被几种地址弄的
一头雾水。
 [/quote]
我查了一下<<the windows 2000 device driver book>>,映射寄存器是提供给集散模式DMA使用的,至少我的书上是这么写的.不支持集散模式的DMA只能在非分页内存里分配空间,然后还要通过驱动程序才能被用户使用.我这里仍然没有找到使用总线地址这个名词的地方,也找不到所谓总线地址的明确概念.


[编辑 -  4/18/03 by  jst7792]
兄弟们,给点分吧
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-18 21:07
to x_ray:
首先我觉得你的讨论有些文不对题,最初的问题是配置寄存器里是否就是确切的物理地址,你的回答成了PNP的地址是否是可变的.
COM口的问题有它的特殊性,我们甚至可以把并不在自己设备上的一台远程设备映射成自己的COM口.如果我没有曲解你的意思的话,这应当就是你所说的逻辑地址的概念的一个明显例子.但这显然和PCI配置寄存器没有关系.至于COM口的动态分配,具体问题还是应当具体分析,对于严格使用file操作实现com口控制的应用来说,动态的分配简单的说实际上是在改变符号链接名,但如果是要通过使用端口或指针实现.那么就必须改变配置寄存器的内容(VXD不讨论),但是毫无疑问此时配置寄存器里仍然是物理地址.
驱动我只写过7~8个,虽然不必要每次都去修改DeviceEntry和AddDevice例程,但这两者的区别至少我认为自己还是非常清楚的,如果你认为我的观点有什么缺陷,请具体说明,我不喜欢卖关子.
我们的问题是PCI的配置寄存器里是否就是物理地址,我的答案是毫无疑问的是,如果有不同论点,请针对这个问题,不要扯远.

兄弟们,给点分吧
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-04-18 19:14
呵呵,原来我的概念全搞错了!

不好意思了,回去再找本书看看。
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-18 17:25
对于x86保护模式,将虚拟地址通过分段机制转换成线性地址,
通过分页机制将线性地址转换为物理地址。
而关于nt,2000的书,只子不提分段。又谈到nt采用平面地址体系。
是否nt,2000下不采用分段机制,只用分页机制。其线性地址就是
虚拟地址。我目前是这样理解的。请各位高手指点!
有了驱动,人才有了力量。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-18 04:14
pci板卡的物理地址分配,启动时由bios实现,但我记得win2000下pnp管理器可以根据资源情况再行分配。
再次谢谢各位的支持!!!!!!

fwzfwz1你说得很对。资源再分配是PnP的主要特征,不管你的OS和CPU是哪家的,只要符合PnP规范就可以资源再分配。资源再分配是很有用的,如笔记本计算机的PCMCIA插卡,当你插入一个只能用COM1口的猫时系统自动把原来的COM1口改成COM2口,这就是资源动态再分配。

关于逻辑地址应该理解为“一个地址可以使设备完成一个逻辑功能”。他可以是一个实地址也可以是一个虚地址。如果把1+2=3比喻为物理地址,把A+B=C比喻成逻辑地址,那么PCI就是A+B=C。只有当特例A=1,B=2时物理地址=逻辑地址。

 
再次,就算我们讨论win2000,IA体系,用WDM,当然就有DeviceEntry和AddDevice.那么也无非存在两种情况,一种系统分配了资源,可是这时配置寄存器里还是物理地址,另一种当然是没有分配资源,这时配置寄存器里是无效的0,最直接的证明就是直接使用物理地址的硬件访问,硬件访问是不会使用虚拟地址的.至于具体的驱动程序,显然是调用了AddDevice后系统才分配资源的,但很可惜,PCI配置寄存器是系统写的,你自己不能随便写,驱动里你可以得到分配的物理地址(其实就是从PCI基址寄存器里得到的),然后可以映射成虚拟地址,用户态程序可以用这个地址访问,但是配置寄存器里绝对不会是这个地址.
 


jst7792看来你还是没有理解两个函数的区别。这里没有任何对人的攻击,只是希望通过这个KEY加深人们对PnP的理解。
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-17 21:20
[quote]再问一下,《programing the wdm》一书中提到将不连续的物理
地址映射为连续的总线地址,到底什末是总线地址,别的书中没有
提到这个概念。谢谢各位的支持!!!!

如果是这样,那么所谓总线地址的概念似乎就接近虚拟地址了. [/quote]
但《programing the wdm》中的确这末说,而且肯定不是虚拟地址。
因为提供连续的总线地址的目的是给没有分散集中能力的pci桥实现dma用的。将连续的总线地址赋给 pci桥,映射积存器将其映射为不连续的物理地址,进而又对应连续的虚拟地址。我现在被几种地址弄的
一头雾水。
有了驱动,人才有了力量。
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-17 20:56
再问一下,《programing the wdm》一书中提到将不连续的物理
地址映射为连续的总线地址,到底什末是总线地址,别的书中没有
提到这个概念。谢谢各位的支持!!!!

如果是这样,那么所谓总线地址的概念似乎就接近虚拟地址了.
兄弟们,给点分吧
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-17 20:24
再问一下,《programing the wdm》一书中提到将不连续的物理
地址映射为连续的总线地址,到底什末是总线地址,别的书中没有
提到这个概念。谢谢各位的支持!!!!
有了驱动,人才有了力量。
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-04-17 19:47
你不仅对PCI理解片面,而且对PnP的理解也是片面的。如果你编驱动,那么一定不知道DEVICEENTRY和ADDDEVICE的区别。

年轻人是不是有点不知天高地厚了?是不是写了几个驱动就觉得自己了不起了呢?口出狂言只能让人觉得你无知,出言不逊也只能让人怀疑你的个人素质.
如果想讨论技术,我这里非常欢迎,但希望保持谦虚态度.
我的工作范围包含从芯片IP到具体的API编写的绝大多数内容,如果需要证实我的观点,可以从很多的角度说明.
首先,最基本的从芯片设计角度谈,PCI的IP是怎么写的,如果你写过,那么上面的争论就是多余的.
其次,PCI总线是独立于CPU和操作系统的总线系统,也就是说无论你是用什么样的CPU,什么样的操作系统,PCI都是可以使用的,那么很多CPU是不存在保护模式的,很多操作系统是没有驱动程序的,自然也没有WDM,更谈不上DeviceEntry或AddDevice.那么配置寄存器里到底写的是什么呢?
再次,就算我们讨论win2000,IA体系,用WDM,当然就有DeviceEntry和AddDevice.那么也无非存在两种情况,一种系统分配了资源,可是这时配置寄存器里还是物理地址,另一种当然是没有分配资源,这时配置寄存器里是无效的0,最直接的证明就是直接使用物理地址的硬件访问,硬件访问是不会使用虚拟地址的.至于具体的驱动程序,显然是调用了AddDevice后系统才分配资源的,但很可惜,PCI配置寄存器是系统写的,你自己不能随便写,驱动里你可以得到分配的物理地址(其实就是从PCI基址寄存器里得到的),然后可以映射成虚拟地址,用户态程序可以用这个地址访问,但是配置寄存器里绝对不会是这个地址.
只有一种可能我们的观点不冲突,那就是你所说的逻辑地址就是总线地址,也就是我们通常概念的物理地址.

[编辑 -  4/17/03 by  jst7792]
兄弟们,给点分吧
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-04-17 14:17
我来说两句,逻辑地址有两个理解,一个是用户虚拟地址,一个是
总线地址,两个不是一个概念。所以逻辑地址这个概念应慎用。
再者,pci板卡的物理地址分配,启动时由bios实现,但我记得win2000下pnp管理器可以根据资源情况再行分配。
再次谢谢各位的支持!!!!!!
有了驱动,人才有了力量。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-04-17 13:23
[quote]你问题中的“pci基地址”可以有几种理解
1指pci配置寄存器的基地址
2指pci配置寄存器的设备地址寄存器的地址
3指pci设备的基地址
从上面的问答看出你问的是pci设备的基地址。如果你把他看成不变的物理地址“例如我的板子的pci基地址是0xd800,0000”那么你就错了。pci设备的基地址是由pci配置寄存器的设备地址寄存器的内容决定;pci配置寄存器的设备地址寄存器的内容由OS的PnP管理器动态分配,所以在实际系统中你的pci基地址不是0xd800,0000。
在这种硬包软,软包硬的系统中用逻辑地址可能更合适,如果你能宽展物理地址的概念当然也可以。

我的感觉是要么我没有完全明白你的意思,要么就是你自己概念错误.
PCI是PNP这点毫无疑问,PNP是在BIOS或操作系统启动时分配的.启动以后绝对不会像内存页一样随时可能被释放或改变映射关系.PCI基地址寄存器的内容就是实实在在的物理地址,是硬件可以直接使用的地址,至于逻辑地址,一般的概念就是用户可直接使用的地址,保护模式下的系统的逻辑地址和实际物理地址之间是有映射关系的,驱动程序里可以得到对应关系.
再说的明白点,“例如我的板子的pci基地址是0xd800,0000”,这句话应当理解为从PCI配置寄存器里得到的PCI基地址寄存器的内容是0xd800,0000.那么这快板卡实际的物理地址就是他,但在保护模式下你是不能直接使用的,你需要使用驱动程序获得相应的逻辑地址,这个逻辑地址当然就不会凑巧是0xd800,0000. [/quote]

你不仅对PCI理解片面,而且对PnP的理解也是片面的。如果你编驱动,那么一定不知道DEVICEENTRY和ADDDEVICE的区别。
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-04-17 12:27
你问题中的“pci基地址”可以有几种理解
1指pci配置寄存器的基地址
2指pci配置寄存器的设备地址寄存器的地址
3指pci设备的基地址
从上面的问答看出你问的是pci设备的基地址。如果你把他看成不变的物理地址“例如我的板子的pci基地址是0xd800,0000”那么你就错了。pci设备的基地址是由pci配置寄存器的设备地址寄存器的内容决定;pci配置寄存器的设备地址寄存器的内容由OS的PnP管理器动态分配,所以在实际系统中你的pci基地址不是0xd800,0000。
在这种硬包软,软包硬的系统中用逻辑地址可能更合适,如果你能宽展物理地址的概念当然也可以。

我的感觉是要么我没有完全明白你的意思,要么就是你自己概念错误.
PCI是PNP这点毫无疑问,PNP是在BIOS或操作系统启动时分配的.启动以后绝对不会像内存页一样随时可能被释放或改变映射关系.PCI基地址寄存器的内容就是实实在在的物理地址,是硬件可以直接使用的地址,至于逻辑地址,一般的概念就是用户可直接使用的地址,保护模式下的系统的逻辑地址和实际物理地址之间是有映射关系的,驱动程序里可以得到对应关系.
再说的明白点,“例如我的板子的pci基地址是0xd800,0000”,这句话应当理解为从PCI配置寄存器里得到的PCI基地址寄存器的内容是0xd800,0000.那么这快板卡实际的物理地址就是他,但在保护模式下你是不能直接使用的,你需要使用驱动程序获得相应的逻辑地址,这个逻辑地址当然就不会凑巧是0xd800,0000.
兄弟们,给点分吧
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-04-17 12:22
你问题中的“pci基地址”可以有几种理解
1指pci配置寄存器的基地址
2指pci配置寄存器的设备地址寄存器的地址
3指pci设备的基地址
从上面的问答看出你问的是pci设备的基地址。如果你把他看成不变的物理地址“例如我的板子的pci基地址是0xd800,0000”那么你就错了。pci设备的基地址是由pci配置寄存器的设备地址寄存器的内容决定;pci配置寄存器的设备地址寄存器的内容由OS的PnP管理器动态分配,所以在实际系统中你的pci基地址不是0xd800,0000。
在这种硬包软,软包硬的系统中用逻辑地址可能更合适,如果你能宽展物理地址的概念当然也可以。

x_ray你上面说的我知道,这个地址有pnp管理器分配.但是我不认同
你将其称为逻辑地址,programing the wdm一书中,逻辑地址即为
总线地址,是通过映射寄存器映射的物理地址.当然我对总线地址
的概念还没有理解.



有了驱动,人才有了力量。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-04-17 11:54
你问题中的“pci基地址”可以有几种理解
1指pci配置寄存器的基地址
2指pci配置寄存器的设备地址寄存器的地址
3指pci设备的基地址
从上面的问答看出你问的是pci设备的基地址。如果你把他看成不变的物理地址“例如我的板子的pci基地址是0xd800,0000”那么你就错了。pci设备的基地址是由pci配置寄存器的设备地址寄存器的内容决定;pci配置寄存器的设备地址寄存器的内容由OS的PnP管理器动态分配,所以在实际系统中你的pci基地址不是0xd800,0000。
在这种硬包软,软包硬的系统中用逻辑地址可能更合适,如果你能宽展物理地址的概念当然也可以。
上一页
游客

返回顶部