外边阴天了,看来避免不了一场大雨的降临!!在宿舍,挺爽的,喜欢雨,喜欢大雨!!
1、驱动描述结构
在 Linux 设备模型中,总线由 device_driver 结构表示,定义在 <linux/device.h> 中。
struct device_driver
{
const char *name; /* 驱动程序的名字(体现在 sysfs 中) */
struct bus_type *bus; /* 驱动程序所在的总线 */
struct module *owner;
const char *mod_name;
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);
struct attribute_group **groups;
struct dev_pm_ops *pm;
struct driver_private *p;
};
2、驱动方法函数
驱动的注册使用:
int driver_register(struct device_driver *drv);
驱动的注销使用:
void driver_unregister(struct device_driver *drv);
如果需要为驱动创建属性文件需要赋值如下结构:
struct driver_attribute
{
struct attribute attr;
ssize_t (*show)(struct device_driver *drv,char *buf);
ssize_t (*store)(struct device_driver *drv,const char *buf,size_t count);
};
其中 attr 成员用于描述属性的名称和对应属性文件的权限,show、store成员则用于构造属性文件的读写信息。驱动属性文件并不会随着驱动的注册而自动创建,需要通过调用下面的函数来创建:
int driver_create_file(struct device_driver *drv,struct driver_attribute *attr);
驱动属性文件删除使用函数:
void driver_remove_file(struct device_driver *drv,struct driver_attribute *attr);
设备属性结构可以使用下面的饿宏来完成初始化:
#define DRIVER_ATTR(_name,_mode,_show,_store) \
struct driver_attribute driver_attr_##_name = \
__ATTR(_name,_mode,_show,_store)
宏 __ATTR 定义在 linux/sysfs.h 下:
#define __ATTR(_name,_mode,_show,_store) { \
.attr = {.name = __stringify(_name),.mode = _mode}, \
.show = _show, \
.store = _store, \