spi驱动子系统中probe函数的入口参数是怎么传的?
最近一直在做这个关于SPI驱动的项目,之前也没接触过Linux内核下的驱动,虽然以前用过单片机和ARM,能够使用GPIO模拟SPI来驱动外设,但现在换到Linux内核下需要用到Linux内核提供的方法来与底层SPI打交道,而反倒很不习惯,只能硬着头皮做了。看了一些程序,先简要的列一下流程:
1 static int aic26_probe(struct spi_device *this_dev)
{
if (this_dev)
{
aic26_spi_obj.spi = this_dev;
.............................
}
else
{
..........
}
..........
}
2 static struct spi_driver aic26_driver = {
.driver = {
.name = AIC26_DRIVER,
},
.probe = aic26_probe,
.remove = aic26_remove,
};
3 err = spi_register_driver(&aic26_driver);
问题:aic26_probe中的入口参数*this_dev是怎么传进来的,我知道这个函数是系统来调用的,这里的这个参数也是系统传进的,但我在程序运行时,发现这个this_dev是NULL,接下来对SPI的读写都是无效的,虽然platform_device_register()、
driver_register()、spi_register_driver()都成功返回。
而查看了/sys/bus/spi/driver,/sys/bus/platform/driver,/sys/bus/platform/device,都加载成功,而唯独在/sys/bus/spi/device中没有看到相关信息,我想应该是我的spi设备没有加载成功吧。现在我也不知道问题在哪,是不是platform_device_register()、driver_register()、spi_register_driver()过程中还是有问题。请高手指导,如果可以的话能不能提供一个简单的SPI子系统实例参考一下,实在是弄不明白,谢谢了。