【Tiny6410 And Linux】—(1.2)—kset——原理
来源:互联网 发布:行业研究报告 知乎 编辑:程序博客网 时间:2024/05/02 05:07
kobject 和 kset 本来就是相辅相成的,由于 kobject 只能创建一个目录,不能创建包含目录的目录,这里就要用到 kset!
仔细观察 kobject 和 kset 结构中,在 kobject 结构中,有一个 struct kset *kset; 的结构声明,在 kset 结构中(马上就会写出来),有一个 struct kobject kobj;的结构声明,很明显它们是互相配合的喽!!
内核对象集合用结构 kset 描述,内核对象集合是一组内核对象。在面向对象的概念中,kset 是类的顶层容器。内核对象集合并不局限于是同一类内核对象的集合,但如果不是同一类型对象,则应小心使用。
kset 是一个含有一组内核对象的口袋。例如:内核用 kset 跟踪所有的块设备或所有的 PCI 设备驱动程序。一个 kset 是文件系统 sysfs 中的一个子目录,kset 容纳的所有 kobject 在此目录中。每个 kset 含有一个 kobject,可被用来建立为 kset 所容纳的 kobject 的父对象。kset 能支持 kobject 的热插拔,并影响着 uevent 事件如何向用户空间报告。
内核对象集和中的所有内核对象具有相同的时间操作特性,共用一个时间操作函数集。
1、kset 结构:
struct kset{ struct list_head list; /* kset 中所有 kobject 的链表 */ spinlock_t list_lock; /* 访问链表成员的锁 */ struct kobject kobj; /* 内嵌kobject,通常是 kset 中所有 kobject 的父对象 */ struct kset_uevent_ops *uevent_ops; /* kset 的 uevent时间操作函数集 */};
kset 通过操作函数集结构 kset_uevent_ops 控制 kobject 的 uevent 操作,结构 kset_uevent_ops 如下:
struct kset_uevent_ops{ /* 阻止指定的 kobject 发送 uevent 时间到用户空间。函数返回为 0,将不发送 uevent */ int (*filter)(struct kset *kset,struct kobject *kobj); /* 重载 uevent 发送到用户空间的 kset 缺省名。发送的缺省名就是 kset 本身的名称 */ const char *(*name)(struct *kset,struct kobject *kobj); /* 发送 uevent 时间到用户空间,以便允许更多的环境变量加到 uevent */ int (*uevent)(struct kset *kset,struct kobject *kobj,struct kobj_uevent_env *env); }
2、kset 方法函数
void kset_init(struct kset *kset); /* 初始化 kset,未导出标号 */int kset_register(struct kset *kset); /* 注册 kset */struct kset *kset_creat_and_add(const char *name,struct kset_uevent_ops *u,struct kobject *parent); /* 创建并注册 kset */void kset_unregister(struct kset *kset); /* 使用完成 kset 后,销毁 kset */
- 【Tiny6410 And Linux】—(1.2)—kset——原理
- 【Tiny6410 And Linux】—(1.2)—kset——代码
- 【Tiny6410 And Linux】—(2.2)—Linux 中断处理——原理
- 【Tiny6410 And Linux】—(1.1)—kobject——原理
- 【Tiny6410 And Linux】—(1.3)—bus 设备模型——原理
- 【Tiny6410 And Linux】—(1.4)—device 设备模型——原理
- 【Tiny6410 And Linux】—(1.5)—driver 设备模型——原理
- 【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——原理
- 【Tiny6410 And Linux】—(2.3)—使用工作队列处理按键中断——原理
- 【Tiny6410 And Linux】—(2.4)—实现 input 模型按键驱动——原理
- 【Tiny6410 And Linux】—(6.1)—LCD 驱动测试程序——原理
- 【Tiny6410 And Linux】—(5.1)—RamDisk 驱动实现(内核缺省的处理函数 __make_request())——原理
- 【Tiny6410 And Linux】—(5.2)—RamDisk 驱动实现(自己绑定 make_request_fn() )——原理
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——原理
- Tiny6410学习—Linux命令
- 【Tiny6410 And Linux】—(1.1)—kobject——代码
- 【Tiny6410 And Linux】—(1.3)—bus 设备模型——代码
- 【Tiny6410 And Linux】—(1.4)—device 设备模型——代码
- 分组报表组件填充布局
- Huffman编码 Java实现
- ARM Linux内核启动要求
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (四)配置全攻略(转)
- WF & WCF
- 【Tiny6410 And Linux】—(1.2)—kset——原理
- start service at boot
- WCF+WF双剑合璧构建微软的SOA系列(一):从一个简单的Demo开始
- 解决AJAX中使用UpdatePanel后再用Response.Write();等无法弹出对话框问题
- android内存查看的几个命令
- LINUX常用命令(基础)
- WF & WCF(4)
- Java Reflect 机制
- Linux下FTP命令详解