讲师博文
Platform相亲之旅 来源 : 未知     2018-08-16

刚刚过完春节,想问各位适龄男女小青年们:你们被妈妈,爸爸,三大姨,二大姑各种亲戚催婚了吗?有没有被逼着去相亲?反正我是没去。不过话说回来,“没吃过猪肉还没见过猪跑吗?”。按照惯例,春节这几天,好多父母趁着自己的儿女都回家过年的时间,赶忙给张罗亲事,去年过年回家的时候见着俺村的媒婆张,带着凤凰男小李去白富美小美家去相亲,这缘分来了啊,挡都挡不住,俩人“王八瞅绿豆”,还真对眼了。隔了没几天就闪婚,这结了婚啊,凤凰男把自己全部家当上交给白富美,白富美每天就是潇洒的买买买,哪成想这小日子还没过多久,这疯狂男就起了外心了,在外面勾搭了一个小三,跟人跑了。结果白富美倒也爽快,离婚!到这儿GAME OVER......

本文引用地址:http://www.hqyj.com/emb/Column/7560.html

那么刚才的《相亲》跟咱们今天的platform模型有啥关系呢?那关系大老鼻子了,听我细细道来。Platform模型是设备总线驱动模型中的一种,首先咱们先说一下设备总线驱动模型所描述的三个对象?你们大家会说,哪三个对象啊?自然是设备、总线、驱动、他们三个。那么它在platform中的具体化的就是加上个前缀platform,即:

platform驱动模型三个对象:platform总线、platform设备、platform驱动。

----------->明确角色,不管是媒婆张,凤凰男还是白富美都会有属于自己的描述信息,都得把属于自己的必要的信息填充上,才能进行合法的注册登记。

(1) 媒婆张(平台总线)platform_bus_type、凤凰男(平台设备)、platform_device、白富美(平台驱动)platform_driver

[1]平台总线结构体

struct bus_type platform_bus_type = {

.name = "platform", //平台总线的名称

.match = platform_match, //设备匹配时调用

.uevent = platform_uevent, //产生事件时调用

};

[2]平台设备结构体

struct platform_device {

const char *name; //平台驱动的名字

int id; //设备id,用于在该总线上同名的设备进行编号,如果只 //有一个设备,则为-1

struct device dev; //设备结构体

u32 num_resources; //资源的数量

struct resource *resource;//资源结构体

const struct platform_device_id *id_entry;//平台设备数组表

};

struct device {

struct bus_type *bus; //总线类型

dev_t devt; //设备号

struct device_driver *driver; //设备驱动

void (*release)(struct device *dev);//删除设备驱动

};

struct resource {

resource_size_t start; //资源开始

resource_size_t end; //资源结束

unsigned long flags; //资源类型

};

Start与end的含义会随着flags的不同而不同,例如:常用的flags:IORESOURCE_MEM表示内存,start,end分别表示内存起始及终止;IORESOURCE_IRQ表示中断号,start,end分别表示中断号的起始及终止。

[3]平台驱动结构体

struct platform_driver {

int (*probe)(struct platform_device *); //设备驱动结合函数

int (*remove)(struct platform_device *); //设备驱动分离卸载函数

struct device_driver driver;

const struct platform_device_id *id_table; //平台设备表

};

struct device_driver {

const char *name; //驱动名称

struct bus_type *bus; //总线名称

struct module *owner; //模块计数

const struct of_device_id *of_match_table;//用于设备树匹配

struct driver_private *p; //其私有数据

};

------------->登记:男生(或女生)找到红娘,说给我登记下看看有没有合适的女生(或男生)

(2) 驱动platform_register_driver();或设备platform_register_device();的注册,当然注册的前提是男生女生有自己相应的软硬件条件,譬如男生有自己的车,房,工资卡等,女生有贤良淑德等,这就需要男女生不断的进步丰富自己,这就涉及到了对于struct platform_device(男生),struct platform_driver(女生)结构体的成员的填充了,填充完再进行相应的注册。

[1]int platform_device_register(struct platform_device *pdev);

功能:注册平台设备驱动

参数:pdev:平台设备驱动结构体

返回值:成功:0

失败:错误码

[2] int platform_driver_register(struct platform_driver*pdrv);

功能:注册平台设备驱动

参数:pdrv:平台设备驱动结构体

返回值:成功:0

失败:错误码

------------->红娘撮合:红娘查看以前登记过的男男女女,看看有没有合适的八字(name);

(3)struct bus_type中的match函数执行匹配工作;

跟踪match的源码,查看源码实现:

------------->八字合适,男女自行交往,谈婚论嫁

(4)进行设备驱动的匹配,执行struct platform_driver中的probe函数匹配;

[1]int (*probe)(struct platform_device *pdev);

功能:设备驱动匹配函数

参数:pdev:平台设备结构体

返回值:成功:0

失败:错误码

------------->双方结婚,男生上交各种资源包含工资及财产

(5)platfrom_get_resource();获取设备struct platfrom_device中的struct resource资源;

[1]struct resource *platform_get_resource(struct platform_device *dev,

unsigned int type, unsigned int num);

功能:获取设备资源

参数:dev:平台驱动

type:获取的资源类型

num:获取的资源的编号

返回值:成功:资源结构体首地址

失败:NULL

------------->男生婚后出轨,跟小三跑路,女生自动离婚(remove),之后男生再进行收尾工作(release)

(6)平台设备卸载,平台驱动执行struct platform_driver中的remove成员函数;至此一拍两散

[1]int (*remove)(struct platform_device *pdev);

功能:移除平台驱动

参数:pdev:平台设备结构体

返回值:成功:0

失败:错误码

三者关系图:

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:BLE添加特征值

下一篇:STM32F030 Nucleo-让MCU全速点灯,其中隐藏的含义

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号