tiaozao
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2003-02-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1580回复:11

关于一个多PCI卡的问题。

楼主#
更多 发布于:2003-01-23 22:29
我做了一个多PCI卡的设备驱动程序,在程序里如何找到指定的PCI卡呢?
好像他们之间没有什么有规律的顺序,这是怎么回事?

最新喜欢:

XmanXman
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-08 18:18
通常多PCI卡驱动,是对于这些PCI卡是完全相同的卡的情况,配置也完全相同(当然也可以不同,但需要驱动确定设备号与设备的对应关系)。
  他们之间还是有顺序的,BIOS在机器上电分配空间时,对于配置机制1,是按照每条PCI总线上的每个插槽顺序来分配空间的(对于流行的PC机通常只有一条PCI总线,即他没有PCI-PCI桥),配置信息保存在CMOS中,在引导OS系统时,注册表读取CMOS中的配置信息,并按照总线号、插槽号、设备号的顺序来注册设备(一个机器可能有多条PCI总线,每条总线通常有4~8个PCI插槽,每个插槽上的物理卡可能是有多个逻辑设备的多设备卡,每个设备都相应的指定一个设备号,这个设备号的用户名称通常是:XxxDeviceN,Xxx--驱动名,N――设备序号)。如果您的设备是支持热插拔的,你可以拔下一个所有的卡,只留下一个卡,读取某个逻辑设备DeviceN上的数据,N从0开始,如果读取到,就可以确定逻辑设备号与您的插槽的对应关系。对于不支持热插拔的同样可以通过访问轮循访问一个卡的方式确定这种对应关系,只要配置没变(未重新启动),这种做法就是安全的,但这种关系的知道与否关系不大,反正功能是相同的。如果功能不同不同,就最好不要作成多逻辑设备驱动,分开做得了。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-10 15:43
mengzi.你好
每个设备都相应的指定一个设备号,请问这个设备号是由硬件指定的,还是由驱动来指定的,要是驱动的话应该怎么做呢?谢谢! :)
大家好!
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-11 20:23
由操作系统根据COMS中的称为ESC?的部分指定,设备号顺序与驱动程序无关,但其在注册表中是否显示与驱动程序加载有关。
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-13 20:52
举个简单的例子。
如有这样一个PCI显卡,在这个卡上有一个PCI―PCI桥,桥后面接有4个PCI显示芯片,4个芯片配置当然完全相同,单就这块卡而言就有4个PCI设备,如果PCI槽上插有2个这样的卡,则这样的设备就有8个。驱动是无从指定设备号的。唯一明确的是,系统的BIOS是知道的,因为在访问设备的配置空间时,是通过桥后面的AD[31:15?]的某一根作为IDSEL信号,这个信号是点对点信号,即这条PCI总线上的所有IDSEL信号是不互连的,分别引自不同标号的AD[]。用户要想知道到底驱动中的设备号对应哪个物理设备,只有通过驱动访问卡,来看效果而后确定。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-14 09:20
mengzi,你好
我要驱动的板卡与你的说的例子非常相似,
但是我觉得可以在驱动中给每一个找到的设备动态的分配一个设备号,同时创建一个相应的设备,每个创建的设备名称不同,然后访问设备的时候再根据设备号来访问.
我比较疑惑的是怎样来给每个设备动态的分配设备号!

另:你说的“用户要想知道到底驱动中的设备号对应哪个物理设备,只有通过驱动访问卡,来看效果而后确定。”我还是不太明白啊!这样到底是怎样通过驱动来访问卡的呢?
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-14 09:23
我不太明白的是:
在访问一个具体的设备时,怎么才知道访问的是那个?怎样指定访问一个设备?
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-14 09:25
我不太明白的是:
在访问一个具体的设备时,怎么才知道访问的是那个?怎样指定访问一个设备?
另:象这种多卡的问题,安装同一个驱动的时候,有时候总是只有第一个可用,然后其它设备的都不能用了。
大家好!
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-14 21:26
您说得很对,是我理解有误,我现在一直在整电路,好久未做驱动了,抱歉得很。
1,如果卡上的每个设备的配置和功能完全相同,可以只做一个驱动,而在驱动安装时,根据系统的提示(Win98/2K)反复加载就可以了,或者可以做个安装程序,同时多次加载同一个驱动程序(Win98/NT/2K)。这个设备号是系统自动分配的(如果是配制机制0#,设备号与驱动加载顺序无关,如果是配制机制1#,则设备号与驱动加载顺序有关)。典型的用法是在主板上有两个网络芯片,通常的做法就是做一个驱动,再做一个安装程序同时两次加载同一个驱动。
2,如果卡上的每个设备的配置和功能不完全相同,是可以做成多设备驱动,您在驱动中创建设备对象时,每创建一个设备对象都要根据VID、DID获取设备的配置信息,根据配制信息确定设备(譬如可以根据DID的不同,如果DID相同可以根据子类代码的不同),设备对象名可以根据功能命名,这样就不用担心设备号的问题。
3,当机器中插入多个相同的卡时,可以按照1的第二种方法处理,作个安装程序。
仅供参考。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-16 18:45
mengzi
在安装的时候会不会出现问题,比如装了一个另外的安装不上
大家好!
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-16 20:00
zshuc兄:
    这世界上任何事都有可能发生,若要问题不太多:1,从硬件到OS都咱国人自己整;2,跟着标准或模型走。
    关于驱动加载的问题,只要驱动和驱动安装程序没毛病,应该是能load上的,兄弟没有遇到您这样的问题。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-17 07:03
1.用不同的总线号(0-7),设备号(0-31),扫描VID和DID找到你的板卡.
2.写配置寄存器枚举你的板卡.(支持多卡的板卡都可以设定不同的IO地址).
记住:配置不仅可以读,还可以写.
游客

返回顶部