Как добавить символьное устройство через C без обращения к скрипту bash - PullRequest
0 голосов
/ 12 марта 2012

Я хочу добавить устройство char к /devices в моем каталоге Linux с помощью кода C. Поскольку я создаю фиктивные драйверы, которые должны существовать только тогда, когда я insmod my_module.ko, я хочу, чтобы мой модуль создал для меня устройство. Ниже приведена часть моего кода, которая должна добавить устройство, но я только инициализирую свой cdev struct и сообщаю об этом ядру.

int start_mod(void){
    //Because we are dealing with a fictitious device, I want
    //the driver to create my two devices with arbitrarly 
    //assigned major numbers.

    alloc_chrdev_region(&dev_num, FIRST_MINOR, COUNT, DEVICE_NAME); // This assigns my device name
                                    // as well as asign Major # my driver uses

    cdev_init(&(my_dev->my_cdev), &fops);// This initializes my cdev struct that the kernel uses to keep track of my device
    my_dev->my_cdev.owner = THIS_MODULE;
    my_dev->my_cdev.ops = &fops;// fops is my file operations struct

    int err = cdev_add(&(my_dev->my_cdev), dev_num, COUNT);// this in theory should give a pointer to the kernel
    // to my cdev struct that I have setup to exist in my other structure.

    // Now I need to officially add my device to /devices folder.
    return 0;   
}

Я не уверен, что мне нужно сделать, чтобы официально добавить устройство char в ядро.

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Что вы делаете, вы используете некоторые из новых функций регистрации в ядре, такие как class_create и device_create. Это позволит udev создать ваше устройство.

Вы говорите, что написали драйвер, не глядя на другие драйверы? Потому что нет недостатка в примерах о том, как зарегистрировать символьное устройство.

Загляните в

drivers/char

Кстати, эти вышеупомянутые функции предназначены только для GPL, что имеет значение, если вы хотите распространять код.

2 голосов
/ 12 марта 2012

Раньше использовался системный вызов mknod() ... но только root -привилегированный процесс обычно может создавать устройства в /dev.

...