Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/07/2009, à 11:06

zebres

[Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Bonjour à tous,

J'aimerai lire les entrées du port parallèle en suivant les explications suivantes:
http://www.unixgarden.com/index.php/embarque/programmation-du-port-parallele

Mon problème est que je n'ai pas le fichier dev/parport0. Je pense que c'est pour cette raison que mon imprimante parallèle n'a jamais fonctionné.

J'ai essayé d'ajouter dans le fichier etc/modules une ligne avec ppdev et de redémarer mais ca ne change rien.

Pourquoi je n'ai pas le fichier parport0 et comment l'ajouter?

Merci d'avance:

J'utilise crunchbang linux 8.04

Dernière modification par zebres (Le 30/07/2009, à 14:09)

Hors ligne

#2 Le 28/07/2009, à 11:41

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Je suis pas trop un spécialiste du port parallèle (et en plus au boulot je n'ai pas mon ubuntu préféré), on va alors commencer par quelques manipulations basiques :

- ton port est-il activé dans le bios ? Sinon le pauvre pingouin ne peut pas faire grand chose tongue
- si tu fais un grep PARPORT /boot/config-XX (avec XX = la version de ton noyau) qu'as-tu comme résultat ? Quelque chose du genre :
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m

serait un bon début.

#3 Le 28/07/2009, à 12:28

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Bonjour,

Voici ce que cela donne.
Que signifie =m ou =y?

grep PARPORT /boot/config-2.6.24-21-generic

CONFIG_PARPORT=m
CONFIG_PARPORT_1284=y
# CONFIG_PARPORT_GSC is not set
CONFIG_PARPORT_PC=m
# CONFIG_PARPORT_PC_SUPERIO is not set
CONFIG_I2C_PARPORT=m
CONFIG_I2C_PARPORT_LIGHT=m
CONFIG_PARPORT_AX88796=m
CONFIG_PARPORT_NOT_PC=y
CONFIG_PARPORT_PC_FIFO=y
CONFIG_PARPORT_PC_PCMCIA=m
CONFIG_PARPORT_SERIAL=m

merci

Edit: oui, mon port est activé dans le bios.

Dernière modification par zebres (Le 28/07/2009, à 12:30)

Hors ligne

#4 Le 28/07/2009, à 13:38

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Le fichier config... est le fichier utilisé pour la compilation du noyau.

Le noyau est composé de diverses fonctionnalité (gestion du port parallèle par exemple, mais aussi gestion de l'ext3, de bluetooth, de IPv6, de l'infrarouge...)
Pour chaque fonctionnalité le '=y' indique que le code est intégré au noyau, le '=m' indique un module chargeable à la demande.
La conception modulaire permet au noyau d'être relativement petit, donc de démarrer rapidement. De plus comme tout le monde n'a pas à la fois de l'infrarouge, du bluetooth et compagnie, le noyau chargera uniquement les modules nécessaires.

Pour en revenir à ton cas, tu as donc la gestion du port parallèle sous forme de module.

Avec l'aide de http://www.mjmwired.net/kernel/Document … arport.txt
on va tenter de débrouiller tout cela.

D'après ce que tu dis, si tu fais un :

# lsmod | grep parport

Tu devrais avoir...0 réponse !

Ensuite avec un :

# insmod parport
# lsmod | grep parport

Tu obtiens quoi comme résultat ?

Note : lsmod affiche la liste des modules chargés avec leurs dépendances, insmod permet de charger un module.

Note 2 : quand quelqu'un (même moi) t'indique des commandes, renseigne-toi (via man par exemple) pour savoir ce qu'elles font. Internet n'est pas rempli que de jolis lapins roses !

#5 Le 28/07/2009, à 14:51

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Merci pour les conseils de prudence.
Je viens de lire ceci sur les modules: http://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_modules_linux

Pour charger un module, c'est insmod ou modprobe.:P

Il semble que le module parport est déja chargé car voici ce que j'obtiens:

 lsmod | grep parport
parport                37832  2 ppdev,lp

Dans etc/modules, je n'ai que : loop, lp, fuse.

Y a-t-il un autre endroit où sont renseignés les modules qui doivent êtres chargés ou non?

Dans /proc/sys/dev/parport, je n'ai que le dossier default qui contient les 2 fichiers spintime et timeslice qui sont vides tous les deux. Je n'ai pas de parport0. Je ne comprends pas très bien ce qu'il faut faire pour l'ajouter.

Encore merci.

Hors ligne

#6 Le 28/07/2009, à 15:02

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Sur mon Linux du boulot (des redhat de différentes versions), un lsmod | grep parport me donne :

# lsmod | grep parport
parport_pc             62312  0 
parport                73165  2 parport_pc,lp

Essaye voir de charger le mode parport_pc (via un insmod parport_pc). D'après le lien que je t'ai fourni il faut lui fournir certains paramètres (ex : insmod parport_pc io=0x378 irq=7).

Regarde dans le bios le port et l'irq utilisé par le port parallèle et tente ta chance !

#7 Le 28/07/2009, à 15:19

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Un autre lien avec plein d'infos :

http://www.mjmwired.net/kernel/Document … arport.txt

#8 Le 28/07/2009, à 21:32

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Voici ce qu'il me répond:

insmod parport_pc io=0x378 irq=7
insmod: can't read 'parport_pc': No such file or directory

Comment savoir quelle adresse a le port parallèle. Je ne trouve rien dans le bios.

Merci.

Dernière modification par zebres (Le 28/07/2009, à 21:33)

Hors ligne

#9 Le 28/07/2009, à 21:51

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Je viens de voir ceci dans la doc de modprobe:
All files in the /etc/modprobe.d/arch/ directory are ignored.

Il y a un fichier i386 qui contient ceci:

alias parport_lowlevel parport_pc

alias binfmt-0064 binfmt_aout

Parport_pc ne devrait pas y être non?

Bonne soirée

Hors ligne

#10 Le 29/07/2009, à 08:22

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

L'adresse du port parallèle tu la trouves dans le bios. 0x378 est une adresse standard pour un port parallèle.

Du côté de modprobe, la ligne alias permet de créer un synonyme (un alias) pour un module.
Si tu fais :
   modprobe parport_lowlevel parport_pc

modprobe va transformer parport_lowlevel en parport_pc et faire un :
    modprobe parport_pc

On va chercher si le module existe sur ton disque...
Si tu fais un

find /lib/modules -name parport_pc\*

Tu obtiens quoi comme résultat ?

Dernière modification par oktoberfest (Le 30/07/2009, à 15:11)

#11 Le 29/07/2009, à 08:51

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Bonjour,

Le module a l'air présent.

Voici ce que cela donne:

/lib/modules/2.6.24-16-rtai/kernel/drivers/parport/parport_pc.ko
/lib/modules/2.6.24-19-generic/kernel/drivers/parport/parport_pc.ko
/lib/modules/2.6.24-21-generic/kernel/drivers/parport/parport_pc.ko

Bonne journée

Hors ligne

#12 Le 29/07/2009, à 09:03

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

C'est désespérant hmm.

Un petit :

# uname -r

Pour obtenir la version de ton noyau

Et :

# depmod

Pour régénérer les dépendances entre modules

Et retente un modprobe parport_pc après tout ça...

#13 Le 29/07/2009, à 10:31

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Oui, je commencais à désespérer! surtout quand on ne connais rien!

Mais après un depmod (en sudo) et un modprobe parport_pc, oh miracle, il y a un fichier parport0 dans /dev!
J'ai testé mon imprimante et elle fonctionne!

Comment te remercier oktoberfest? C'est très gentil d'avoir passé du temps pour résoudre mon problème!

Encore une  question (deux en fait): je n'ai pas mis de paramètrs après "insmod parport_pc" mais si mon imprimante fonctionne, je suppose que ce n'était pas nécessaire?

Lorsque je lance mon morceau de programme en C:

 #include <sys/ioctl.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/errno.h>
#include <linux/ppdev.h>
#include <linux/parport.h>
int errno, fd;
main()
{
if ((fd = open("/dev/parport0", O_RDWR)) < 0)
{
  fprintf(stderr,"Open Error : %s (%d)\n",strerror(errno),errno);
  exit(EXIT_FAILURE);
}
 if (ioctl(fd, PPCLAIM) < 0) {
  fprintf(stderr,"PPCLAIM ioctl Error : %s (%d)\n",
	strerror(errno),errno);
  exit(EXIT_FAILURE);
}

}

Il me dit: Open Error : Permission denied (13)
Faut-il simplement cahnger les droits d'accès à parport0 comme ci dessous ou y a-t-il quelque chose de plus compliqué à faire?

chmod a+rw /dev/parport0

Un grande merci.

Hors ligne

#14 Le 29/07/2009, à 10:48

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Tu peux m'envoyer un pack de bières pour me remercier tongue

le chmod c'est pas bien parce que :
- tu modifies les droits sans que le système ne le sache. C'est pas grave sauf que...
- au prochain reboot les droits seront revenus comme avant !

Plutôt qu'un pas joli chmod, je te propose :

# ls -l /dev/parport0

Tu regardes le groupe auquel appartient le fichier (sans doute lp) et tu insères ton compte utilisateur dans ce groupe.

Pour les paramètres du module, si ça marche sans paramètre, ne touche à rien !

Reste ensuite un point crucial : est-ce que le chargement du module se fait automatiquement au reboot de ta machine ?

Dernier point : quand tu auras tout testé, rajoute un [RESOLU] dans le titre de ton message, que tout le monde en profite.

#15 Le 30/07/2009, à 14:20

zebres

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

Bonjour,

Je t'ai envoyé ce que tu m'as demandé par email! J'espère que tu l'as bien recu! big_smile

Tout fonctionne après reboot de l'ordi.

Juste une dernière question: il existe une commande pour afficher tous les membres d'un groupe?

Merci beaucoup pour le service rendu!

Hors ligne

#16 Le 30/07/2009, à 14:47

compte supprimé

Re : [Résolu] Lecture port parallèle en C. Fichier parport0 manquant

J'ai bien reçu le pack lol

Pour ta dernière question : je n'ai pas d'ubuntu sous les yeux, mais essaye :

# grep '^<group>:' /etc/group | awk -F':' '{print $4}'

ou

# awk -F':' '$4 == "<numero du groupe>" { print $1}' /etc/passwd

Dernière modification par oktoberfest (Le 30/07/2009, à 14:48)