platform运用分离的思想,将设备信息和设备驱动分离,分离后借助总线模型device bus driver完成匹配的过程。匹配成功之后执行驱动中的probe函数,在probe中操作硬件即可,如果两者分离执行驱动中的remove。bus就完成匹配的工作(bus是内核实现的)
1.设备模型的原理
在Linux内核中所有总线驱动都遵从设备驱动的模型,总线驱动的模型如下图:
内核在设计这些总线驱动模型的时候将一个驱动分为了三个部分device、bus、driver。device是用来描述硬件设备的,bus是总线用来链接device和driver,driver是用来描述驱动的对象。在内核中所有的device放在内核的klist_devices的链表中管理,而内核中所有的driver放在klist_driver中管理。内核中的device和driver通过bus完成关联。当device和driver匹配成功之后执行驱动的probe函数,在probe函数中就可以完成操作硬件了。当卸载任何一方驱动的时候都会执行驱动中的remove函数。
2.platform总线驱动的原理
platform总线驱动遵从设备模型,platform是Linux内核抽象出来的软件代码,并没有真实的总线协议与之对应。platform总线驱动的思想就是要将设备信息和设备驱动进行分离。platform_device和platform_driver通过总线匹配成功之后会执行驱动中probe函数,在probe函数中驱动就能够拿到设备信息。