2010-09-17 8 views
1

Je suis novice en ce qui concerne le pilote linux et l'écriture d'un pilote char pour le matériel.Pilote Linux - Comment éviter les interruptions

Quelle est la manière exacte d'empêcher l'interruption (logicielle/matérielle) lors du fonctionnement du pilote (ex: ioctl)?

Merci,

Pui

Répondre

2

Vouliez-vous dire la désactivation de toutes les interruptions dans le système? Ce n'est pas vraiment une bonne idée.

Si vous avez une section de code et que vous voulez vous assurer qu'une interruption inattendue ne vous gêne pas, jetez un oeil à spin_lock_irqsave(). Cela désactivera les interruptions localement. Lorsque vous avez terminé, vous pouvez utiliser spin_lock_irqrestore().

Si vous ne souhaitez mettre à jour qu'une variable, vous pouvez envisager de le rendre atomique (atomic_t). Enfin, si vous envisagez seulement de désactiver les interruptions de votre matériel de char quand le pilote exécute un certain type de fonction, cela dépendra du matériel. Par exemple, pour LSI 1068E, vous devez écrire 0xFFFFFFFF dans le registre IntMask. Vous pouvez également demander au noyau de désactiver une ligne d'interruption en utilisant disable_irq() sur cette ligne d'interruption mais ce n'est probablement pas ce que vous voulez.

+0

ic, ce qui signifie que ce que je dois ajouter est un spin_lock Merci – Pui