platform设备 函数解析

原创 2012年03月31日 10:44:17
                         platform设备 函数解析          

                        

这些函数都在inlcude/linux/platform_device.h 和platform.c中

1. platform驱动结构体:

struct platform_driver {
    int (*probe)(struct platform_device *);
    int (*remove)(struct platform_device *);
    void (*shutdown)(struct platform_device *);
    int (*suspend)(struct platform_device *, pm_message_t state);
    int (*resume)(struct platform_device *);
    struct device_driver driver;
    const struct platform_device_id *id_table;
};

2. platform设备

struct platform_device {
    const char    * name;
    int        id;
    struct device    dev;
    u32        num_resources;
    struct resource    * resource;
    const struct platform_device_id    *id_entry;
    /* arch specific additions */
    struct pdev_archdata    archdata;
};

3. device结构体://include/linux/device.h

struct device {
    struct device        *parent;
    struct device_private    *p;
    struct kobject kobj;
    const char        *init_name; /* initial name of the device */
    struct device_type    *type;
    struct mutex        mutex;    /* mutex to synchronize calls to its driver.*/
    struct bus_type    *bus;        /* type of bus device is on */
    struct device_driver *driver;    /* which driver has allocated this device */
    void        *platform_data;    /* Platform specific data, devicecore doesn't touch it */
    struct dev_pm_info    power;
#ifdef CONFIG_NUMA
    int        numa_node;    /* NUMA node this device is close to */
#endif
    u64        *dma_mask;    /* dma mask (if dma'able device) */
    u64        coherent_dma_mask;/* Like dma_mask, but for alloc_coherent mappings as not all hardware supports 64                            bit addresses for consistentallocations such descriptors. */
    struct device_dma_parameters *dma_parms;
    struct list_head    dma_pools; /* dma pools (if dma'ble) */
    struct dma_coherent_mem    *dma_mem; /* internal for coherent mem override */
    /* arch specific additions */
    struct dev_archdata    archdata;
#ifdef CONFIG_OF
    struct device_node    *of_node;
#endif
    dev_t            devt;    /* dev_t, creates the sysfs "dev" */
    spinlock_t        devres_lock;
    struct list_head    devres_head;
    struct klist_node    knode_class;
    struct class        *class;
    const struct attribute_group **groups;    /* optional groups */
    void    (*release)(struct device *dev);
};

4.device_driver结构体:
struct device_driver {
    const char        *name;
    struct bus_type        *bus;
    struct module        *owner;
    const char        *mod_name;    /* used for built-in modules */
    bool suppress_bind_attrs;    /* disables bind/unbind via sysfs */
#if defined(CONFIG_OF)
    const struct of_device_id    *of_match_table;
#endif
    int (*probe) (struct device *dev);
    int (*remove) (struct device *dev);
    void (*shutdown) (struct device *dev);
    int (*suspend) (struct device *dev, pm_message_t state);
    int (*resume) (struct device *dev);
    const struct attribute_group **groups;
    const struct dev_pm_ops *pm;
    struct driver_private  *p;
};

5. int platform_driver_register(struct platform_driver *)
   void platform_driver_unregister(struct platform_driver *) / 注册和注销一个platform驱动。

14. platform_driver_probe(struct platform_driver *drv,int (*probe)(struct platform_device *)) //注册一个platform_driver。当一个驱动注册[platform_driver_probe()]的时候, 功能上和使用platform_driver_register()是一样的,唯一的区别是它不能被以后其他的device probe了,也就是说这个driver只能和一个device绑定

6. int platform_device_register(struct platform_device *)
   void platform_device_unregister(struct platform_device *) /注册和注销一个platform设备

13. platform_add_devices(struct platform_device **devs, int num) //批量注册platform_device  num为注册的个数。注册的源放在devs中

7. to_platform_device(x)   container_of((x), struct platform_device, dev) //由设备结构体得到成platform设备结构体

8. platform_set_drvdata(_dev,data) //_dev为platform的dev,data为要设置的数据,多为一个结构体。 把这个data数据放到platorm_device->device->p->driver_data中

9. platform_get_drvdata(_dev)//和platform_set_drvdata功能相反,从platorm_device->device->p->driver_data中取数据.

10. platform_get_irq(struct platform_device *dev, unsigned int num) //从paltform_device中获取.resource字段中由flags为IORESOURCE_IRQ资源。 它的实现由  latform_get_resource(dev, IORESOURCE_IRQ, num) 完成。

11. resource *platform_get_resource (struct platform_device *dev,unsigned int type, unsigned int num) //获取platform_device中由type标志resource字段的数据。num为resource中的个数。

12. platform_get_device_id(pdev)  ((pdev)->id_entry)   //返回platform_device中id_entry字段的platform_device_id结构体













platform平台总线工作原理详解

一、platform平台总线的简介 (1)相对于USB、PCI、I2C、SPI等物理总线来说,platform总线是一种虚拟、抽象出来的总线,实际中并不存在这样的总线。 (2)cpu与外部通信的两...
  • huangliangben
  • huangliangben
  • 2017年05月12日 22:12
  • 401

platform设备

platform机制开发底层设备驱动的流程: 1--定义platform_device 2--注册platform_device 3--定义platform_driver 4--注册platform_...
  • q123456789098
  • q123456789098
  • 2015年11月09日 09:30
  • 202

platform设备驱动全透析

1.1 platform总线、设备与驱动 在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统...
  • qingfengtsing
  • qingfengtsing
  • 2014年02月14日 20:52
  • 1367

字符设备驱动之笔记-Platform设备驱动机制(1)

平台设备注册的分析:/*做下面的资源需要看芯片手册,看原理图*/ --------------------------------------------------------- arch/ar...
  • yicao821
  • yicao821
  • 2011年09月16日 20:29
  • 1530

Linux设备驱动模型之platform总线深入浅出(加入设备树)

在Linux2.6以后的设备驱动模型中,需关心总线,设备和驱动这三种实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反,在系统每注册一个驱动的时候,会寻找与之匹配的设备...
  • qq_31505483
  • qq_31505483
  • 2017年06月25日 17:03
  • 986

json解析函数。

  玩 web 也不是一年两年了。json也用了许久。今天一好友突然问我要讲一个javascript对象保存到cookie中。我直接想到的是json。以前在 extjs中倒是有。难不成为了这么一个小功...
  • bywayboy
  • bywayboy
  • 2009年03月06日 14:01
  • 3632

platform总线、设备、驱动模型之led驱动实例

在 Linux 2.6 的设备驱动模型中,关心总线、设备和驱动这 3 个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之...
  • l1315925504
  • l1315925504
  • 2016年05月30日 16:23
  • 705

platform设备驱动框架搭建分析

之前接触到的字符设备驱动是非常单纯的Linux字符设备驱动,他不具备工程中Linux驱动中的设备与驱动分离思想和设备驱动的分层思想,不具备“总线-设备-驱动”模型的概念。接下来通过分析platform...
  • u011549260
  • u011549260
  • 2015年04月20日 17:45
  • 1765

按键驱动--platform设备的例子

http://blog.csdn.net/sjwangjinbao/archive/2010/12/26/6099210.aspx 下面将之前的按键驱动改写为platform设备。 1、建立文件夹...
  • shangyaowei
  • shangyaowei
  • 2013年12月19日 20:34
  • 262

Linux设备模型_platform设备

Linux设备模型(8)_platform设备 存档,转载于:http://www.wowotech.NET/linux_kenrel/platfo...
  • sibulini
  • sibulini
  • 2017年05月08日 11:18
  • 113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:platform设备 函数解析
举报原因:
原因补充:

(最多只允许输入30个字)