我读了下面这样的代码。设备名称"my_sdio“是在调用sdio_register_driver()之后还是在调用my_sdio_probe()之后在/dev中创建的?如果两者都不是,设备名称是什么时候创建的?
static struct sdio_driver my_sdio_driver = {
.name = "my_sdio",
.id_table = my_sdio_ids,
.probe = my_sdio_probe,
.remove = my_sdio_remove,
};
sdio_register_driver(&my_sdio_driver);发布于 2014-05-05 13:37:13
sdio_register_driver()和my_sdio_probe()都不会创建名为my_sdio的设备。
函数sdio_register_driver会将你的驱动注册到内核。设备将通过将设备注册到内核来创建。通常在使用register_blkdev或register_chrdev的应用程序代码中。在这里,您将为您的设备指定名称my_sdio。
下面结构中的name参数有助于将驱动程序绑定到设备(在应用程序代码中创建)。
static struct sdio_driver my_sdio_driver = {
.name = "my_sdio",
.id_table = my_sdio_ids,
.probe = my_sdio_probe,
.remove = my_sdio_remove,
};只有在找到设备和驱动程序之间的匹配项后,才会调用my_sdio_probe()函数。
来自https://www.kernel.org/doc/Documentation/driver-model/platform.txt
驱动程序绑定由驱动程序核心自动执行,在找到设备和驱动程序之间的匹配后调用驱动程序探测()。如果探测()成功,则驱动程序和设备照常绑定。有三种不同的方法可以找到这样的匹配:
- Whenever a device is registered, the drivers for that bus are
checked for matches. Platform devices should be registered very
early during system boot.
- When a driver is registered using platform_driver_register(), all
unbound devices on that bus are checked for matches. Drivers
usually register later during booting, or by module loading.
- Registering a driver using platform_driver_probe() works just like
using platform_driver_register(), except that the driver won't
be probed later if another device registers. (Which is OK, since
this interface is only for use with non-hotpluggable devices.)https://stackoverflow.com/questions/23460648
复制相似问题