在drivers/base下的platform.c中:
struct device platform_bus = {
.init_name = "platform",
};
注意它是一个struct device结构类型,它是所有设备的根目录。
这是在s5p4418中display.c中的一段代码:
struct kobject *kobj = NULL;
/* create attribute interface */
kobj = kobject_create_and_add("display", &platform_bus.kobj); //在/sys/devices/platform中添加一个设备目录
if (! kobj) {
printk(KERN_ERR "Fail, create kobject for display\n");
return -ret;
}
ret = sysfs_create_group(kobj, &attr_group); //为设备添加属性。
再来看lib/kobject.c中的kobject_create_and_add定义:
struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
{
struct kobject *kobj;
int retval;
kobj = kobject_create();
if (!kobj)
return NULL;
retval = kobject_add(kobj, parent, "%s", name);
if (retval) {
printk(KERN_WARNING "%s: kobject_add error: %d\n",
__func__, retval);
kobject_put(kobj);
kobj = NULL;
}
return kobj;
}
EXPORT_SYMBOL_GPL(kobject_create_and_add);
它的第1个参数是要建的目录的名称,第2个参数是父目录的kobject对象(这意为着不光可以在/sys/devices/platform下创建,还可以在任意目录下创建)。