/* * kobj.c * * (C) Copyright hsl 2009 * Released under GPL v2. * * * log: * for debug function by sysfs * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static struct kobject *dbg_kobj; extern int dbg_parse_cmd( char * cdb ); static char dbg_lastcmd[512]; /* default kobject attribute operations */ static ssize_t dbg_call_attr_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { strcpy( buf , dbg_lastcmd ); strcat(buf,"\n"); return strlen(buf)+1; } static ssize_t dbg_call_attr_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { char cmd[512]; int len = sizeof(dbg_lastcmd)>count ? count:sizeof(dbg_lastcmd); //printk("count=%d,cmd=%s!\n" , count , buf ); strncpy( dbg_lastcmd , buf , len ); if( dbg_lastcmd[len-1] == '\n' ){ dbg_lastcmd[len-1] = 0; len--; } strncpy( cmd , dbg_lastcmd , sizeof(cmd) ); dbg_parse_cmd( cmd ); return count; } static struct kobj_attribute _call_attr = { .attr = { .name = "dbg", .mode = 0644, }, .show = dbg_call_attr_show, .store = dbg_call_attr_store, }; static struct attribute * g[] = { &_call_attr.attr, NULL, }; static struct attribute_group attr_group = { .attrs = g, }; int dbg_init( void ) { //dbg_kobj = kobject_create_and_add("dbg", NULL ); /*kernel_kobj*/ //if (!dbg_kobj) // return -ENOMEM; //return sysfs_create_group(dbg_kobj, &attr_group); return sysfs_create_group(kernel_kobj, &attr_group); } late_initcall(dbg_init);