PCIE 学习
文章平均质量分 73
PCIE 学习
52·Hz
清风自来
展开
-
【PCI】基地址寄存器(BAR)
基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示:其中 Type0 Header 最多有 6 个 BAR,而 Type1 Header 最多有两个 BAR。这就意味着,对于 Endpoint 来说,最多可以拥有 6 个不同的地址空间。但是实际应用中基本上不会用到 6 个,通常 1~3 个 BAR 比较常见。主要注意的是,如果某个设备的 BAR 没有被全部使用,则对应的 BAR 应被硬件全被设置为 0,并且告知软件这些 BAR 是不可以操作的。原创 2024-02-20 15:37:03 · 952 阅读 · 0 评论 -
【PCI】BDF&配置空间、PCIe Memory 、IO 地址空间
系统在启动过程中会枚举所有的pcie设备,当这些设备加载完成之后,软件上是根据什么信息来找到其中的某一设备的呢?就是BDF,即 Bus number、Devicesnumber、Function number。如下图中 Bus number 为 01,Devicesnumber 为 00,Function number 为 0。每一个 PCIe 设备可以只有一个功能(Function),即 Fun0。也可以拥有最多 8 个功能,即多功能设备(Multi-Fun)。原创 2024-02-20 10:39:11 · 725 阅读 · 0 评论 -
【PCI】移除 & 扫描 EP
【代码】【PCI】移除 & 扫描 EP。原创 2024-02-19 16:17:33 · 325 阅读 · 0 评论 -
【PCI】lspci & setpci 工具编译及使用
以上面的 02:01.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为02,槽位号为01,功能号为0,对应的是桥片下的slot,并非具体的设备。以上面的 04:00.0 为例,总线域为0000(lspci默认省略总线域0000,可以加参数-D显示),bus总线号为04,槽位号为00,功能号为0,对应的是具体的设备,因为槽位号为00。查看bus为 06:00.0 对应的3556的对应8796对应port口的配置空间。2.2 执行 make。原创 2024-02-19 16:12:10 · 855 阅读 · 0 评论 -
【PCI】kernel pci 常用接口函数
PCI 有 3 种独立地址空间:PCI/IO 空间、PCI 内存地址空间和 PCI 配置空间。原创 2024-02-19 15:55:57 · 330 阅读 · 0 评论 -
【PCI】设备的枚举
至此,PCI 总线的枚举过程执行完毕,经历了上述这些函数,我们已经得到了 PCI总线下的所有设备的信息,并将它们注册为了 pci_dev 结构体,这时 pci 总线上的设备信息已经准备完毕,现在就是等待后续将要注册的 PCI 驱动与他们进行匹配。梳理了整个过程之后,我们可以了解到,BIOS的枚举:初始化所有PCI设备的配置空间;系统的枚举:依据 BIOS枚举后的配置空间信息生成 pci_dev 设备结构体。原创 2024-02-19 15:44:40 · 895 阅读 · 0 评论 -
【PCI】 配置空间访问
以上三个函数都是位于 pci_arch_init()函数中,该函数的启动等级为3,此函数就是设置整个PCI总线设备配置空间的读写方法。pci_probe = 0xf(默认值)raw_pci_ops = 空raw_pci_ext_ops = 空即在 0~256 字节大小配置空间内采用I/O访问,大于256字节则才有内存空间访问。原创 2024-02-19 14:57:43 · 1110 阅读 · 0 评论 -
【PCI】初始化
系统对于PCI的初始化大体分为4个阶段:1.BIOS 对PCI设备进行初次枚举:在系统启动时,BIOS 会扫描系统中的PCI总线,识别和枚举连接在总线上的所有PCI设备,并为它们分配资源(如IO端口、内存地址等)。2.PCI设备系统枚举的前期准备:在操作系统启动后,系统会进行更深入的PCI设备枚举工作。这个阶段会包括文件系统相关目录的建立(如/sys/bus/pci/devices/)、访问方法的初始化等准备工作。3.PCI设备的系统阶段枚举:在系统准备就绪后,会对PCI设备进行系统级别的枚举。原创 2024-02-19 14:30:07 · 1125 阅读 · 0 评论