我有一个 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);
}
此代码适用于特定设备,在公共(public)任务中无法使用。 现在我发现 VPD 可以帮助我。请告诉我如何读取这些数据。
最佳答案
PCI 卡根本不需要具有软件可访问的序列号。我使用过许多没有序列号的卡(或者至少数据表中没有记录这样的事情)。因此,该序列号(如果存在)的位置和访问方法将完全特定于设备。
对于以太网卡,具体而言,您通常可以读取其“内置”MAC 地址并将其用作序列号的代理,因为它应该是唯一的。 (我说“通常”是因为 PCI要求以太网卡没有内置 MAC。但是,我从未见过没有内置 MAC 的以太网卡。)
通常,MAC 地址将存储在卡上的 EEPROM 或类似设备中,并且存在一种通过位于卡的 PCI BAR 区域之一的设备寄存器从 EEPROM 读取数据的机制。然而,MAC 地址的确切位置和访问它的方法(再次假设它有一个)也是特定于设备的。
关于c - 如何读取 PCI 卡中的 VPD 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50159103/