class_device_create() -- 生成并注册一个逻辑设备
2007年08月31日 星期五 11:31
usb_register_bus() --> class_device_create()
linux-2.6.21.5/drivers/base/class.c class_device_create - creates a class device and registers it with sysfs 每个class_device对象表示一个逻辑设备,并通过struct class_device中的dev域(一个指向struct device的指针)关联一个物理设备。这样,一个逻辑设备总是对应于一个物理设备,但是一个物理设备却可能对应于多个逻辑设备。 将*device对应的逻辑设备(class_device)添加到*cls所代表的设备类中。在*cls所在目录下,建立代表逻辑设备的目录。 struct class_device *class_device_create( struct class *cls, struct class_device *parent, dev_t devt, struct device *device, const char *fmt, ...) { va_list args; struct class_device *class_dev = NULL; int retval = -ENODEV; if (cls == NULL || IS_ERR(cls)) goto error; class_dev = kzalloc(sizeof(*class_dev), GFP_KERNEL); if (!class_dev) { retval = -ENOMEM; goto error; } class_dev->devt - = devt; class_dev->dev = device; class_dev->class = cls; class_dev->parent - = parent; class_dev->release = class_device_create_release; class_dev->uevent - = class_device_create_uevent; va_start(args, fmt); vsnprintf(class_dev->class_id, BUS_ID_SIZE, fmt, args); va_end(args); retval = class_device_register(class_dev); if (retval) goto error; return class_dev; error: kfree(class_dev); return ERR_PTR(retval); } |