zoukankan      html  css  js  c++  java
  • linux 设备模型

    Linux 设备模型中有最重要的四个基本概念 : device   bus   class 

    Linux 认为总线是 CPU和其他设备的通信的通道。基于设备模型,linux 认为所有的设备都需要和总线连接.

    /**
     * struct bus_type - The bus type of the device
     *
     * @name:    The name of the bus.
     * @dev_name:    Used for subsystems to enumerate devices like ("foo%u", dev->id).
     * @dev_root:    Default device to use as the parent.
     * @bus_attrs:    Default attributes of the bus.
     * @dev_attrs:    Default attributes of the devices on the bus.
     * @drv_attrs:    Default attributes of the device drivers on the bus.
     * @match:    Called, perhaps multiple times, whenever a new device or driver
     *        is added for this bus. It should return a nonzero value if the
     *        given device can be handled by the given driver.
     * @uevent:    Called when a device is added, removed, or a few other things
     *        that generate uevents to add the environment variables.
     * @probe:    Called when a new device or driver add to this bus, and callback
     *        the specific driver's probe to initial the matched device.
     * @remove:    Called when a device removed from this bus.
     * @shutdown:    Called at shut-down time to quiesce the device.
     * @suspend:    Called when a device on this bus wants to go to sleep mode.
     * @resume:    Called to bring a device on this bus out of sleep mode.
     * @pm:        Power management operations of this bus, callback the specific
     *        device driver's pm-ops.
     * @iommu_ops:  IOMMU specific operations for this bus, used to attach IOMMU
     *              driver implementations to a bus and allow the driver to do
     *              bus-specific setup
     * @p:        The private data of the driver core, only the driver core can
     *        touch this.
     *
     * A bus is a channel between the processor and one or more devices. For the
     * purposes of the device model, all devices are connected via a bus, even if
     * it is an internal, virtual, "platform" bus. Buses can plug into each other.
     * A USB controller is usually a PCI device, for example. The device model
     * represents the actual connections between buses and the devices they control.
     * A bus is represented by the bus_type structure. It contains the name, the
     * default attributes, the bus' methods, PM operations, and the driver core's
     * private data.
     */
    struct bus_type {
        const char        *name;
        const char        *dev_name;
        struct device        *dev_root;
        struct bus_attribute    *bus_attrs;
        struct device_attribute    *dev_attrs;
        struct driver_attribute    *drv_attrs;
    
        int (*match)(struct device *dev, struct device_driver *drv);
        int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
        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 dev_pm_ops *pm;
    
        struct iommu_ops *iommu_ops;
    
        struct subsys_private *p;
        struct lock_class_key lock_key;
    };
  • 相关阅读:
    CRMEB系统开发文档
    R语言︱LDA主题模型——最优主题...
    2018前端面试及答案
    开发流程
    uitramon 安装包
    scrapy 爬取时很多重复 及日志输出
    fake-useragent插件无法正常使用的问题
    区块链共识机制(一)
    Python Twisted 之 Deferred
    区块链的三大分支:公有链、联盟链和私有链
  • 原文地址:https://www.cnblogs.com/guoyu1024/p/10467575.html
Copyright © 2011-2022 走看看