* sysfs attribute example
@ 2005-06-10 17:05 Stephen Morgan
2005-06-10 17:10 ` Kay Sievers
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Stephen Morgan @ 2005-06-10 17:05 UTC (permalink / raw)
To: linux-hotplug
Hello all,
Can someone point me to an example of exporting a sysfs attribute from a
driver? (Or tell me if I shouldn't.) I'm trying to get a value from my USB
device driver's probe() into an attribute so my udev .rules file can pick it
up.
I've tried to follow what's in LDD 3rd ed. (page 374) "...simply fill in an
attribute and pass it to sysfs_create_file()"
From my probe() function:
mydev->my_attribute.name = "my_attribute_name";
mydev->my_attribute.owner = THIS_MODULE;
mydev->my_attribute.mode = S_IRUGO;
sysfs_create_file(&(interface->class_dev->kobj), &(mydev->my_attribute));
When a device is probed, the file "my_attribute_name" shows up in sysfs, but
I get a "kernel NULL pointer dereference at virtual address 00000004"
(address changes with the USB port I plug into).
I'm also not seeing how to attach a value to the attribute. So, clearly,
I'm missing something crucial here :-)
Thanks,
Stephen Morgan
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
@ 2005-06-10 17:10 ` Kay Sievers
2005-06-13 23:01 ` Stephen Morgan
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Kay Sievers @ 2005-06-10 17:10 UTC (permalink / raw)
To: linux-hotplug
On Fri, Jun 10, 2005 at 12:05:07PM -0500, Stephen Morgan wrote:
> Hello all,
>
> Can someone point me to an example of exporting a sysfs attribute from a
> driver? (Or tell me if I shouldn't.) I'm trying to get a value from my USB
> device driver's probe() into an attribute so my udev .rules file can pick it
> up.
>
> I've tried to follow what's in LDD 3rd ed. (page 374) "...simply fill in an
> attribute and pass it to sysfs_create_file()"
>
> From my probe() function:
>
> mydev->my_attribute.name = "my_attribute_name";
> mydev->my_attribute.owner = THIS_MODULE;
> mydev->my_attribute.mode = S_IRUGO;
>
> sysfs_create_file(&(interface->class_dev->kobj), &(mydev->my_attribute));
>
> When a device is probed, the file "my_attribute_name" shows up in sysfs, but
> I get a "kernel NULL pointer dereference at virtual address 00000004"
> (address changes with the USB port I plug into).
>
> I'm also not seeing how to attach a value to the attribute. So, clearly,
> I'm missing something crucial here :-)
Sure, you do. :)
Look for: DEVICE_ATTR() in the kernel code.
Good luck,
Kay
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
2005-06-10 17:10 ` Kay Sievers
@ 2005-06-13 23:01 ` Stephen Morgan
2005-06-14 0:54 ` Greg KH
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Stephen Morgan @ 2005-06-13 23:01 UTC (permalink / raw)
To: linux-hotplug
> -----Original Message-----
> From: Kay Sievers [mailto:kay.sievers@vrfy.org]
> Sent: Friday, June 10, 2005 11:10 AM
> To: Stephen Morgan
> Cc: linux-hotplug-devel
> Subject: Re: sysfs attribute example
>
>
> On Fri, Jun 10, 2005 at 12:05:07PM -0500, Stephen Morgan wrote:
> > Hello all,
> >
> > Can someone point me to an example of exporting a sysfs attribute from a
> > driver? (Or tell me if I shouldn't.) I'm trying to get a
> value from my USB
> > device driver's probe() into an attribute so my udev .rules
> file can pick it
> > up.
> >
> > I've tried to follow what's in LDD 3rd ed. (page 374)
> "...simply fill in an
> > attribute and pass it to sysfs_create_file()"
> >
> > From my probe() function:
> >
> > mydev->my_attribute.name = "my_attribute_name";
> > mydev->my_attribute.owner = THIS_MODULE;
> > mydev->my_attribute.mode = S_IRUGO;
> >
> > sysfs_create_file(&(interface->class_dev->kobj),
> &(mydev->my_attribute));
> >
> > When a device is probed, the file "my_attribute_name" shows up
> in sysfs, but
> > I get a "kernel NULL pointer dereference at virtual address 00000004"
> > (address changes with the USB port I plug into).
> >
> > I'm also not seeing how to attach a value to the attribute.
> So, clearly,
> > I'm missing something crucial here :-)
>
> Sure, you do. :)
>
> Look for: DEVICE_ATTR() in the kernel code.
>
> Good luck,
> Kay
>
Hi Kay,
Thanks for your help.
This has gotten me much closer. However, the show() function seems to be
receiving a pointer to the usb_interface's class_device instead of its
device. Any ideas why?
Thanks,
Stephen
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
2005-06-10 17:10 ` Kay Sievers
2005-06-13 23:01 ` Stephen Morgan
@ 2005-06-14 0:54 ` Greg KH
2005-06-16 17:09 ` Stephen Morgan
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2005-06-14 0:54 UTC (permalink / raw)
To: linux-hotplug
On Mon, Jun 13, 2005 at 06:01:26PM -0500, Stephen Morgan wrote:
> > -----Original Message-----
> > From: Kay Sievers [mailto:kay.sievers@vrfy.org]
> > Sent: Friday, June 10, 2005 11:10 AM
> > To: Stephen Morgan
> > Cc: linux-hotplug-devel
> > Subject: Re: sysfs attribute example
> >
> >
> > On Fri, Jun 10, 2005 at 12:05:07PM -0500, Stephen Morgan wrote:
> > > Hello all,
> > >
> > > Can someone point me to an example of exporting a sysfs attribute from a
> > > driver? (Or tell me if I shouldn't.) I'm trying to get a
> > value from my USB
> > > device driver's probe() into an attribute so my udev .rules
> > file can pick it
> > > up.
> > >
> > > I've tried to follow what's in LDD 3rd ed. (page 374)
> > "...simply fill in an
> > > attribute and pass it to sysfs_create_file()"
> > >
> > > From my probe() function:
> > >
> > > mydev->my_attribute.name = "my_attribute_name";
> > > mydev->my_attribute.owner = THIS_MODULE;
> > > mydev->my_attribute.mode = S_IRUGO;
> > >
> > > sysfs_create_file(&(interface->class_dev->kobj),
> > &(mydev->my_attribute));
> > >
> > > When a device is probed, the file "my_attribute_name" shows up
> > in sysfs, but
> > > I get a "kernel NULL pointer dereference at virtual address 00000004"
> > > (address changes with the USB port I plug into).
> > >
> > > I'm also not seeing how to attach a value to the attribute.
> > So, clearly,
> > > I'm missing something crucial here :-)
> >
> > Sure, you do. :)
> >
> > Look for: DEVICE_ATTR() in the kernel code.
> >
> > Good luck,
> > Kay
> >
>
> Hi Kay,
>
> Thanks for your help.
>
> This has gotten me much closer. However, the show() function seems to be
> receiving a pointer to the usb_interface's class_device instead of its
> device. Any ideas why?
Because that's where you registered the attribute? :)
Care to show us your patch?
thanks,
greg k-h
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
` (2 preceding siblings ...)
2005-06-14 0:54 ` Greg KH
@ 2005-06-16 17:09 ` Stephen Morgan
2005-06-16 17:27 ` Greg KH
2005-06-16 21:14 ` Stephen Morgan
5 siblings, 0 replies; 7+ messages in thread
From: Stephen Morgan @ 2005-06-16 17:09 UTC (permalink / raw)
To: linux-hotplug
> -----Original Message-----
> From: Greg KH [mailto:greg@kroah.com]
> Sent: Monday, June 13, 2005 6:54 PM
> To: Stephen Morgan
> Cc: Kay Sievers; linux-hotplug-devel
> Subject: Re: sysfs attribute example
>
>
> On Mon, Jun 13, 2005 at 06:01:26PM -0500, Stephen Morgan wrote:
> > > -----Original Message-----
> > > From: Kay Sievers [mailto:kay.sievers@vrfy.org]
> > > Sent: Friday, June 10, 2005 11:10 AM
> > > To: Stephen Morgan
> > > Cc: linux-hotplug-devel
> > > Subject: Re: sysfs attribute example
> > >
> > >
> > > On Fri, Jun 10, 2005 at 12:05:07PM -0500, Stephen Morgan wrote:
> > > > Hello all,
> > > >
> > > > Can someone point me to an example of exporting a sysfs
> attribute from a
> > > > driver? (Or tell me if I shouldn't.) I'm trying to get a
> > > value from my USB
> > > > device driver's probe() into an attribute so my udev .rules
> > > file can pick it
> > > > up.
> > > >
> > > > I've tried to follow what's in LDD 3rd ed. (page 374)
> > > "...simply fill in an
> > > > attribute and pass it to sysfs_create_file()"
> > > >
> > > > From my probe() function:
> > > >
> > > > mydev->my_attribute.name = "my_attribute_name";
> > > > mydev->my_attribute.owner = THIS_MODULE;
> > > > mydev->my_attribute.mode = S_IRUGO;
> > > >
> > > > sysfs_create_file(&(interface->class_dev->kobj),
> > > &(mydev->my_attribute));
> > > >
> > > > When a device is probed, the file "my_attribute_name" shows up
> > > in sysfs, but
> > > > I get a "kernel NULL pointer dereference at virtual address
> 00000004"
> > > > (address changes with the USB port I plug into).
> > > >
> > > > I'm also not seeing how to attach a value to the attribute.
> > > So, clearly,
> > > > I'm missing something crucial here :-)
> > >
> > > Sure, you do. :)
> > >
> > > Look for: DEVICE_ATTR() in the kernel code.
> > >
> > > Good luck,
> > > Kay
> > >
> >
> > Hi Kay,
> >
> > Thanks for your help.
> >
> > This has gotten me much closer. However, the show() function
> seems to be
> > receiving a pointer to the usb_interface's class_device instead of its
> > device. Any ideas why?
>
> Because that's where you registered the attribute? :)
Okay, but if you register with the device (as opposed to the class_device),
you don't get the SYSFS attribute created.
>
> Care to show us your patch?
Here are the pertinent lines (the interim solution used here is to cast the
device pointer to a class_device pointer):
**********************************************
static ssize_t mydev_number_show(struct device *dev, char *buf)
{
int retval = 0;
struct my_dev *mydev = NULL;
int index;
struct class_device * cdev = (struct class_device *) dev;
printk(" dev pointer: %p\n", cdev->dev);
printk(" kobject name: %s\n", cdev->dev->kobj.k_name);
printk(" bus_id: %s\n", cdev->dev->bus_id);
mydev = cdev->dev->driver_data;
index = mydev->index;
printk(" my device index: %d\n", index);
return sprintf(buf, "%d\n",index);
}
static DEVICE_ATTR(mydev_number, S_IRUGO, mydev_number_show, NULL);
And in my probe() function:
usb_register_dev(interface, &my_class);
usb_set_intfdata(interface, mydev);
sysfs_create_file(&(interface->class_dev->kobj),
&(dev_attr_mydev_number.attr));
************************************************
Thanks,
Stephen
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id\x16492&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
` (3 preceding siblings ...)
2005-06-16 17:09 ` Stephen Morgan
@ 2005-06-16 17:27 ` Greg KH
2005-06-16 21:14 ` Stephen Morgan
5 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2005-06-16 17:27 UTC (permalink / raw)
To: linux-hotplug
On Thu, Jun 16, 2005 at 12:09:56PM -0500, Stephen Morgan wrote:
> > On Mon, Jun 13, 2005 at 06:01:26PM -0500, Stephen Morgan wrote:
> > > > On Fri, Jun 10, 2005 at 12:05:07PM -0500, Stephen Morgan wrote:
> > > > > Hello all,
> > > > >
> > > > > Can someone point me to an example of exporting a sysfs
> > attribute from a
> > > > > driver? (Or tell me if I shouldn't.) I'm trying to get a
> > > > value from my USB
> > > > > device driver's probe() into an attribute so my udev .rules
> > > > file can pick it
> > > > > up.
> > > > >
> > > > > I've tried to follow what's in LDD 3rd ed. (page 374)
> > > > "...simply fill in an
> > > > > attribute and pass it to sysfs_create_file()"
> > > > >
> > > > > From my probe() function:
> > > > >
> > > > > mydev->my_attribute.name = "my_attribute_name";
> > > > > mydev->my_attribute.owner = THIS_MODULE;
> > > > > mydev->my_attribute.mode = S_IRUGO;
> > > > >
> > > > > sysfs_create_file(&(interface->class_dev->kobj),
> > > > &(mydev->my_attribute));
Z> > > > >
> > > > > When a device is probed, the file "my_attribute_name" shows up
> > > > in sysfs, but
> > > > > I get a "kernel NULL pointer dereference at virtual address
> > 00000004"
> > > > > (address changes with the USB port I plug into).
> > > > >
> > > > > I'm also not seeing how to attach a value to the attribute.
> > > > So, clearly,
> > > > > I'm missing something crucial here :-)
> > > >
> > > > Sure, you do. :)
> > > >
> > > > Look for: DEVICE_ATTR() in the kernel code.
> > > >
> > > > Good luck,
> > > > Kay
> > > >
> > >
> > > Hi Kay,
> > >
> > > Thanks for your help.
> > >
> > > This has gotten me much closer. However, the show() function
> > seems to be
> > > receiving a pointer to the usb_interface's class_device instead of its
> > > device. Any ideas why?
> >
> > Because that's where you registered the attribute? :)
>
> Okay, but if you register with the device (as opposed to the class_device),
> you don't get the SYSFS attribute created.
Not true, are you sure you are looking in the proper place in sysfs?
> >
> > Care to show us your patch?
>
> Here are the pertinent lines (the interim solution used here is to cast the
> device pointer to a class_device pointer):
ick ick ick, don't do that, it's wrong.
> **********************************************
> static ssize_t mydev_number_show(struct device *dev, char *buf)
> {
> int retval = 0;
> struct my_dev *mydev = NULL;
> int index;
> struct class_device * cdev = (struct class_device *) dev;
>
> printk(" dev pointer: %p\n", cdev->dev);
> printk(" kobject name: %s\n", cdev->dev->kobj.k_name);
> printk(" bus_id: %s\n", cdev->dev->bus_id);
>
> mydev = cdev->dev->driver_data;
> index = mydev->index;
> printk(" my device index: %d\n", index);
>
> return sprintf(buf, "%d\n",index);
> }
>
> static DEVICE_ATTR(mydev_number, S_IRUGO, mydev_number_show, NULL);
>
> And in my probe() function:
>
> usb_register_dev(interface, &my_class);
> usb_set_intfdata(interface, mydev);
> sysfs_create_file(&(interface->class_dev->kobj),
> &(dev_attr_mydev_number.attr));
Do:
device_create_file(&interface->dev, &dev_attr_mydev_number.attr);
instead.
Or if you want it to show up in the class device directory, use
CLASS_DEVICE_ATTR() and call class_device_create_file() instead. No
casting is needed in your show function, that's a big sign that
something is wrong.
I'd really suggest you read the driver model chapter in the Linux Device
Drivers, Third edition book. It's free online if you don't want to buy
it.
thanks,
greg k-h
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id\x16492&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: sysfs attribute example
2005-06-10 17:05 sysfs attribute example Stephen Morgan
` (4 preceding siblings ...)
2005-06-16 17:27 ` Greg KH
@ 2005-06-16 21:14 ` Stephen Morgan
5 siblings, 0 replies; 7+ messages in thread
From: Stephen Morgan @ 2005-06-16 21:14 UTC (permalink / raw)
To: linux-hotplug
> > Okay, but if you register with the device (as opposed to the
> class_device),
> > you don't get the SYSFS attribute created.
>
> Not true, are you sure you are looking in the proper place in sysfs?
>
<doh> Thank you, Greg. I'll spare you the details; suffice it to say it's
much better to <finish> coding before you <begin> testing. Sorry for the
waste of neurons and keystrokes and bandwidth.
Stephen
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id\x16492&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2005-06-16 21:14 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-10 17:05 sysfs attribute example Stephen Morgan
2005-06-10 17:10 ` Kay Sievers
2005-06-13 23:01 ` Stephen Morgan
2005-06-14 0:54 ` Greg KH
2005-06-16 17:09 ` Stephen Morgan
2005-06-16 17:27 ` Greg KH
2005-06-16 21:14 ` Stephen Morgan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).