struct device

include/linux/device.h

/**

 * struct device - The basic device structure
 * @parent:    The device's "parent" device, the device to which it is attached.
 *         In most cases, a parent device is some sort of bus or host
 *         controller. If parent is NULL, the device, is a top-level device,
 *         which is not usually what you want.
 * @p:        Holds the private data of the driver core portions of the device.
 *         See the comment of the struct device_private for detail.
 * @kobj:    A top-level, abstract class from which other classes are derived.
 * @init_name:    Initial name of the device.
 * @type:    The type of device.
 *         This identifies the device type and carries type-specific
 *         information.
 * @mutex:    Mutex to synchronize calls to its driver.
 * @bus:    Type of bus device is on.
 * @driver:    Which driver has allocated this
 * @platform_data: Platform data specific to the device.
 *         Example: For devices on custom boards, as typical of embedded
 *         and SOC based hardware, Linux often uses platform_data to point
 *         to board-specific structures describing devices and how they
 *         are wired.  That can include what ports are available, chip
 *         variants, which GPIO pins act in what additional roles, and so
 *         on.  This shrinks the "Board Support Packages" (BSPs) and
 *         minimizes board-specific #ifdefs in drivers.
 * @power:    For device power management.
 *         See Documentation/power/devices.txt for details.
 * @pwr_domain:    Provide callbacks that are executed during system suspend,
 *         hibernation, system resume and during runtime PM transitions
 *         along with subsystem-level and driver-level callbacks.
 * @numa_node:    NUMA node this device is close to.
 * @dma_mask:    Dma mask (if dma'ble device).
 * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all
 *         hardware supports 64-bit addresses for consistent allocations
 *         such descriptors.
 * @dma_parms:    A low level driver may set these to teach IOMMU code about
 *         segment limitations.
 * @dma_pools:    Dma pools (if dma'ble device).
 * @dma_mem:    Internal for coherent mem override.
 * @archdata:    For arch-specific additions.
 * @of_node:    Associated device tree node.
 * @devt:    For creating the sysfs "dev".
 * @devres_lock: Spinlock to protect the resource of the device.
 * @devres_head: The resources list of the device.
 * @knode_class: The node used to add the device to the class list.
 * @class:    The class of the device.
 * @groups:    Optional attribute groups.
 * @release:    Callback to free the device after all references have
 *         gone away. This should be set by the allocator of the
 *         device (i.e. the bus driver that discovered the device).
 *
 * At the lowest level, every device in a Linux system is represented by an
 * instance of struct device. The device structure contains the information
 * that the device model core needs to model the system. Most subsystems,
 * however, track additional information about the devices they host. As a
 * result, it is rare for devices to be represented by bare device structures;
 * instead, that structure, like kobject structures, is usually embedded within
 * a higher-level representation of the device.
 */
struct device {
    struct device        *parent;

    struct device_private    *p;

    struct kobject kobj;
    const char        *init_name; /* initial name of the device */
    const 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, device
                       core doesn't touch it */
    struct dev_pm_info    power;
    struct dev_power_domain    *pwr_domain;

#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 consistent
                         allocations 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;

    struct device_node    *of_node; /* associated device tree node */

    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);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`struct device` 是 Linux 内核中表示硬件设备的结构体之一。它定义在 `<linux/device.h>` 头文件中,其定义如下: ```c struct device { struct device *parent; struct device_private *p; struct kobject kobj; const char *init_name; struct device_type *type; struct mutex mutex; struct bus_type *bus; struct device_driver *driver; void *platform_data; struct dev_pm_info power; struct dev_pm_domain *pm_domain; int numa_node; u64 *dma_mask; u64 coherent_dma_mask; struct device_dma_parameters *dma_parms; struct list_head dma_pools; struct dma_coherent_mem *dma_mem; struct dev_archdata archdata; struct device_node *of_node; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; struct klist_node knode_class; struct class *class; const struct attribute_group **groups; void (*release)(struct device *dev); }; ``` 这个结构体包含了表示设备的各种属性,例如设备名称、设备类型、设备驱动、设备的 DMA 相关信息等。它的各个字段的含义如下: - `parent`:指向父设备的指针; - `p`:指向 `struct device_private` 结构体的指针,表示设备的私有数据; - `kobj`:用于表示设备的内核对象; - `init_name`:设备的名称; - `type`:指向 `struct device_type` 结构体的指针,表示设备的类型; - `mutex`:用于保护设备的并发访问; - `bus`:指向 `struct bus_type` 结构体的指针,表示设备所在的总线类型; - `driver`:指向 `struct device_driver` 结构体的指针,表示设备所使用的驱动程序; - `platform_data`:指向设备平台数据的指针; - `power`:表示设备电源管理相关的信息; - `pm_domain`:指向设备电源域的指针; - `numa_node`:表示设备所在的 NUMA 节点编号; - `dma_mask`:指向设备 DMA 地址掩码的指针; - `coherent_dma_mask`:表示设备 DMA 地址掩码的值; - `dma_parms`:指向 `struct device_dma_parameters` 结构体的指针,表示设备 DMA 相关的参数; - `dma_pools`:表示设备 DMA 内存池的链表; - `dma_mem`:指向 `struct dma_coherent_mem` 结构体的指针,表示设备的一段连续 DMA 内存; - `archdata`:表示设备的架构相关信息; - `of_node`:指向设备树节点的指针; - `devt`:表示设备的设备号; - `id`:设备的 ID; - `devres_lock`:用于保护设备的资源列表; - `devres_head`:表示设备的资源列表; - `knode_class`:表示设备所属的类; - `class`:指向 `struct class` 结构体的指针,表示设备所属的类; - `groups`:指向属性组数组的指针; - `release`:指向设备释放函数的指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值