Hello Anish Thank you for the changes. Ya now I understoor dealing with store function. :) And I did small change in ur code. I have declared the show and store function as I declared before. static ssize_t attr1_store(struct class *cls, struct class_attribute *attr, const char *buf, size_t count); static ssize_t attr1_show(struct class *cls, struct class_attribute *attr, char *buf); instead. static ssize_t attr1_store(struct class *cls, const char *buf, size_t count); static ssize_t attr1_show(struct class *cls, char *buf); After this its working fine. On Thu, Jun 21, 2012 at 9:04 AM, anish singh <anish198519851985@gmail.com>wrote:
On Wed, Jun 20, 2012 at 11:32 PM, Jeshwanth Kumar N K Jeshu <jeshkumar555@gmail.com> wrote:
Hello
Thank you anish for the reply, the code is I pasted below. [code-starts]
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/sysdev.h> #include <linux/major.h> #include <asm/uaccess.h> #include <linux/slab.h> #include <linux/cdev.h> #include <linux/kdev_t.h>
static char *gvar = "BeHonest"; // Store and Show functions...... static ssize_t attr1_store(struct class *cls, struct class_attribute *attr, const char *buf, size_t count); static ssize_t attr1_show(struct class *cls, struct class_attribute *attr, char *buf);
static struct class_attribute pwm_class_attrs[] = { __ATTR(attr1, S_IRUGO | S_IWUSR , attr1_show, attr1_store), __ATTR_NULL };
static struct class pwm_class = { .name = "dev_jes", .owner = THIS_MODULE, .class_attrs = pwm_class_attrs };
static int hello_init(void) { class_register(&pwm_class); printk("In hello_init function \n");
return 0; }
static ssize_t attr1_show(struct class *cls, struct class_attribute *attr, char *buf) {
printk("In attr1_show function\n"); return sprintf(buf, "%s\n", gvar); }
static ssize_t attr1_store(struct class *cls, struct class_attribute *attr, const char *buf, size_t count) { printk("the string is : %s\n",buf); printk("In attr1_store function\n"); return 1; //return sprintf(gvar, "%s\n", buf); --- If I put this line I am getting ERROR :( }
static void hello_exit(void) { class_unregister(&pwm_class); printk("In hello_exit function \n"); }
module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("GPL"); MODULE_AUTHOR("Jeshwanth"); MODULE_DESCRIPTION("Learning sysfs");
[code-ends]
echo "jeshu" > /sys/class/dev_jes/attr1
And If I pass the command to atttribute I got result below in dmesg.
[ 3435.613057] the string is : jeshu [ 3435.613061] [ 3435.613066] In attr1_store function [ 3435.613072] the string is : eshu [ 3435.613074] [ 3435.613078] In attr1_store function [ 3435.613083] the string is : shu [ 3435.613085] [ 3435.613088] In attr1_store function [ 3435.613093] the string is : hu [ 3435.613095] [ 3435.613098] In attr1_store function [ 3435.613103] the string is : u [ 3435.613105] [ 3435.613108] In attr1_store function [ 3435.613113] the string is : [ 3435.613115] [ 3435.613118] In attr1_store function
So please help me how to read the attribute in store function.. Thanks :) #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/sysdev.h> #include <linux/major.h> #include <asm/uaccess.h> #include <linux/slab.h> #include <linux/cdev.h> #include <linux/kdev_t.h>
static char *gvar = NULL; static ssize_t attr1_store(struct class *cls, const char *buf, size_t count); static ssize_t attr1_show(struct class *cls, char *buf);
static struct class_attribute pwm_class_attrs[] = { __ATTR(attr1, 0666, attr1_show, attr1_store), //use macro for permission __ATTR_NULL };
static struct class pwm_class = { .name = "dev_jes", .owner = THIS_MODULE, .class_attrs = pwm_class_attrs };
static int hello_init(void) { char string[] = "nothing"; gvar = kmalloc(sizeof(char)*strlen(string), GFP_KERNEL); class_register(&pwm_class); snprintf(gvar, sizeof(char)*strlen(string)+1, "%s", string); printk("anish In hello_init function \n"); return 0; }
static ssize_t attr1_show(struct class *cls, char *buf) {
printk("In attr1_show function\n"); printk("%s\n", gvar); printk("In attr1_show function\n"); return sprintf(buf, "%s", gvar); }
static ssize_t attr1_store(struct class *cls, const char *buf, size_t count) { printk("the string is : %s count %d\n", buf, count); return snprintf(gvar, count, "%s\n", buf); }
static void hello_exit(void) { class_unregister(&pwm_class); printk("In hello_exit function \n"); }
module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("GPL"); MODULE_AUTHOR("Jeshwanth"); MODULE_DESCRIPTION("Learning sysfs"); ====================================================== Hope you got the point.
On Tue, Jun 19, 2012 at 4:02 PM, anish singh <
anish198519851985@gmail.com>
wrote:
On Tue, Jun 19, 2012 at 3:14 PM, jeshwanth Kumar N K <jeshkumar555@gmail.com> wrote:
Hello all
I am new to sysfs interface ans I read about in mochel's
documentation.
And doing some experiements on it. Let's come to Tue problem, in my module I have a global variable type char* myglobal and it s static, I am putting that value in my one and only class attribute using show function. But for the same if I a user put some value in to the using echo or something, the attribute value is not changing. And one more thing s after I passed the value to the attribute my system not shutting down :( . Please help me how to read values. Why don't you post your code?As that will really help and moreover as this is your code you won't be breakign any law set by your company.
// in store function I am doing this: Myglobal = bus;
Sent from my HTC
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Regards Jeshwanth Kumar N K +91-7411483498
-- Regards Jeshwanth Kumar N K +91-7411483498