我有一张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可以帮助我。请告诉我如何阅读这些数据。
答案 0 :(得分:1)
PCI卡根本不需要软件可访问的序列号。我使用过许多没有序列号的卡片(或者至少这样的东西没有记录在数据表中)。因此,此序列号的位置和访问方法(如果存在)将完全取决于设备。
对于以太网卡,具体而言,您通常可以阅读其烧录的&#34; MAC地址并将其用作序列号的代理,因为它应该是唯一的。 (我说&#34;通常&#34;因为没有PCI 要求以太网卡有烧录的MAC。但是,我从来没有见过没有。)
通常,MAC地址将存储在卡上的EEPROM或类似设备中,并且存在通过位于卡的PCI BAR区域之一中的设备寄存器从EEPROM读取数据的机制。但是,MAC地址的确切位置和访问它的方法(再假设它有一个)也是特定于设备的。