On Mon, Feb 9, 2009 at 9:45 PM, Greg KH <[email protected]> wrote:
> On Mon, Feb 09, 2009 at 09:23:47PM +0200, Daniel Baluta wrote:
>> On Mon, Feb 9, 2009 at 7:56 PM, Daniel Baluta <[email protected]>
>> wrote:
>> > On Mon, Feb 9, 2009 at 7:19 PM, Greg KH <[email protected]> wrote:
>> >> On Mon, Feb 09, 2009 at 06:43:51PM +0200, Daniel Baluta wrote:
>> >>> On Mon, Feb 9, 2009 at 12:20 AM, Greg KH <[email protected]> wrote:
>> >>> > On Sun, Feb 08, 2009 at 07:47:05PM +0200, Daniel Baluta wrote:
>> >>> >> Hello,
>> >>> >>
>> >>> >> I don't really understand how kernel generates events when working
>> >>> >> with platform devices and drivers ( [1] ).
>> >>> >> I have registered my driver with platform_driver_register and my
>> >>> >> device with platform_device_register_simple.
>> >>> >>
>> >>> >> I want to dynamically create the node in /dev , and for that i need
>> >>> >> the kernel to send events like ( MAJOR=x, MINOR=y)
>> >>> >> that will be interpreted by the udev daemon acording to rules from
>> >>> >> /etc/udev/rules.d.
>> >>> >
>> >>> > Platform devices can't do this, you need to use a "real" struct device,
>> >>> > or register with a class that handles major/minor allocation for you
>> >>> > (input, block, etc.)
>> >>> >
>> >>> > hope this helps,
>> >>> >
>> >>> > greg k-h
>> >>> >
>> >>>
>> >>> thanks for your answer.
>> >>>
>> >>> I'm writing a driver for a character device [hex display] .
>> >>>
>> >>> Registering with an existing class its pretty hard since it doesn't
>> >>> fit well in none of the existing classes.
>> >>
>> >> There are other drivers in the kernel that already do something like
>> >> this, are you sure there isn't an existing class for you already?
>> >>
>> >
>> > I'm still searching for it. Any suggestion , it's welcomed.
>
> I know one staging driver supports it, and I think a few different USB
> ones do as well. Have you looked at the LED class? That might be what
> I was thinking of.
>
>> >>> One good option would be misc class but this enforces the usage of major
>> >>> 10.
>> >>
>> >> What's wrong with that? It's a dynamic minor number that will "just
>> >> work" for your device.
>> >>
>> > Yes , you are right here it's "just working". But I have some requirements
>> > that ask for major to be dynamically allocated.
>
> What kind of requirement would require something like that? Do you
> really need to support 16k different devices? Hm, even with that kind
> of requirement, the misc interface would still work just fine.
>
> Have a pointer to your code anywhere?
>
> thanks,
>
> greg k-h
>
Hello ,
Led class seems to be a very good idea.
You can find below a snippet of my reworked code:
static struct led_classdev hex_classdev = {
.name = "hexclass",
};
static int my_probe(struct platform_device *pdev)
{
int ret;
ret = led_classdev_register(&pdev->dev, &hex_classdev);
if (ret < 0)
return ret;
printk("led_classdev_register called in probe!\n");
return ret;
}
static int my_remove(struct platform_device *pdev)
{
led_classdev_unregister(&hex_classdev);
printk("led_clasdev_unregister called in remove\n");
return 0;
}
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.name = "led",
.owner = THIS_MODULE,
},
};
static struct platform_device *my_device;
static int __init my_init(void)
{
my_device = platform_device_register_simple("led", -1 , NULL, 0);
return platform_driver_register(&my_driver);
}
static void __exit my_exit(void)
{
platform_device_unregister(my_device);
platform_driver_unregister(&my_driver);
}
The idea is that i want to dynamically create /dev/hexd in order to
write to my hexdisplay.
So i need to send an event like MAJOR=x, MINOR=y to udev and this
should do mknod /dev/hexd c MAJOR MINOR.
I've noticed that for example , for printer class there is a file
/sys/class/printer/lp0/dev that contains MAJOR:MINOR.
When i run my code there is no /sys/class/leds/hexclass/dev file created.
Could this be the problem? Is there any special function that must be called.
Thanks,
Daniel.
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ