Linux读取PCI设备的信息

读取PCI信息

最近想要在linux系统下用代码读取PCI的设备信息,查看了以下网上的代码,稍微修改就可以了,现在贴出来以备以后使用。当然想要查看PCI的其他信息也只要在此基础继续修改读取更多的PCI信息就行。

#include
#include
#include
#include
#define PCI_MAX_BUS 255
#define PCI_MAX_DEV 31
#define PCI_MAX_FUN 7
#define PCI_BASE_ADDR 0x80000000L
#define CONFIG_ADDR 0xcf8
#define CONFIG_DATA 0xcfc

typedef unsigned long DWORD;
typedef unsigned int WORD;
typedef unsigned long DWORD;

int main()
{
WORD bus,dev,fun;
DWORD addr,data;

int ret;
printf("venderID#\tdeviceIDbus#\tdev#\tfun#\t");
printf("\n");
ret = iopl(3);
if(ret < 0)
{ 
perror("iopl set error");
return -1;
}
for(bus = 0; bus <= PCI_MAX_BUS; bus++)
for(dev = 0; dev <= PCI_MAX_DEV; dev++)
for(fun = 0; fun <= PCI_MAX_FUN; fun++)
{
addr = PCI_BASE_ADDR|(bus << 16)|(dev << 11)|(fun << 8);
outl(addr,CONFIG_ADDR);
data = inl(CONFIG_DATA);
if((data != 0xffffffff)&&(data != 0))
{
   printf("%04X\t %04X",data&0xFFFF, data>>16);

  printf(" %2x\t%2x\t%2x",bus,dev,fun);

  printf("\n");
} 
}
ret = iopl(0);
if(ret < 0){
perror("iopl set error");
return -1;
}
return 0;

} 

你可能感兴趣的:(Linux)