首先lspci -h能显示出所有的register,我们通常用-x来读所有的数据:
-x Show hex-dump of the standard part of the config space
-xxx Show hex-dump of the whole config space (dangerous; root only)
-xxxx Show hex-dump of the 4096-byte extended config space (root only)
详细流程为:
pci_alloc功能:得到一个pci_access实体。
pci_init功能:查询存在的pci_methods,并匹配pci_access实体,为真则初始化pci_access中的methods,methods具体由OS支持。
scan_devices功能:扫描pci_access实体所在总线,得到该总线上所有设备。
sort_them功能:把所有pci设备按照域、总线号、设备号、功能号排序。
show功能:调用show_device函数,根据命令行输入的参数(-x或-xxxx),执行show_hex_dump函数,打印对应信息。
pci_cleanup功能:释放pci_access所占资源。
核心还是struct pci_access和struct pci_methods
-x Show hex-dump of the standard part of the config space
-xxx Show hex-dump of the whole config space (dangerous; root only)
-xxxx Show hex-dump of the 4096-byte extended config space (root only)
注意如果想读出来config space 0x3F以后的值,需要在root权限下。
详细流程为:
pci_alloc功能:得到一个pci_access实体。
pci_init功能:查询存在的pci_methods,并匹配pci_access实体,为真则初始化pci_access中的methods,methods具体由OS支持。
scan_devices功能:扫描pci_access实体所在总线,得到该总线上所有设备。
sort_them功能:把所有pci设备按照域、总线号、设备号、功能号排序。
show功能:调用show_device函数,根据命令行输入的参数(-x或-xxxx),执行show_hex_dump函数,打印对应信息。
pci_cleanup功能:释放pci_access所占资源。
核心还是struct pci_access和struct pci_methods