zycss2002
驱动牛犊
驱动牛犊
  • 注册日期2002-04-28
  • 最后登录2013-02-19
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望37点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2852回复:17

在一个sys中,如何识别多块pci卡,并对它们操作!50分

楼主#
更多 发布于:2003-03-24 22:57
我想在一个sys中,如何识别多块pci卡,并对它们操作?(最好是在driverworks下)我用driverworks生成了一个pci卡的pci驱动程序的例子和test程序,可以识别一块pci卡,并操作,但是,我仔细研究代码,发现很难识别多块卡,不知是否在AddDevice()中或其它部分增加代码?100分

最新喜欢:

theseustheseu...
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-03-25 16:17
用户被禁言,该主题自动屏蔽!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-03-25 22:03
多块相同的卡?
可以利用GUID,或硬编码。
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-25 22:37
相同的卡有多块,则可以在驱动里面根据不同的pdo调用多个AddDevice
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
Claye
驱动牛犊
驱动牛犊
  • 注册日期2002-11-24
  • 最后登录2007-10-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-30 20:19
不知道有什么方法可以获得插槽啊,我想这样是不是可以区分一下
因为有了你的驱动,我们才能进步! 愿中国强大!!!!
NewFreedom
驱动小牛
驱动小牛
  • 注册日期2003-02-14
  • 最后登录2010-09-28
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-31 19:04
附议Tom.cat ,
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-31 22:56
AddDevice的时候,系统的PCI总线驱动程序已经完成对多卡的识别,对每个卡设置相应的标志,参数pdo就是系统已经找到的硬件设备对象,所以你应该在AddDevice里面增加代码。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
hothand
驱动牛犊
驱动牛犊
  • 注册日期2002-01-11
  • 最后登录2009-02-05
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-25 11:46
对于一机多卡的驱动开发,有很多问题,一直没有完整的回答

不知道那位大侠能够完整的描述一下,从一卡的驱动到多卡相同
板卡驱动的流程,开发细节!想来必定名垂千古,为万人引用!

谢谢先!
Hothand
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-25 12:08
一机多卡其实就是要将获得的硬件信息分别保存下来:
在AddDevice时每次收到一个设备都会自动为该设备分配一个功能对象,在创建该功能对象时,取不同的设备名字,同时将硬件信息保存到相应的功能设备扩展中,最后将一个全局变量的指针数组分别指向每个扩展中,最后就可以分别获得硬件信息,对多卡进行操作了
大家好!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-06-25 13:45
一、硬编码
在AddDevice,创建linkname的时候,每次加个1
//类似于
static i=0;
strlinkname = LINKNAME + i; //LINKNAME比如是\"MY_CARD\",简化为+,应该用UNICODE string的函数
IoCreateSymbolicLink(&strlinkname, &your_devcie_name);

至于app怎么得到linkname,随便了。

二、GUID
//define 一个GUID先,比如是guid,一类卡一个
在AddDevice
IoRegisterDeviceInterface(pdo, &guid, NULL, &pDevExt->LinkName)  //很明显,放到DEVICEEXTENSION是比较合适的
每个pDevExt->LinkNmae都不会相同的。

至于app怎么得到linkname,随便了。

不需要考虑硬件信息。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-27 10:18
对多卡的操作实际上就是对不同的硬件寄存器进行操作啊
大家好!
wangmqi
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-06-28 00:44
我的卡就是多卡,我觉得没有什么!注意以下几点:
1.尽量不要使用公用变量!
2.对于2000来讲,最好使用分配symbollink路径。
3.app使用楼上的兄弟的程序。
4.区分几块卡要使用物理槽位号!这个是固定的!
其他的与单卡一样!
注:一定要注意同步控制!
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-17 02:53
this my code for pls9054 driver and test program:

//driver code
static LONG lDevNo=-1; //device instance no
///////////////////////////////////////////////////////////////////////////////

NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
{
PAGED_CODE();
KdPrint((DRIVERNAME \" - Entering AddDevice: DriverObject %8.8lX, pdo %8.8lX\\n\", DriverObject, pdo));

NTSTATUS status;

// Create a functional device object to represent the hardware we\'re managing.

PDEVICE_OBJECT fdo;
#define xsize sizeof(DEVICE_EXTENSION)

UNICODE_STRING devname;
WCHAR namebuf[32];
long lThisDeviceNumber = InterlockedIncrement(&lDevNo);
_snwprintf(namebuf, arraysize(namebuf), L\"\\\\DosDevices\\\\PLX9054%d\",lThisDeviceNumber);
RtlInitUnicodeString(&devname, namebuf);

status = IoCreateDevice(DriverObject, xsize, &devname,
FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);


if (!NT_SUCCESS(status))
{ // can\'t create device object
KdPrint((DRIVERNAME \" - %d AddDevice(): IoCreateDevice failed - %X\\n\", lThisDeviceNumber,status));
return status;
} // can\'t create device object
else
{
KdPrint((DRIVERNAME \" - %d AddDevice(): CreateDevice %d Ok\\n\", lThisDeviceNumber, lThisDeviceNumber));
}
...
}
///////////////////////////////////////////////////////


//application
//connect to first device
m_hDevice=CreateFile(\"\\\\\\\\.\\\\PLX90540\",
...);

//connect to second device
m_hDevice=CreateFile(\"\\\\\\\\.\\\\PLX90541\",
...);

....
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-27 09:20
NTSTATUS PciwdmDriver::AddDevice(PDEVICE_OBJECT PDO)
{
PciwdmDevice* pD = new (NonPagedPool) PciwdmDevice(PDO, m_instance);
if (pD != NULL)
{
NTSTATUS status = pD->ConstructorStatus();
if ( !NT_SUCCESS(status) )
delete pD;
else
m_instance++;

return status;
}
else
return STATUS_INSUFFICIENT_RESOURCES;
}
这是DS2。7里的例子,很简单,但好象不完整,好象没有创建linkname
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-27 09:21
instance声明为静态的成员变量
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-28 09:29
利用PCI BIOS调用,把每个bus#/device#查一遍,根据vendor id / device id判断是否是你的卡,并把这些bus#/device#记下来,并对卡进行编号。
助人乃快乐之本 有人给分就更快乐了 :-)
theseus
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2003-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-07-28 10:52
这个问题真的很烦人,请高手多多发言,我代表菜鸟们谢了先。
------------------------------------------------------------ 痛并快乐
lili_ue
驱动小牛
驱动小牛
  • 注册日期2001-06-30
  • 最后登录2018-04-22
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2010-03-03 17:07
同问!这个问题比较困扰!
游客

返回顶部