当我们一台机器上有PCI设备时。分析这个PCI设备时如何被一步步用到的。
首先,机器上电,系统启动并加载到内核初始化阶段,这时候内核就会对所有的PCI设备进行枚举和配置!
枚举:
所有的PCI设备都在PCI总线上,内核会从第一条总线(根总线)开始扫描,逐个枚举所有连接在PCI总线上的pci设备并记录,每个PCI设备都会有其配置空间,里面保存着设备的厂商ID,设备ID,IRQ,设备存储区信息等,枚举的最终目的就是将所有的PCI设备的这些信息都读出来并且保存在pci_dev(每个设备对应一个)结构体中。具体怎么读,或者PCI总线的细节可以点击下方链接。
配置:
PCI设备总共有配置空间、内存空间、IO空间;我们想要对内存空间或IO空间进行访问的话,还需要对PCI设备进行一些配置,pci设备内部一般都是从0开始编址的,所以当总线上挂接了多个设备时,对这些空间进行直接访问就会产生冲突。所以,这些地址都要先映射到PCI总线上,再进一步映射到内核的虚拟地址空间。这时候驱动加载到内核之后,就可以直接访问的到PCI设备了。
以上内容只是个人的一点小记录。
想要了解更多可以参考下方链接,以上所以东西都可以在那里很细节的讨论到。
https://blog.51cto.com/u_15333820/3453277
https://blog.51cto.com/dongyulong/428070
https://blog.51cto.com/u_3619476/3894086