首页 > 编程知识 正文

米家经常要初始化设备,PCI设备驱动

时间:2023-05-04 00:04:51 阅读:170045 作者:3949

要访问PCI设备,已知处理器和网卡通过PCI总线连接。 CPU可以直接访问系统内存(虚拟地址),也可以通过映射间接访问总线地址。 CPU如何访问网卡的存储空间呢?

每个网卡都有自己的存储空间,因为这些空间在网卡上的地址(网卡上的地址)本质上是本地的,所以它们都从0开始,不直接连接到总线,而是将网卡连接到总线

在系统初始化期间,扫描PCI总线上的每个PCI设备(包括NIC ),为这些设备分配总线地址,并建立卡上的地址到总线地址的映射。 如何建立映射?

每个PCI设备都有一个配置寄存器组(配置空间),用于建立映射,系统初始化时使用该寄存器“设置”设备的总线地址。 CPU如何访问这个寄存器呢? 这又回到了原点

PCI标准规定了配置寄存器组的最大256 byte。 其中,前64字节为标准,所有PCI设备配置寄存器组使用相同的地址(卡上的地址或偏移)

系统在IO地址空间中保留8字节(0xCF8~0xCFF ),其中前4字节为地址寄存器,最后4字节为数据寄存器。 CPU访问某个设备的某个配置寄存器时,首先用I/O命令向地址寄存器写入目标地址(包括总线编号、设备编号、功能编号、寄存器地址在内的综合地址),然后用I/O命令向地址寄存器写入

统一地址的结构如下图所示,寄存器地址的前6位用于对最多64word(256byte )的配置寄存器组进行寻址

如下图所示,256B表示配置寄存器组,最多可有2^16个配置寄存器组。 最大16MB

在写入综合地址之后,从0号总线,各PCI桥将综合地址中总线编号与自己的总线编号进行比较,在一致的情况下,根据设备编号的功能编号寻找设备; 如果不匹配,则将统一地址传递给下一级总线的PCI桥并继续查找,直到找到设备,最后根据8位寄存器地址找到配置寄存器。 此时,通过I/O命令读写数据寄存器即可读写配置寄存器

在系统初始化时,扫描PCI总线上的各PCI设备(包括网卡),向这些设备分配总线地址,设备的各BAR对应于设备的存储区域,系统通过将总线地址写入BAR来将存储区域的卡写入存储区域

设备驱动程序调用pci_IOremap_BAR ) ),将写入资源数组中保存的bar的总线地址映射到系统内存中的虚拟地址。 然后,CPU可以通过虚拟地址访问PCI设备的存储区域,而无需使用io命令

探测器PCI设备配置寄存器组中的头类型0表示普通PCI设备,1表示PCI桥,PCI桥根据功能不同分为主机- PCI桥、PCI-PCI桥、PCI-ISA桥、PCI

各PCI总线悬挂在PCI桥下,其中0号总线悬挂在Host-PCI桥下,CPU通过Host-PCI桥与0号总线相连。 所有的总线都构成了总线树

有两种直接检测PCI设备的方法: BIOS检测和直接检测。 两者都优先从Host-PCI桥搜索总线树上的所有设备。 以直接检测为例进行说明

申请IO地址空间0xCF8~0xCFF, Host-PCI桥12345 arch _ initcallpci _ arch _ init PCI _ direct _ probe PCI _ check _ type1PCI _ sanit PCI _ direct 写入legacy _ init PCI BIOS _ scan _ root PCI _ scan _ bus _ parented PCI _ scan _ chilling 81011 PCI _ scan _ slot PCI _ slot _ bases _ _ device PCI _ device PCI _ read _ bases dge PCI _ scan _ child _ bus深度优先搜索总线树并分配总线地址,BAR建立映射1234

将地址pcibios_allocate_resources分配给每个总线

向每个PCI设备分配地址fs _ initcallpcibios _ assign _ resources

地址PCI _ assign _ unassigned _ resources PCI _ bus _ assign _ resources 4567 PCI BIOS _ allocate _ bus _ bus rces alloc _ resource PCI _ find _ parent _ resource _ resource _ parent _ resource urces _ sorted PCI

_ _ request _ resource PCI _ update _ resource深度优先搜索

参考资料《Linux内核源代码情景分析》

《PCI Express 体系结构导读》

3358 blog.Sina.com.cn/s/article list _ 1685243084 _3_1. html

33558 blog.chinaaet.com/justlxy/p/5100057779

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。