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结构体













相关文章推荐

linux下platform设备驱动框架的实现与作用解析

在网上找了好多资料看,包括宋宝华那本书。都是在讲platform的构成,设备驱动的内容什么的。却没有人专门来讲一下platform框架跟一般驱动之间的关系,以及platform到底用来干什么? 定...

platform设备

  • 2012年02月15日 09:39
  • 18KB
  • 下载

platform设备驱动全透析

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

platform设备驱动全透析

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://21cnbao.blog.51cto.com/109393/337609 ...

platform设备驱动

1.platform总线、设备与驱动 在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统...

linux中platform设备autoprobe与驱动绑定理解

kernel_init中do_basic_setup()->driver_init()->platform_bus_init()->...初始化platform bus(虚拟总线) 设备向内核注册的...

platform设备驱动全透析

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

platform设备添加流程

今天我以fb设备的注册过程来分析platform设备的添加流程platform总线是kernel中最近加入的一种虚拟总线,它被用来连接处在仅有最少基本组件的总线上的那些设备.这样的总线包括许多片上系统...

嵌入式学习笔记——platform设备

platform机制将本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform_device提供的标准接口进行申请并使用。         开发环境:ubuntu 12.0...

linux platform设备驱动简介及实例

简介: 目的:说白了就是为了将设备与驱动分离,通过platform总线进行连接 废话不多说: 相关结构介绍: 1.platform设备 结构体structpl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:platform设备 函数解析
举报原因:
原因补充:

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