platform的probe函数是何时被调用的

本文详细探讨了Linux内核中probe函数的调用过程,从module_init到driver_register,再到bus_add_driver,最终通过driver_probe_device进行设备与驱动的匹配和probe函数的执行。这个过程涉及设备注册、中断初始化等关键操作,揭示了内核如何管理和连接设备驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   这几天搞TI的vpfe,里面设备的注册使用platform,平台设备注册方式来注册的。一直都知道

里的probe函数,但是不知道是何时被调用的。经过跟踪代码,在module_init(vpfe_init);模块初始化的时候,vpfe_init函数中调用了

这里
 err = driver_register(&vpfe_driver);
的原型为:

跟踪bus_add_driver(drv);得到bus_add_driver(struct device_driver * drv)的原型:

这里调用了 driver_probe_device(drv, dev);
原型:

  

可以看出是先调用了总线的probe方法,接着调用了设备的probe方法。


总之一句话,probe函数作为driver的最基本的函数指针,一旦你的device和driver匹配(match,由总线(bus)来完成,匹配工作发生在device_register()和drvier_register()

的时候),probe函数就肯定会被调用,期间一般会完成device的初始化,注册中断等操作。

顺便讲下在内核中是怎么按照driver mode来实现整个系统的设备和驱动注册的。

在系统初始化阶段,会首先向内核注册各种常用的总线类型,比如pci, usb, spi, i2c, platform等等,当然你也可以自己发明一种总线类型注册上去。

这部分代码一般放在./arch/arm/mach-xxx/board-xxx.c中。

在此之后,会将系统的设备列表,基本上整个系统的device都在这里了,一一地注册进内核,就是调用device_regisger注册的过程。然后是对于各个device设备driver的注册。

这部分代码一般放在./drvier/下面。

大部分device和driver的匹配方式就是看名字是否相同,这部分属于总线分内的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值