一、接口
char *pci_lookup_name(struct pci_access *a, char *buf, intsize, int flags, ...) PCI_ABI;
(/usr/include/pci/pci.h)
二、描述
在/sys/bus/pci/devices/<pci address>目录下面可以读取PCI设备的VendorId(从vendor文件获取), DeviceId(从device文件获取),但是关于vendor的文字描述和device的文字描述却没有。
1) 刚开始的时候使用lspci来获取vendor和device的文字描述,但是效率比较低;
2) 现在使用pci_lookup_name()接口来获取vendor和device的文字描述;
pacc->id_lookup_mode = 0;
默认安装的pci开发库,必须要在调用pci_lookup_name()之前,初始化为0。否则当/usr/share/hwdata/pci.ids文件不存在,或则在pci.ids文件中找不到vendor id(device id)对应的描述时,pci_lookup_name()会Segment fault。
struct pci_access *pacc;
pacc = pci_alloc();
pacc->id_lookup_mode = 0;
if( !pci_lookup_name( pacc, name, 256,
PCI_LOOKUP_VENDOR,
vendor,device ) )
{
fprintf( stderr, "fail to get pci vendor\n" );
return -1;
}
printf( "vendor: %s\n", name);
if( !pci_lookup_name( pacc, name, 256,
PCI_LOOKUP_DEVICE,
vendor,device ) )
{
fprintf( stderr, "fail to get pci device\n" );
return -1;
}
printf( "device: %s\n", name);
pci_cleanup(pacc );
三、示例输出
四、示例代码
五、注
1)编译时,加上-lpci;
2)g++编译时,引入头文件时,
#ifdef __cplusplus
extern "C" {
#endif
#include <pci/pci.h>
#ifdef __cplusplus
}
#endif