O lspci
é parte do pciutils, que é portável para uma variedade de janelas e do SO semelhante a unix, portanto, ele presumivelmente usa métodos diferentes dependendo da plataforma.
Você deve ser capaz de dizer onde obtém suas informações no seu caso via strace lspci
. Depois que o preâmbulo acessar bibliotecas, etc, eu (usando o fedora linux) recebo muito open()
+ pread()
chamadas em /sys/bus/pci/
, por exemplo:
open("/sys/bus/pci/devices/0000:00:1c.7/config", O_RDONLY) = 3
pread(3, "60open("/sys/bus/pci/devices/0000:00:1c.7/config", O_RDONLY) = 3
pread(3, "60%pre%%pre%4%pre%%pre%1%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%
%pre%"..., 64, 0) = 64
close(3)
%pre%4%pre%%pre%1%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%
%pre%"..., 64, 0) = 64
close(3)
São dados binários. Depois disso, ele lê em /usr/share/hwdata/pci.ids
, que é uma lista universal estática distribuída com o pacote pciutils. Esses são códigos de quatro dígitos que, presumivelmente, correspondem às informações de /sys
.