背景:
在Linxu内核驱动源码中经常可以看见,函数注册的用法。常见的驱动probe阶段均有driver register的过程。细究之下,发现是使用函数指针的方式,将驱动的实现部分注册进链表中。在实际的项目中,这种用法无疑能够优化程序的框架,使得整体风格更为统一。
定义好注册接口后,将待执行的函数进行注册,在程序执行到某个地方进行统一调度。试想在linux设备树的框架中,在kernei执行的早期,设备树被展开成各platform_device,在后期的驱动实现过程中,驱动经过moudule_init()后,将带有compatible属性的的match table数据的platform_driver驱动进行注册。注册之后,系统会进行驱动与设备的match操作,当通过compatible表匹配到相关设备时,会进行probe回调函数的运行。