diff --git a/Software/OperatingSystem/Linux/Development/KernelDriver/Linux_SPI_子系统_x86平台.md b/Software/OperatingSystem/Linux/Development/KernelDriver/Linux_SPI_子系统_x86平台.md index e76372c..a947b60 100644 --- a/Software/OperatingSystem/Linux/Development/KernelDriver/Linux_SPI_子系统_x86平台.md +++ b/Software/OperatingSystem/Linux/Development/KernelDriver/Linux_SPI_子系统_x86平台.md @@ -44,7 +44,7 @@ SPI 通讯离不开 SPI 总线控制器和从设备,因此在 Linux 系统中 有些总线设备是可以自动枚举到的,如 PCI 总线可以通过 BDF(总线号 Bus、设备号 Device 和功能号 Function) 来枚举设备并通过 Device ID 和 Vendor ID 来匹配驱动程序。然而有很多总线不能自动枚举设备并匹配驱动程序。因此内核提供了几种配置表用于声明某些设备的存在,对于 ARM 平台目前使用 Device Tree,而 x86 平台有 ACPI 表,或者干脆以平台设备的形式注册 Board Info。Linux 内核会扫描这些表或已注册的 Board Info,并根据其中的信息触发对应驱动程序的 Probe 流程。这个过程由系统内核框架实现的,不需要设备驱动开发人员关心,只需要写好 Device Tree,提供好 ACPI 表,或注册好 Board Info 即可,而这一般会有 Demo 可以参考。 -在 x86 平台下,SPI 总线控制器作为 PCI 设备接入,由 PCI 枚举来探测到设备,并通匹配 Device ID 和 Vendor ID 来匹配 SPI 控制器驱动(Linux 内核程序结合硬件机制实现了该功能,具体 PCI 设备枚举和匹配过程可以参考 PCI 方面的专业资料),触发其 Probe 程序;然而 SPI 从设备是无法自动探测到的,需要在 ACPI 表中声明这些从设备(x86 平台),或在平台设备中注册相关的 SPI Board Info,以便内核能够匹配到正确的 SPI 设备驱动并触发其 Probe 程序。 +在 x86 平台下,SPI 总线控制器作为 PCI 设备接入,由 PCI 枚举来探测到设备,并通过 Device ID 和 Vendor ID 来匹配 SPI 控制器驱动(Linux 内核程序结合硬件机制实现了该功能,具体 PCI 设备枚举和匹配过程可以参考 PCI 方面的专业资料),触发其 Probe 程序;然而 SPI 从设备是无法自动探测到的,需要在 ACPI 表中声明这些从设备(x86 平台),或在平台设备中注册相关的 SPI Board Info,以便内核能够匹配到正确的 SPI 设备驱动并触发其 Probe 程序。 以平台设备为例,看下 SPI 从设备的探测流程。由于 SPI 平台设备是通过 SPI Board Info 来声明设备存在的,所以先介绍 spi_board_info 的具体结构。然后再根据 SPI Board Info 一步步分析 SPI 从设备的 Probe 过程。