本书已经展示了许多数据类型, 带有简单的在编译或者运行时初始化机制. 一个 kobject 的初始化有些复杂, 特别当使用它的所有函数时. 不管一个 kobject 如何使用, 但是, 必须进行几个步骤.
这些步骤的第一个是仅仅设置整个 kobject 为 0, 常常使用一个对 memset 的调用. 常 常这个初始化作为清零这个 kobjiect 嵌入的结构的一部分. 清零一个 kobject 失败导 致非常奇怪的崩溃, 进一步会掉线; 这不是你想跳过的一步.
下一步是设立一些内部成员, 使用对 kobject_init() 的调用: void kobject_init(struct kobject *kobj);
在其他事情中, kobject_init 设置 kobject 的引用计数为 1. 调用 kobject_init 不够, 但是. kobject 用户必须, 至少, 设置 kobject 的名子. 这是用在 sysfs 入口的名子. 如果你深入内核代码, 你可以发现直接拷贝一个字符串到 kobject 的名子成员的代码, 但是应当避免这个方法. 相反, 使用:
int kobject_set_name(struct kobject *kobj, const char *format, ...);
这个函数采用一个 printk 风格的变量参数列表. 不管你信或不信, 对这种操作实际上可 能失败( 他可能试图分配内存 ); 负责任的代码应当检查返回值并且有针对性的相应.
其他的由创建者应当设置的 kobject 成员, 直接或间接, 是 ktype, kset, 和 parent. 我们在本章稍后到这些.