Re: device model and character devices

Greg KH
2006-04-04T19:14:31Z

On Tue, Apr 04, 2006 at 12:12:31PM +0400, Artem B. Bityutskiy wrote:
> Hello Greg,
>
> at the moment the device model and the character devices subsystem are
> distinct and different things. I mean, if I have a device xdev, I do the
> following:
>
> struct xdev_device {
> struct cdev cdev;
> struct device dev;
> /* xdev-specific stuff */
> ...
> } xdev;
>
> I use xdev.cdev to register character device:
>
> cdev_add(&xdev.cdev, ...);
> ...
>
> I use xdev.dev functions to include my device to the device-model:
>
> device_register(&xdev.dev, ...);
> ...
>
> But why not to merge the character device stuff and the device model?
> Roughly speaking, why not to embed 'struct cdev' to 'struct device'? Why
> do driver writers have to distinguish between these things?

Because "struct device" generally is not related to a major:minor pair
at all. That is what a struct class_device is for. Lots of struct
device users have nothing to do with a char device, and some have
multiple char devices associated with a single struct device.

You need to create a struct class_device in order to export the proper
information to userspace so that udev and other tools can pick up the
fact that your device is present and it needs to create a device for it.

All that being said, yes, there is a disconnect between the driver model
parts and the char subsystem. It's been something that I've wanted to
fix for a number of years, but never had the time to do so. If you want
to work toward doing this, I'd be glad to review any patches.

thanks,

greg k-h