2010-05-07 8 views
11

Die ersten Felder von 'cat/proc/bus/pci/devices' sind verständlich.Wie interpretiere ich den Inhalt von/proc/bus/pci/devices?

Feld 1 - BusDevFunc
Feld 2 - Hersteller-ID + Geräte Id
Feld 3 - Interruptleitung
Feld 4 - BAR 0
und der Rest des BAR-Registers (0 - 5) danach.

Nachdem die BAR-Register ausgedruckt wurden, was sind die anderen Felder? Genauer gesagt, welche PCI-Konfigurationsraumregister (Offsets) werden ausgedruckt?

+0

Fragen Sie dies auf ServerFault –

+0

Ich tat http://serverfault.com/questions/139670/how-to-interpret-the-contents-of-proc-bus-pci-devices Sollte dies geschlossen werden? – vivekian2

+0

Sie sollten Ihre doppelte Frage vollständig von serverfault.com entfernen; Hinterher kannst du diese Frage hier markieren, um sie zu Serverfault zu verschieben. (Als Anreiz habe ich dich da runtergestossen. - Wenn du deine q/a auf Serverfault entfernst, bekommst du die Reputation zurück.) –

Antwort

15

Dies ist der entsprechende Code im Kernel:

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; 
} 

Nach dem IRQ, scheint es, die Startadressen mit den Flags der ersten 6 Ressourcen Regionen kombiniert werden, durch die Längen dieser Ressource Regionen gefolgt , gefolgt vom Namen des Treibers, der das Gerät beansprucht hat.

Verwandte Themen