概述
platform是Linux内的一种虚拟总线,称为platform总线,包含platform_device设备和platform_driver驱动两个对象,用于将驱动和设备分开,实现内核分离的思想。
注意
1、?platform总线是一种虚拟、抽象出来的总线,实际中并不存在这样的总线。根本目的在于提高驱动代码的可移植性,实现内核的分离思想,思路:将纯硬件和纯软件分开。
2、platform的简单理解:内核维护着两个链表(driver和device),工程师注册设备或者驱动,实际是注册到对应的链表。
3、当新设备(device)注册到platform总线上时,内核会自动遍历驱动(driver)链表,比较两个的名字,若能匹配,自动调用driver中的probe方法,并把device对象地址传递给driver。
4、当新驱动(driver)注册到platform总线上时,内核会自动遍历驱动(device)链表,比较两个的名字,若能匹配,自动调用driver中的probe方法,并把device对象地址传递给driver。
接口
platformdriver对象定义,主要提供设备与驱动匹配或者移除之后的回调函数接口。
driver中的name属性和id_table中的name属性均用于设备端进行匹配,后者用于设备树的场景,后期会有文章单独介绍。
structplatform_driver{int(*probe)(structplatform_device*);/*platformdrv和dev匹配后回调函数*/int(*remove)(structplatform_device*);/*platformdrv或dev移除后回调函数*/...structdevice_driverdriver;conststructplatform_device_id*id_table;...};structdevice_driver{constchar*name;/*platform用于与设备(dev)名匹配*/...};structplatform_device_id{charname[PLATFORM_NAME_SIZE];/*与设备树中的设备信息匹配*/kernel_ulong_tdriver_data;};
左右滑动