Linux 内核驱动程序 - SPI 如何识别 SPI 设备?

Linux Kernel Driver - SPI how is a SPI device identified?

我一直在阅读 SPI 以及如何创建内核驱动程序,但我仍然不确定所有这些是如何工作的。

例如:

 static struct spi_driver ds1305_driver = {
         .driver.name    = "rtc-ds1343",
         .driver.owner   = THIS_MODULE,
         .probe          = ds1343_probe,
         .remove         = __devexit_p(ds1343_remove),
         /* REVISIT add suspend/resume */
 };

如果我理解正确,您应该在板文件(旧系统)或设备树中添加 spi_board_info,这样 SPI 就知道如何与实际设备通信。

从其他人的实现来看,这似乎真的只是让内核知道什么芯片select、数据速率等等基本的SPI信息。

问题:

那么,当系统启动时,内核驱动程序会向设备发送一个时钟并读取设备的名称?

所有设备的名称都写在某个位置是标准化的,还是我完全错了?

通用 SPI 驱动程序是否负责探测设备以获取此信息(在我的例子中 mxc_spi-0)?

最后,如果它确实读取了设备的名称,它会滚动浏览可用的驱动程序并与此 spi_driver.driver.name 匹配吗?

我真的对细节一头雾水。

谢谢!

SPI 既不提供也不包含识别信息。由集成商、分销商或用户指定使用哪种总线 and/or 从属 select 机制连接哪些 SPI 设备。