Looking into lspci via strace: strace lspci 2>/tmp/lspci.out and then extracting out all the "open" calls in lspci.out following that searching for "sys": open("cmov/libresolv.so.2", O_RDONLY) = -1 ENOENT (No such file or directory) open("libresolv.so.2", O_RDONLY) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libresolv.so.2", O_RDONLY) = 3 open("/dev/urandom", O_RDONLY) = 3 open("/sys/bus/pci/devices", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 open("/sys/bus/pci/devices/0000:00:00.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:00.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:00.0/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:00.0/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:00.0/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:01.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:01.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:01.0/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:01.0/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:01.0/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.0/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.0/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.0/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.1/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.1/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.1/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.1/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.1/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.7/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.7/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.7/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.7/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1a.7/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1b.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1b.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1b.0/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1b.0/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1b.0/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.0/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.0/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.0/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.4/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.4/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.4/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.4/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.4/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.5/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.5/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.5/vendor", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.5/device", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1c.5/class", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1d.0/resource", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1d.0/irq", O_RDONLY) = 4 open("/sys/bus/pci/devices/0000:00:1d.0/vendor", O_RDONLY) = 4 From above we know that it enumerate all the devices via first reading the directory /sys/bus/pci/devices and then searching for files like irq, vendor, device, class, resource under each devices ID found. Awesome!!!! |
- [lk] how does lspci works? Peter Teoh
- [lk] Re: how does lspci works? Peter Teoh