明党参

注册

 

发新话题 回复该主题

浅谈linux设备驱动分离plat [复制链接]

1#

概述

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;};

左右滑动

分享 转发
TOP
发新话题 回复该主题