Не удалось создать устройства с младшими номерами 0 и 1 - PullRequest
3 голосов
/ 15 августа 2011

Мне не удается создать два узла устройства с младшими номерами 0 и 1 в / proc. device_create создает первое устройство с младшим номером 0, но как мне создать второе устройство с младшим номером 1?

static int __init my_driver_init (void) {
    int result;
    int major;
    printk("In init module");

    result = alloc_chrdev_region(&dev, 0, 2, mydev_name);
    if (result<0)
     return result;

    major = MAJOR(dev);

    printk("The device is registered by Major no: %d\n", major);
    my_driver_cdev = cdev_alloc();
   cdev_init (my_driver_cdev, &my_driver_fops);
    my_driver_cdev->owner = THIS_MODULE;
    result = cdev_add(my_driver_cdev, 0, 2);
    if (result<0){
      printk("Error in registering the module\n");
      unregister_chrdev_region(dev, 2);
      return result;
    }

    printk(KERN_INFO "my_driver: %d\n",__LINE__);

    my_driver_class = class_create(THIS_MODULE,mydev_name);
    if (IS_ERR(my_driver_class)) {
            printk(KERN_ERR "Error creating my_driver class.\n");
            result = PTR_ERR(my_driver_class);
            cdev_del(my_driver_cdev);
            unregister_chrdev_region(dev, 2);
            return -1;
    }
  device_create(my_driver_class,NULL,dev,NULL,"my_driver%d",0);

  printk(KERN_INFO "my_driver: %d\n",__LINE__);

}

Добавление строки ниже не создает второго устройства с младшим номером 1.

device_create(my_driver_class,NULL,dev,NULL,"my_driver%d",1);

1 Ответ

2 голосов
/ 15 августа 2011

Четвертый аргумент device_create должен быть старшим номером и младшим (в dev), с помощью которого будет создан файл устройства. В вашем случае четвертый аргумент всегда один и тот же, вам нужно указать следующий младший номер для device_create. Вы можете написать код, подобный этому:

    for (minor = 0; minor < 2; minor++) 
         device_create(my_driver_class,NULL,MKDEV(major, minor),NULL,"my_driver%d",minor);
...