kobject编程模式
在sysfs中创建一个简单的子目录/sys/kernel/foo/,在这个目录下,还创建了1个文件:value。如果往这些文件中写入一个整数,随后可以读出。
kobject编程模式包括以下几个步骤。
1. 定义内核对象结构
我们将这个内核对象结构命名为foo,前面提到,应该将struct kobject作为它的一个域,此外,定义另一个整形域对应于要读写的属性。
2. 定义属性类型
由于内核对象有属性,需要定义一个新的属性类型foo_attribute。它以struct attribute作为一个域,show和store是对属性的操作方法。
3. 声明属性
接下来,我们用宏FOO_ATTR来声明要用到的value属性,它的访问权限为0666,show和store回调函数实现分别为value_show和value_store,
它们将对sysfs文件系统中value文件的读/写操作转变为对foo_obj内核对象的value域的操作。
4.实现内核对象的sysfs操作
内核对象foo_obj的sysfs操作表(实际上是它所属设备类型的操作表)为foo_sysfs_op,对应的show和store回调函数分别实例化为foo_attr_show和
foo_attr_store.
foo_attr_show和foo_attr_store负责将kobject和attribute结构转换为具体的内核对象(foo_obj)和对象属性(foo_attribute),然后调用对象属性的相应
方法。就这个例子来讲,它最终调用的是value_show和value_store。
5.定义内核对象释放方法
除了sysfs操作表,对象类型还应该定义释放内核对象的方法。对于内核对象foo_obj,释放方法被定义为foo_release。它在内核对象的引用计数递减为
0时,释放内核对象占用的内存空间。
6.声明内核对象类型
7.封装对象属性添加和删除方法
8. 定义对象创建和销毁方法
9. 实现模块加载和卸载方法