Bonjour,

J'ai une carte PC qui tourne avec un linux embarqué RedHat 7.3 (2.4.17 gcc 2.95.3).
Je cherche à contrôler le port parallèle (10 pin) de la carte pour ensuite lire/écrire dans une Flash et finalement programmer un FPGA.
Il n'a qu'un seul port parallèle physique (connecteur He10-10 pin) sur ma carte.
Mais, je ne sais pas où lire/écrire car je vois 3 ports parallèles logiques:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
# ls /dev | grep -e par -e lp
lp0
par0
par1
par2
# cat /proc/ioports | grep parport
0x278-0x27a : parport2
0x378-0x37a : parport1
0x3bc-0x3be : parport0
J'ai cherché dans les posts et je suis tombé sur des bouts de code intéressants que j'ai récupéré et adapté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
char* par0 = "/dev/par0";
char* par1 = = "/dev/par1";
char* par1 = = "/dev/par2";
int p0,p1,p2,res;
 
p0 = open ( par0, O_RDWR | O_NOCTTY | O_NDELAY ) ;
if ( p0 == -1 ) { fprintf(stderr,"Error open %s failed\n",par0) ;}
  else {fprintf(stdout,"---open %s success\n",par0);}
p1 = open ( par0, O_RDWR | O_NOCTTY | O_NDELAY ) ;
if ( p1 == -1 ) { fprintf(stderr,"Error open %s failed\n",par1) ;}
  else {fprintf(stdout,"---open %s success\n",par1);}
p2 = open ( par0, O_RDWR | O_NOCTTY | O_NDELAY ) ;
if ( p2 == -1 ) { fprintf(stderr,"Error open %s failed\n",par2) ;}
  else {fprintf(stdout,"---open %s success\n",par2);}
 
res = ioctl ( p0 , PPCLAIM , &i ) ;
if ( res != 0 )
{fprintf(stderr,"NH: %s ERROR PPCLAIM res=%d,errno=%s\n",par0,res,strerror(errno));}
res = ioctl ( p1 , PPCLAIM , &i ) ;
if ( res != 0 )
{fprintf(stderr,"NH: %s ERROR PPCLAIM res=%d,errno=%s\n",par1,res,strerror(errno));}
res = ioctl ( p2 , PPCLAIM , &i ) ;
if ( res != 0 )
{fprintf(stderr,"NH: %s ERROR PPCLAIM res=%d,errno=%s\n",par2,res,strerror(errno));}
Le résultat à l'execution est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
lp0: compatibility mode
---open /dev/par0 success
lp1: compatibility mode
---open /dev/par1 success
lp2: compatibility mode
---open /dev/par2 success
/dev/par1 ERROR PPCLAIM res=-1,errno=Invalid argument
/dev/par2 ERROR PPCLAIM res=-1,errno=Invalid argument
/dev/par0 ERROR PPCLAIM res=-1,errno=Invalid argument
Quelqu'un a-t-il une idée de pourquoi PPCLAIM échoue ?
Quel est le port logique que je dois attaquer ?
Le compatibility mode est-il un problème ?
Merci d'avance.