device.txt

来自「Linux Kernel 2.6.9 for OMAP1710」· 文本 代码 · 共 155 行

TXT
155
字号
The Basic Device Structure~~~~~~~~~~~~~~~~~~~~~~~~~~struct device {        struct list_head g_list;        struct list_head node;        struct list_head bus_list;        struct list_head driver_list;        struct list_head intf_list;        struct list_head children;        struct device   * parent;        char    name[DEVICE_NAME_SIZE];        char    bus_id[BUS_ID_SIZE];        spinlock_t      lock;        atomic_t        refcount;        struct bus_type * bus;        struct driver_dir_entry dir;	u32		class_num;        struct device_driver *driver;        void            *driver_data;        void            *platform_data;        u32             current_state;        unsigned char *saved_state;        void    (*release)(struct device * dev);};Fields ~~~~~~g_list:	Node in the global device list.node:	Node in device's parent's children list.bus_list: Node in device's bus's devices list.driver_list:   Node in device's driver's devices list.intf_list:     List of intf_data. There is one structure allocated for	       each interface that the device supports.children:      List of child devices.parent:        *** FIXME ***name:	       ASCII description of device. 	       Example: " 3Com Corporation 3c905 100BaseTX [Boomerang]"bus_id:	       ASCII representation of device's bus position. This 	       field should be a name unique across all devices on the	       bus type the device belongs to. 	       Example: PCI bus_ids are in the form of	       <bus number>:<slot number>.<function number> 	       This name is unique across all PCI devices in the system.lock:	       Spinlock for the device. refcount:      Reference count on the device.bus:	       Pointer to struct bus_type that device belongs to.dir:	       Device's sysfs directory.class_num:     Class-enumerated value of the device.driver:	       Pointer to struct device_driver that controls the device.driver_data:   Driver-specific data.platform_data: Platform data specific to the device.current_state: Current power state of the device.saved_state:   Pointer to saved state of the device. This is usable by	       the device driver controlling the device.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).Programming Interface~~~~~~~~~~~~~~~~~~~~~The bus driver that discovers the device uses this to register thedevice with the core:int device_register(struct device * dev);The bus should initialize the following fields:    - parent    - name    - bus_id    - busA device is removed from the core when its reference count goes to0. The reference count can be adjusted using:struct device * get_device(struct device * dev);void put_device(struct device * dev);get_device() will return a pointer to the struct device passed to itif the reference is not already 0 (if it's in the process of beingremoved already).A driver can access the lock in the device structure using: void lock_device(struct device * dev);void unlock_device(struct device * dev);Attributes~~~~~~~~~~struct device_attribute {        struct attribute        attr;        ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off);        ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off);};Attributes of devices can be exported via drivers using a simpleprocfs-like interface. Please see Documentation/filesystems/sysfs.txt for more informationon how sysfs works.Attributes are declared using a macro called DEVICE_ATTR:#define DEVICE_ATTR(name,mode,show,store)Example:DEVICE_ATTR(power,0644,show_power,store_power);This declares a structure of type struct device_attribute named'dev_attr_power'. This can then be added and removed to the device'sdirectory using:int device_create_file(struct device *device, struct device_attribute * entry);void device_remove_file(struct device * dev, struct device_attribute * attr);Example:device_create_file(dev,&dev_attr_power);device_remove_file(dev,&dev_attr_power);The file name will be 'power' with a mode of 0644 (-rw-r--r--).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?