Как читать VPD reg на картах PCI - PullRequest
0 голосов
/ 03 мая 2018

У меня есть карта PCI, для которой я хочу написать драйвер на языке C.

Моя проблема в том, что я не могу найти серийный номер в оборудовании, которое мне действительно нужно.

Я думаю, что каждая карта PCI должна иметь уникальный производственный идентификатор, возможно, аналогичный штрих-коду на коробке.

У меня есть доступ к шине, слоту и базе. Добавьте данные, которые мне нужны, но не можете найти способ решить мою проблему.

Код для решения не может быть использован.

#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 голосов
/ 04 мая 2018

Для платы PCI вообще не требуется серийный номер, доступный для программного обеспечения. И я работал с рядом карточек, у которых не было серийных номеров (или, по крайней мере, такая вещь не была задокументирована в техническом паспорте). Таким образом, местоположение и метод доступа для этого серийного номера (если он существует) будет полностью зависеть от устройства.

В частности, для карты Ethernet вы можете прочитать ее «прожженный» MAC-адрес и использовать его в качестве прокси для серийного номера, поскольку он должен быть уникальным. (Я говорю «как правило», потому что нет требования PCI , что у карты Ethernet есть сгоревший MAC-адрес. Однако я никогда не видел такого, у которого нет.)

Обычно MAC-адрес хранится в EEPROM или аналогичном устройстве на карте, и существует механизм для чтения данных из EEPROM через регистры устройства, расположенные в одной из областей PCI BAR карты. Однако точное местоположение MAC-адреса и способ доступа к нему (опять-таки при условии, что он есть) также зависит от устройства.

...