码迷,mamicode.com
首页 > 其他好文 > 详细

platform_device 框架 学习总结

时间:2019-08-24 19:10:20      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:form   对象   for   函数   获取   虚拟地址   类型   ons   物理地址   

1,内核以实现总线,只需写驱动和设备的信息;

2,设备链表、驱动链表;总线完成链表匹配(name);驱动执行probe函数,向上层提供open、read、write接口需要在probe函数中注册字符设备驱动;在probe函数中根据设备信息操作硬件;ioremap物理地址映射成虚拟地址操作硬件;总线编译再内核中;设备提供信息(中断号/地址);

总线完成设备和驱动的匹配;

3,platform是一个虚拟的总线,platform中采用分离思想。将设备信息和设备驱动分离,在内核中所有的设备信息被放到一条链表中,设备驱动放到一条链表中。链表中的成员通过总线进行匹配,匹配成功后执行驱动中的probe函数。设备信息和设备驱动分离后会执行驱动中的remove函数。

4,设备端: 1.分配对象struct platform_device pdev;

      2.对象初始化struct platform_device {

              const  char   *name;//用于匹配的名字

              int       id; //总线号  -1

              struct  device  dev;//所有设备的父类

              u32     num_resources;//资源数

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

            }

            struct device {

               void (*release)(struct device *dev);           

            }

            struct resource {

              resource_size_t start; //物理起始地址 0x0001a00

              resource_size_t end;  //物理结束地址 0x0001a00+20

              const char *name; //名字,一般不填

              unsigned long flags; //资源类型 IORESOURCE_IO/MEM

              

            }

      3.对象的注册 int platform_device_register(struct platform_device *pdev)

         对象的注销 void platform_device_unregister(struct platform_device *pdev)

      platform总线:它是有内核提供,提供设备和驱动端的注册和注销的方法,以及匹配过程。

    驱动端:1.分配对象 struct platform_driver pdrv;

      2.对象初始化 struct platform_driver {

              int (*probe)(struct platform_device *);//匹配成功执行的函数

              int (*remove)(struct platform_device *);//卸载一方执行的函数

 

              struct device_driver driver;

              const struct platform_device_id *id_table;//id_table 匹配方式

            };

            struct device_driver {

              const char  *name;//nema匹配方式

              struct module  *owner;

            };

      3.注册 int platform_driver_register(struct platform driver *);

         注销 void platform_driver_unregister(struct platform driver *);

5,驱动端获取设备信息的函数

  struct resource *platform_get_resource(struct platform_device *dev,unsigned int type, unsigned int num)

参数1:pdev;参数2:资源类型;参数3:第几个资源。

返回值:成功返回设备信息结构体,失败返回NULL

platform_device 框架 学习总结

标签:form   对象   for   函数   获取   虚拟地址   类型   ons   物理地址   

原文地址:https://www.cnblogs.com/device/p/11405529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!