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 设备。
我一直在阅读 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 设备。