在linux系统中每一个设备由结构体::struct device来描述
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 thisdevice --管理该设备的驱动*/
void*platform_data; /* Platform specific data, devicecore doesn't touch it */
struct dev_pm_infopower;
#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_headdma_pools; /* dma pools (if dma'ble) */
struct dma_coherent_mem*dma_mem; /* internal for coherent mem
override */
/* arch specific additions */
struct dev_archdataarchdata;
#ifdef CONFIG_OF
struct device_node*of_node;
#endif
dev_t devt;/* dev_t, creates the sysfs "dev" */
spinlock_t devres_lock;
struct list_headdevres_head;
struct klist_nodeknode_class;
struct class *class;
const struct attribute_group **groups;/* optional groups */
void (*release)(struct device *dev);
};
注册设备使用的函数
device_register(struct device *dev);
注销设备使用的函数
device_unregister(struct device *dev);
设备属性结构体 device_attribute描述
struct device_attribute {
struct attributeattr;
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
char *buf);//读取时 调用的函数
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);//写入时 调用的函数
};
创建属性函数
device_create_file(struct device *device,const struct device_attribute *entry);
删除属性文件
device_remove_file(struct device *dev,const struct device_attribute *attr);