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:将用户空间需要的参数添加到环境变量中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值