如何阅读PCI卡中的VPD reg

时间:2018-05-03 15:45:51

标签: c driver pci

我有一张PCI卡,我想用C语言编写驱动程序。

我的问题是我无法在硬件中找到我真正需要的序列号。

我认为每张PCI卡必须具有独特的制造ID,可能与盒子上的条形码类似。

我访问总线,插槽和基础添加我需要的数据,但无法找到解决问题的方法。

解决方案的代码无法使用。

#include <stdio.h>
#include <stdlib.h>
#define FLASH_BASE_ADDR 0x80000000
#define SNO_ADDR (FLASH_BASE_ADDR + 0x4C)


int main(int argc, char *argv[])
{
    int sno, i;

    sno = *(int *)SNO_ADDR;

    printf("The serial number is %d.\n", sno);

    printf("\n");
    exit(0);
}

此代码用于特定设备,在公共任务中无法使用。 现在我看到VPD可以帮助我。请告诉我如何阅读这些数据。

1 个答案:

答案 0 :(得分:1)

PCI卡根本不需要软件可访问的序列号。我使用过许多没有序列号的卡片(或者至少这样的东西没有记录在数据表中)。因此,此序列号的位置和访问方法(如果存在)将完全取决于设备。

对于以太网卡,具体而言,您通常可以阅读其烧录的&#34; MAC地址并将其用作序列号的代理,因为它应该是唯一的。 (我说&#34;通常&#34;因为没有PCI 要求以太网卡有烧录的MAC。但是,我从来没有见过没有。)

通常,MAC地址将存储在卡上的EEPROM或类似设备中,并且存在通过位于卡的PCI BAR区域之一中的设备寄存器从EEPROM读取数据的机制。但是,MAC地址的确切位置和访问它的方法(再假设它有一个)也是特定于设备的。