2017-03-08 1 views
-2

J'ai écrit un driver d'interruption linux version 3.8 pour apprendre. J'utilise des APIs GPIO tels queComment fonctionne le module struct dans le noyau

gpio_request(gpioButton, "mypreciousss");  // Set up the gpioButton 

Quand j'ai vu dans ce gpio_request il utilise

if (!try_module_get(chip->owner)) 

ici l'écaillage> propriétaire est une variable de type struct module .

gpio_request était la première fonction dans ma fonction init, et je ne faisais rien pour créer struct module. Alors comment try_module_get pouvez-vous en utiliser un?

+0

La question n'est pas écrite en anglais, veuillez trouver quelqu'un à traduire. Devinant ce que vous demandez, je peux supposer que vous n'avez pas reçu le second exemple dans votre message. C'est essentiellement le comptage des références. Lorsque la ligne GPIO est demandée, la suppression du pilote du contrôleur est interdite. – 0andriy

+0

êtes-vous aveugle ou plaine bête? –

Répondre

0

Ici, je suis coller l'extrait de code de la fonction gpio_request() (linux 3,8)

 desc = &gpio_desc[gpio]; 
    chip = desc->chip; 
    if (chip == NULL) 
      goto done; 

    if (!try_module_get(chip->owner)) 
      goto done; 

Ici, ils prennent le descripteur correspondant à GPIO passé, et que la structure de descripteur est utilisé pour d'autres mises à jour.