modifiers - prototype fonction c



Variable globale statique et variable locale statique dans la fonction du pilote (1)

Dans l'un de mes exemples de modules de noyau Linux, j'ai une variable Device_Open déclarée statique en dehors de toutes les fonctions et une variable statique déclarée à l'intérieur d'une fonction device_open . Inside device_open , device_open la fois Device_Open et counter . Le module est inséré sans aucune erreur dans le noyau et j'ai créé un fichier de périphérique pour mon module / dev / chardev.

Je fais le cat /dev/chardev . Ce que je peux voir est que le counter est incrémenté pour chaque invocation de cat /dev/chardev , mais Device_Open reste toujours 0. Quelle est la raison de la différence de comportement liée à l'incrémentation de la valeur des variables?

Voici l'extrait de code pour comprendre

static int Device_Open = 0;

static int device_open(struct inode *inode, struct file *file)
{
    static int counter = 0;

    printk(KERN_INFO "Device_Open = %d", Device_Open);
    printk(KERN_INFO "counter = %d", counter);

    if (Device_Open)
        return -EBUSY;

    Device_Open++;
        counter++;

    try_module_get(THIS_MODULE);

    return SUCCESS;
}

Answer #1

J'ai cherché "Device_open" et j'ai trouvé la version de l'appareil correspondant. Êtes-vous sûr de ne pas avoir cette fonction? Je l'ai trouvé au TLDP .

static int device_release(struct inode *inode, struct file *file)
{
#ifdef DEBUG
    printk(KERN_INFO "device_release(%p,%p)\n", inode, file);
#endif

    /* 
     * We're now ready for our next caller 
     */
    Device_Open--;

    module_put(THIS_MODULE);
    return SUCCESS;
}




module