zoukankan      html  css  js  c++  java
  • 什么是platform device?

    1 为了实现设备跟驱动的分离,linux开始引入platform模型。使用该模型的设备,通常是不可被“发现”的设备(它不像USB,PCI那样能够枚举),例如I2C,SPI设备。对于platform devices,我们必然清晰的了解他们的地址。

          摘自:kernel-xxxDocumentationdriver-modelplatform.txt

    Platform devices are devices that typically appear as autonomous
    entities in the system. This includes legacy port-based devices and
    host bridges to peripheral buses, and most controllers integrated
    into system-on-chip platforms.  What they usually have in common
    is direct addressing from a CPU bus.  Rarely, a platform_device will
    be connected through a segment of some other kind of bus; but its
    registers will still be directly addressable.

    2 platform devices 通常是系统中重要的设备,他们在系统启动的时候,尽早的注册和加载,例如电源管理芯片。

    3 platform devices 通常都会有IO配置,电源管理等需求。随着运行linux内核的移动设备的增加,电源管理变得越来越重要。

    4 platform device 与 drivers 通过name来binding,当然,我们遵循先注册设备,再注册驱动的顺序。

    struct platform_device {
        const char    *name;
        u32        id;
        struct device    dev;
        u32        num_resources;
        struct resource    *resource;
    };
    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;
    };
    //没有name?接着往下看
    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 */
    
        const struct of_device_id    *of_match_table;
        const struct acpi_device_id    *acpi_match_table;
    
        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;
    };
  • 相关阅读:
    使用PL/SQL运行WorkFlow
    Form 中参数parameter.G_query_find的作用
    APPFND00756: Cannot find combination CCID=1 CODE=GL# SET=50362
    警惕32位程序在MethodImplOptions.Synchronized在x64机器上的同步缺陷
    中文自动分词技术
    error filesystem grub rescue的解决办法。
    创建数据库
    自适应网页设计理念(Responsive Web Design)
    FullCalendar 官方文档翻译
    用CSS控制滚动条
  • 原文地址:https://www.cnblogs.com/duanyongzhen/p/5232370.html
Copyright © 2011-2022 走看看