Linux内核开发之Kset

1、

      kset是具有相同类型的kobject的集合,在sysfs中体现成一个目录,在内核中用kset据结构表示,定义为:

struct kset {

      struct list_head list; //连接该kset中所有kobject的链表头

      spinlock_t list_lock;

      struct kobject kobj; //内嵌的kobject

      struct kset_uevent_ops *uevent_ops; //处理热插拔事件的操作集合

}

2、kset操作

int kset_register(struct kset *kset)

  在内核中注册一个kset

void kset_unregister(struct kset *kset)

  从内核中注销一个kset

3、热插拔事件

        在Linux系统中,当系统配置发生变化时,:添加kset到系统;移动kobject, 一个通知会从内核空间发送到用户空间,这就是热插拔事件。热插拔事件会导致用户空间中相应的处理程序(udev,mdev)被调用, 这些处理程序会通过加载驱动程序, 创建设备节点等来响应热插拔事件。

struct kset_uevent_ops {

  int(*filter)(struct kset *kset, struct kobject *kobj);

  constchar *(*name)(struct kset *kset, struct kobject *kobj);

  int(*uevent)(struct kset *kset, struct kobject *kobj,

  structkobj_uevent_env *env);

}

当该kset所管理的kobjectkset状态发生变化时(如被加入,移动),这三个函数将被调用。

filter:决定是否将事件传递到用户空间。如果 filter返回 0,将不传递事件。

name:用于将字符串传递给用户空间的热插拔处理程序。

uevent:将用户空间需要的参数添加到环境变量中。


猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80979139