向input_dev.dev.kobject调用sysfs_create_file 报错?

发布于 2022-10-15 04:48:54 字数 2842 浏览 15 评论 0

我的目的是注册一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萝莉病 2022-10-22 04:48:54

自己找到原因了,sysfs_create_file应该在input_register_device之后。
因为先需要input_register_device会调用device_add(&input_dev.dev)。

话说怎么感觉cu这么冷清啊,我之前发的求助贴都半个多月了也没人回,还是我的提问有问题?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文