查看: 1234|回复: 0

Platform相亲之旅

[复制链接]
  • TA的每日心情
    开心
    2017-12-22 08:59
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-2-23 11:27:55 | 显示全部楼层 |阅读模式
    分享到:

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


    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 18:54 , Processed in 0.114534 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.