Comment interpréter le contenu de /proc/bus/pci/appareils?
Question
Les premiers champs de " cat /proc/bus/pci/appareils sont compréhensibles.
Domaine 1 - BusDevFunc
Le Champ 2 - Vendeur Id + Id De L'Appareil
Le Champ 3 - Ligne D'Interruption
Terrain de 4 BAR 0
et le reste de la BARRE de registres (0 - 5) après que.
Après le BAR registres sont imprimés, quels sont les autres domaines?Plus précisément, ce que l'espace de configuration PCI registres(décalages) sont imprimés?
La solution
C'est le code correspondant dans le noyau:
static int show_device(struct seq_file *m, void *v)
{
const struct pci_dev *dev = v;
const struct pci_driver *drv;
int i;
if (dev == NULL)
return 0;
drv = pci_dev_driver(dev);
seq_printf(m, "%02x%02x\t%04x%04x\t%x",
dev->bus->number,
dev->devfn,
dev->vendor,
dev->device,
dev->irq);
/* Here should be 7 and not PCI_NUM_RESOURCES as we need to preserve compatibility */
for (i=0; i<7; i++) {
resource_size_t start, end;
pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
seq_printf(m, "\t%16llx",
(unsigned long long)(start |
(dev->resource[i].flags & PCI_REGION_FLAG_MASK)));
}
for (i=0; i<7; i++) {
resource_size_t start, end;
pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
seq_printf(m, "\t%16llx",
dev->resource[i].start < dev->resource[i].end ?
(unsigned long long)(end - start) + 1 : 0);
}
seq_putc(m, '\t');
if (drv)
seq_printf(m, "%s", drv->name);
seq_putc(m, '\n');
return 0;
}
Après l'IRQ, il semble que les adresses de démarrage combiné avec les drapeaux des 6 premières régions ressources, suivi par les longueurs de ces régions ressources, suivi par le nom du pilote qui a revendiqué l'appareil.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow