iSe*_*ult 35 linux-device-driver linux-kernel
如何probe()调用电话?谁叫它?根据我的理解,__init()寄存器driver然后以某种方式probe()被调用到register设备数据irq等.它究竟发生了什么?
我正在研究触摸屏驱动程序及其__init注册本身i2c driver.然后探测期望i2c_client数据返回null.我想跟踪它被填满的地方.
Mir*_*cea 37
长话短说:驱动程序的probe()函数是为调用该register_driver特定总线而调用的.更确切地说,它是由被称为probe()是的bus_type结构.在你的情况下:i2c_bus_type.
这是I2C情况下的调用链:
Sun*_*ahu 12
我准备了一个跟踪平台驱动器探测功能的图表.您正在使用I2C驱动程序,其中AFAIK是一个平台驱动程序.我希望这可以帮助您追踪问题.
另外,请查看以下链接以查看有关kernelnewbies的讨论.
https://www.mail-archive.com/kernelnewbies%40kernelnewbies.org/msg12423.html
小智 7
让我们考虑一个例子platform device driver:
driver->probe()回调的起始触发函数是module_init()加载驱动程序时调用的宏;这macro在 中定义include/linux/module.h。
module_init(my_driver_init)有回调my_driver_init()函数。my_driver_init()函数应该调用platform_driver_register(my_driver)
platform_driver_register(my_driver)将my_driver -> probe()句柄分配给泛型drv -> probe()并调用该driver_register(my_driver)函数。
driver_register(my_driver)函数添加my_driver到平台总线和调用driver_attach()函数。
同理,甚至platform_device需要附加到平台总线上。
最后,只有在driver_match_device()基于回报的成功.name和.id_table对的driver在从来自要么平台的设备列表匹配ACPI/DTS,那么driver_probe_device()被称为具有drv->probe()回调。
| 归档时间: |
|
| 查看次数: |
33130 次 |
| 最近记录: |