LDD3读书笔记(第15章 Linux设备模型)

kobject
#include <linux/kobject.h>
    包含文件中包含了对kobject的定义,以及相关的结构和函数。
void kobject_init(struct kobject *kobj);
int kobject_set_name(struct kobject *kobj,const char *format,...);
    kobject的初始化函数。
struct kobject *kobject_get(struct kobject *kobj);
void kobject_put(struct kobject *kobj);
    管理kobject引用计数的函数。
struct kobj_type;
struct kobj_type *get_ktype(struct kobject *kobj);
    对包含kobject的结构类型的描述,使用get_ktype获得与指定kobject相关的kobj_type。
int kobject_add(struct kobject *kobj);
extern int kobject_register(struct kobject *kobj);
void kobject_del(struct kobject *kobj);
void kobject_unregister(struct kobject *kobj);
    kobject_add向系统添加kobject,处理kset成员关系,sysfs表述以及产生热插拔事件。kobject_register函数是kobject_init和kobject_add的组合。使用kobject_del删除一个kobject,或者使用kobject_unregister函数,它是kobject_del和kobject_put的组合。
void kset_init(struct kset *kset);
int kset_add(struct kset *kset);
int kset_register(struct kset *kset);
void kset_unregister(struct kset *kset);
    kset的初始化和注册函数。
decl_subsys(name,type,hotplug_ops);
    使声明子系统得以简化的宏。
void subsystem_init(struct subsystem *subsys);
int subsystem_register(struct subsystem *subsys);
void subsystem_unregister(struct subsystem *subsys);
struct subsystem *subsys_get(struct subsystem *subsys);
void subsys_put(struct subsystem *subsys);
    对子系统的操作。

sysfs操作
#include <linux/sysfs.h>
    包含sysfs声明的包含文件。
int sysfs_create_file(struct kobject *kobj,struct attribute *attr);
int sysfs_remove_file(struct kobject *kobj,struct attribute *attr);
int sysfs_create_bin_file(struct kobject *kobj,struct bin_attribute *attr);
int sysfs_remove_bin_file(struct kobject *kobj,struct bin_attribute *attr);
int sysfs_create_link(struct kobject *kobj,struct kobject *target,char *name);
void sysfs_remove_link(struct kobject *kobj,char *name);
    添加或删除与kobject相关属性文件的函数。

总线、设备和驱动程序
int bus_register(struct bus_type *bus);
void bus_unregister(struct bus_type *bus);
    在设备模型中实现总线注册和注销的函数。
int bus_for_each_dev(struct bus_type *bus,struct device *start,void *data,int(*fn)(struct device *,void *));
int bus_for_each_drv(struct bus_type *bus,struct device_driver *start,void &data,int (*fn)(struct device_driver *,void *));
    这些函数分别遍历附属于指定总线的每个设备和驱动程序。
BUS_ATTR(name,mode,show,stroe);
int bus_create_file(struct bus_type *bus,struct bus_attribute *attr);
void bus_remove_file(struct bus_type *bus,struct bus_attribute *attr);
    使用宏BUS_ATTR声明了一个bus_attribute结构,使用上面的两个函数可对该结构进行添加和删除。
int device_register(struct device *dev);
void device_unregister(struct device *dev);
    处理设备注册的函数。
DEVICE_ATTR(name,mode,show,store);
int device_create_file(struct device *device,struct device_attribute *entry);
void device_remove_file(struct device *dev,struct device_attribute *attr);
    处理设备属性的宏和函数。
int driver_register(struct device_driver *drv);
void driver_unregister(struct device_driver *drv);
    注册和注销设备驱动程序的函数。
DRIVER_ATTR(name,mode,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);
    管理驱动程序属性的宏和函数。


struct class_simple *class_simple_create(struct module *owner,char *name);
void class_simple_destroy(struct class_simple *cs);
struct class_device *class_simple_device_add(struct class_simple *cs,dev_t devnum,struct device *device,const char *fmt,...);
void class_simple_device_remove(dev_t dev);
int class_simple_set_hotplug(struct class_simple *cs,int (*hotplug)(struct class_device *dev,char **envp,int num_envp,char *buffer,int buffer_size));
    实现class_simple接口的函数;它们管理了包含dev属性和其他内容在内的简单类入口。
int class_register(struct class *cls);
void class_unregister(struct class *cls);
    注册和注销函数。
CLASS_ATTR(name,mode,show,store);
int class_create_file(struct class *cls,const struct class_attribute *attr);
void class_remove_file(struct class *cls,const struct class_attribute *attr);
    处理类属性的常用宏和函数。
int class_device_register(struct class_device *cd);
void class_device_unregister(struct class_device *cd);
int class_device_rename(struct class_device *cd,char *new_name);
CLASS_DEVICE_ATTR(name,mode,show,store);
int class_device_create_file(struct class_device *cls,const struct class_device_attribute *attr);
void class_device_remove_file(struct class_device *cls,const struct class_device_attribute *attr);
    实现类设备接口的函数和宏。
int class_interface_register(struct class_interface *intf);
void class_interface_unregister(struct class_interface *intf);
    向类添加(或删除)接口的函数。
固件
#include <linux/firmware.h>
int request_firmware(const struct firmware **fw,char *name,struct device *device);
int request_firmware_nowait(struct module *module,char *name,struct device *device,void *context,void(*cont)(const struct firmware *fw,void *context));
void release_firmware(struct firmware *fw);
    内核中实现固件加载的接口函数。

你可能感兴趣的:(LDD3读书笔记(第15章 Linux设备模型))