weiguixm 发表于 2011-06-09 09:21

向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 = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
      input_dev->keybit = BIT_MASK(BTN_LEFT) |
                BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT);
      input_dev->relbit = 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;
}

weiguixm 发表于 2011-06-09 11:42

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

话说怎么感觉cu这么冷清啊,我之前发的求助贴都半个多月了也没人回,还是我的提问有问题?
页: [1]
查看完整版本: 向input_dev.dev.kobject调用sysfs_create_file 报错?