<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>8. Problèmes et solutions</title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.69.1" name="generator"><link rel="start" href="index.html" title=" Petit guide de programmation des ports d'entrées / sorties sous Linux "><link rel="up" href="index.html" title=" Petit guide de programmation des ports d'entrées / sorties sous Linux "><link rel="prev" href="ar01s07.html" title="7. Conseils"><link rel="next" href="ar01s09.html" title="9. Code d'exemple"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">8. Problèmes et solutions</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s07.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s09.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1049C"></a>8. Problèmes et solutions</h2></div></div><div></div></div><p> <div class="variablelist"><dl><dt><span class="term">Q1.</span></dt><dd><p> J'obtiens une erreur de segmentation lorsque j'essaye d'accéder aux ports. </p></dd><dt><span class="term">R1.</span></dt><dd><p> Soit votre programme n'a pas les privilèges de super utilisateur, soit l'appel à <code class="function">ioperm()</code> n'a pas réussi pour une raison ou une autre. Vérifiez la valeur de retour de <code class="function">ioperm()</code>. Vérifiez également que vous accédez bien aux ports que vous avez activés préalablement avec <code class="function">ioperm()</code> (voir Q3). Si vous faites appel aux macros de temporisation (<code class="function">inb_p()</code>, <code class="function">outb_p()</code>, et cætera), pensez aussi à utiliser <code class="function">ioperm()</code> pour obtenir l'accès au port <code class="literal">0x80</code>. </p></dd><dt><span class="term">Q2.</span></dt><dd><p> Je n'arrive à trouver nulle part la définition de <code class="function">in*()</code>, <code class="function">out*()</code>, de plus gcc se plaint de références non-définies. </p></dd><dt><span class="term">R2.</span></dt><dd><p> Vous n'avez pas lancé la compilation avec les drapeaux d'optimisation (<code class="literal">-O</code>), en conséquence gcc n'a pas pu trouver les macros définies dans <code class="filename">asm/io.h</code>. Ou alors, vous n'avez pas inclus du tout la ligne <code class="literal">#include <asm/io.h></code> dans votre code. </p></dd><dt><span class="term">Q3.</span></dt><dd><p> <code class="function">out*()</code> ne fait rien ou ne retourne que des valeurs bizarres. </p></dd><dt><span class="term">R3.</span></dt><dd><p> Vérifiez l'ordre des paramètres, ceux-ci devraient être comme ce qui suit : <code class="function">outb(<em class="replaceable"><code>valeur</code></em>, , <em class="replaceable"><code>port</code></em>)</code> et non pas <code class="function">outportb(<em class="replaceable"><code>port</code></em>, , <em class="replaceable"><code>valeur</code></em>)</code> comme en MS-DOS. </p></dd><dt><span class="term">Q4.</span></dt><dd><p> Je souhaite contrôler un périphérique standard, tel qu'un périphérique RS-232, une imprimante parallèle, une manette de jeu, … </p></dd><dt><span class="term">R4.</span></dt><dd><p> Vous auriez plutôt intérêt à utiliser les pilotes déjà existants (dans le noyau Linux ou un serveur X ou ailleurs) pour ce faire. Ces pilotes sont généralement assez polyvalents. Ainsi ils arrivent même en général à faire fonctionner les périphériques sortant légèrement des standards. Voyez la note d'information ci-dessus sur les ports standards pour de la documentation à leur sujet. </p></dd></dl></div> </p></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s07.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ar01s09.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">7. Conseils </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> 9. Code d'exemple</td></tr></table></div></body></html>