pci 驱动的问题(急救!!!!!)

下面是我编写的关于PCI板卡的驱动。但是老是出现问题,`我的板卡应该插好了,因为在windows2000下面显示发现新设备.并且我的板卡只有一个现在我的程序运行后老是显示not find device!




#include <hw/pci.h>
#include <hw/pci_devices.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <hw/inout.h>
#include <sys/types.h>
#define vendorid 0x8888
#define deviceid 0x3333
int main(void)
{
unsigned busnum;
unsigned devfuncnum;
int pidx;
unsigned index=0;
int fndev;

void* hdl;
void* retval;
int phdl;
struct pci_dev_info inf;

/* Connect to the PCI server /
phdl = pci_attach( 0 );
if( phdl == -1 ) {
printf(“Unable to incitialize PCI\n” );
exit(0);
}
/
Initialize the pci_dev_info structure */
memset( &inf, 0, sizeof( inf ) );
pidx = 0;
inf.VendorId=0x8888;
inf.DeviceId =0x3333;

do{
fndev=pci_find_device(deviceid,vendorid,index++,&busnum,&devfuncnum);
if(fndev==PCI_SUCCESS)
{printf("find device! ");
}}while (fndev!=PCI_DEVICE_NOT_FOUND);
if(fndev!=PCI_SUCCESS)
{printf(“not find”);
pci_detach(phdl);
exit(0);}
pci_detach( phdl );
exit(1);

}

你肯定你的Vendor ID 和 Device ID 是对的吗? 0x8888和0x3333看上去不象啊。你的板子在 “pci -v” 的输出里看得见吗?

将index++换成0试试

麻烦告诉一下 pci-v命令怎么使用!
还有我的这段程序是作为一个c应用程序编写的,不知
到对不对? 请指点! :blush: 多谢谢`

pci 是个终端命令啊,在命令行里输入就可以啦

我已经在terminal上面使用了pci-v命令了,但是显示的内容太多且太快!最后只能看到后面的内容,不知道有什么命令可以实现 一部分一部分的显示!

重新定向到一个文件里,比如pci -v > pci.info ,然后打开pci.info就可以慢慢看,如ped pci.info

您好wsforever:
感谢您的指点。我已经解决了上面的问题!
不过我还想想问一下,关于QNX终端命令的使用在帮助文档的哪一部分可以找到!或者如果您有这方面的资料的话,给我传一份,这样我就可以避免麻烦大家帮我解答问题了!我刚刚接触QNX问题实在是太多了!不好意思麻烦您!我的信箱是nwpuhyh@163.com.
不深感激! :blush:

我使用了pci -v命令,但是我的板子没有被显示!我想请教是怎么回事呢?

急死了,关于我上面的问题,就是讲讲你们的建议也好啊!不然我真的就没救了!

你的PCI卡的header type(offset 0x0e, bit 0-6)是什么? 只有0-2是有效值, pci
才会显示.
你这只卡很奇怪,好像不符合PCI标准. 是正式产品还是试验品? 能否将 PCI configuration
space的0x00 - 0x0f内容传上来?

Computer您好:
我现在将我的板卡地配置空间上传上来了!的确是我的venderID和deviceID出错了!但是我在程序中改过之后还是出现同样地错误,并且有一个很有意思的问题是!当我在不同时间debug我的程序时候。有的时候显示not find,有的时候显示unable to initialize PCI device!既就是说pci_attach()调用失败!调试过程中pci_attach()函数失败贼高!不知道是怎么回事!能不能指导一下! :blush:




我的配置空间0x00——0x0f的内容除了venderID和deviceID处是给定的3333和0000外,剩下的都是内容都是0。

你的sloginfo的输出是什么? (在启动PCI驱动之前先执行slogger,启动PCI驱动时用-vvv).
你的PCI卡好像很奇怪.你手头有PCI规范没有?
我猜想PCI驱动不能给你的卡分配资源.PCI的configuration space 的0x10到0x24与资源
分配有关.具体请参照PCI规范.

不好意思!我是初学QNX的,看了您的回复,我突然发现我写的东西,不是驱动!
一直以来我以为这样的程序就算是一个简单的驱动!应为我看了帮助文档只是找到了一些PCI*函数,没有找到别的什么关于些PCI板卡驱动的!所以我就以为只需要简单的调用这些函数就行了!关于PCI驱动的编写!请您给些指点!比如说应该看帮助文档的哪一部分?

请教!那位仁兄知道我下面的问题!麻烦会帮一下回答一下!
我的卡的配置空间的内容上传上来,我的板子是一块试验板子,不知道该怎样修改我的配置空间,才可以让QNX识别我的卡!
0000 3333 00h
0000 0000 04h
00 00 00 00 08h
00 00 00 00 0ch
0000E001 10h
00000000 14h
00000000 18h
00000000 1ch
00000000 20h
00000000 24h
00000000 28h
0000 0000 2ch
00000000 30h
000000 00 34h
00000000 38h
00 00 01 05 3ch
0000 33 33 40h
00 00 0000 44h
00000000 48h
00000000 4ch
0000E001 50h

向offset 0x10处写0xffffffff,然后读那里的数据看看是多少.
我怀疑你的卡作得不对以至于系统不能分配资源.

过了这么久我得板卡的问题还是没有得到解决,我想问一下computer你说的那个


向offset 0x10处写0xffffffff,然后读那里的数据看看是多少.
我怀疑你的卡作得不对以至于系统不能分配资源.
是怎么一回事,是在QNX底下的操作呢?还是在制作板卡时的操作,具体改怎么做????

你的板卡要附合PCI的标准。

这里是PCI 2.1的详细说明,看看第六章关于Configuration Space 的说明吧。第187页的图对你应该有帮助。