向input_dev.dev.kobject调用sysfs_create_file 报错?
我的目的是注册一个input_dev型的设备,通过sysfs_create_file给他添加一个属性,但每次加载模块的时候都报段错误(Segment fault),但如果我注册一个platform_device,对platform_device.dev.kobject调用sysfs_create_file就没有问题,是不是input_dev有什么特别的地方呢?
代码:
DEVICE_ATTR(coordinates,0644,NULL,write_vmouse);
static int module_init(void)
{
struct input_dev *input_dev;
int error = -ENOMEM;
struct kobject *kobj;
vmouse_dev = platform_device_register_simple("vmouse",-1,NULL,0);
if(IS_ERR(vmouse_dev))
{
printk(KERN_ALERT "vmouse_init: platform_device_register_simple error\n");
}
input_dev = input_allocate_device();
if(!input_dev)
goto err_free;
vmouse.dev = input_dev;
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT);
input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
input_dev->name = "virtual mouse";
input_dev->phys = "virtual_mouse";
input_dev->id.bustype = BUS_I8042;
input_dev->id.vendor = 0x0002;
kobj = (struct kobject*) &vmouse_dev->dev.kobj;
sysfs_create_file(kobj,&dev_attr_coordinates.attr); //这里出现错误!
error = input_register_device(input_dev);
if(error)
goto err_free;
return 0;
err_free:
input_free_device(input_dev);
return error;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自己找到原因了,sysfs_create_file应该在input_register_device之后。
因为先需要input_register_device会调用device_add(&input_dev.dev)。
话说怎么感觉cu这么冷清啊,我之前发的求助贴都半个多月了也没人回,还是我的提问有问题?