社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 精华区
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
搜索
查看: 214|回复: 0

Platform相亲之旅

[复制链接]

3

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-23 11:21:10 | 显示全部楼层 |阅读模式

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

那么刚才的《相亲》跟咱们今天的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

失败:错误码

三者关系图:

 更多好内容可关注:华清远见 微信公众号,关注即送价值 399 的嵌入式相关电子书!


此帖出自信息发布论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-9-21 20:30 , Processed in 0.186749 second(s), 15 queries , Redis On.

快速回复 返回顶部 返回列表