linux-设备驱动之device设备结构

来源:互联网 发布:java源码安装教程 编辑:程序博客网 时间:2024/05/21 00:14

在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);

0 0
原创粉丝点击