# [hardware] allumer des led sur le port paralelle (résolu)

## alpha_one_x86

Bonjour tout le monde  :Smile:  ,j'arrive pas a allumer des led sur mon port parallèle en suivant: <lien>http://www.linux-france.org/prj/ledpanel/ledpanel.html</lien>

Ca marche pas. L'etat des led ne change jamais.Last edited by alpha_one_x86 on Tue Nov 21, 2006 11:41 pm; edited 1 time in total

----------

## truc

ça fait pas mal de post à ton actif et pourtant tu retombes dans le piège du débutant!

9a marche pas, c'est super vague, si il n'y a pas de message d'erreur, dis le au moins, les gens ici, sont près à t'aider mais ne vont certainement pas se retaper le howto, que tu as filé en lien, pour le faire. Donc il faut être précis

(je ne te dis pas de décrire par étape tout ce que tu as fait pour faire fonctionner les led, mais au moins ce que tu as fait pour résoudre ton problème (elles ne s'allument pas) et si tu n'as encore rien fait c'est que tu postes trop tôt sur le forum. Sinon précise-le.)

EDIT: et pour les liens tu as des balises BBC déjà toute faite:

[ url= adresse_de_ton_lien] Nom de ton lien [ /url]   (sans les espaces dans les balises)

----------

## alpha_one_x86

La led est allumer, la commande 

```
led -o 1-8
```

 marche sans problème, et 

```
led -f 1-8
```

. J'ai activer ledpanel dans mon kernel, mais j'e n'ai pas de truc me dissant que ca marche pas, pourtant meme au voltmetre le tension ne change pas.

----------

## YetiBarBar

 *truc wrote:*   

> (je ne te dis pas de décrire par étape tout ce que tu as fait pour faire fonctionner les led, mais au moins ce que tu as fait pour résoudre ton problème (elles ne s'allument pas) et si tu n'as encore rien fait c'est que tu postes trop tôt sur le forum. Sinon précise-le.)

 

Je suis assez d'accord. Par contre, je suis pas sur que beaucoup de monde soit motivé pour se taper la doc d'un truc qui date un peu (le module a été écrit à l'époque des noyaux linux 2.0 et 2.1 qui date d'à peu près 10 ans quand même)

J'ai pas le temps en ce moment de me plonger dans le source de ton programme, et sur les méthodes utilisées par le module et par le programme led, mais certaines procédures peuvent nécessiter d'être exécutées avec des privilèges root (surtout qu'ici, je pense qu'il y a pas mal d'accès direct aux ports).

Sinon, juste pour mémoire, l'électronique "home-made" sur quelque port que ce soit est une méthode très "sure" pour cramer sa carte mère ...

----------

## alpha_one_x86

Oui j'ai tester en root, mais comment definir mes bits sur mon port avec un noyau 2.6?

----------

## YetiBarBar

Que donne un :

```
ls /dev/led*
```

(en théorie, tu devrais avoir quelquechose du style /dev/ledpanel)

EDIT : Edit coupé et reposté plus bas ...Last edited by YetiBarBar on Sun Nov 19, 2006 5:32 pm; edited 2 times in total

----------

## alpha_one_x86

rien j'ai plus ledpanel alors que je l'avait pendant un moment. Alors que je l'ai mit en dur dans mon kernel 2.6

----------

## YetiBarBar

J'ai jeté un oeil rapide au code source, il y a peu êtreun truc foireux au niveau de la définition du port parallèle dans le fichier ledpanel.h

Dans le source, on lit :

```
#define ledpanel 0x278
```

Il me semble que 0x278 correspond à LPT:2 alors que je pense que tu veux attaquer LPT:1 (soit 0x378)

Il faudrait tenter de recompiler le module en remplaçant cette ligne par :

```
#define ledpanel 0x378
```

puis

```
insmod ledpanel
```

 (précédé d'un rmmod si il est déjà chargé)

Sinon, ça devrait marcher en tant que user mais de toute façon, tu dois charger le module en tant que root

J'en remets une couche : Tu fais ceci à tes risques et périls.

Par contre, je vois pas trop l'intêret de mettre un tel module en dur surtout qu'il ne fonctionne pas encore

Le mieux est de le faire tourner en tant que module avec insmod puis de le charger à chaque démarrage

----------

## alpha_one_x86

J'arrive pas a charger le module

```
insmod ledpanel

insmod: can't read 'ledpanel': No such file or directory
```

Pour le port, j'avais deja remplacer 0x278 par 0x378, et ca correspond bien dans le bios a 0x378.

----------

## YetiBarBar

Pour faire le insmod, il faut que tu sois là où le module est compilé (ie là où tu as fait le make ou pas loin ...).

Une fois que celà marchera avec insmod, tu pourras le copier dans le répertoire des modules de ton noyau et l'ajouter à l'autoload des modules.

PS : A bien y réfléchier, la syntaxe exacte doit être :

```
insmod ledpanel.ko
```

au pire, tu peux toujours le localiser avec find ou slocate ...

----------

## alpha_one_x86

```
find /usr/src/linux/ -iname 'ledpanel*'
```

 rien, mais j'ai ca dans mon kernel:

```
─────────────────────────────────────────────────────────────────────┐ │

  │ │[*] LED Support                                                      │ │

  │ │<M>   LED Class Support                                              │ │

  │ │--- LED drivers                                                      │ │

  │ │--- LED Triggers                                                     │ │

  │ │[*] LED Trigger support                                              │ │

  │ │<M>   LED Timer Trigger                                              │ │

  │ │[*]   LED IDE Disk Trigger
```

La je vien de tout mettre en dur, pour que je soit sur que ca marche.

----------

## YetiBarBar

 *Quote:*   

> ─────────────────────────────────────────────────────────────────────┐ │
> 
>   │ │[*] LED Support                                                      │ │
> 
>   │ │<M>   LED Class Support                                              │ │
> ...

 

Je me disais aussi : 100% HS ==> ça n'a carrément aucun rapport

Pour ton module, tu vas dans le répertoire où tu as décompressé le tar.gz, tu fais un :

```
make && make install
```

 puis 

```
insmod le_nom_du_module
```

 sachant que le nom du module, tu le trouvera avec ls.

----------

## alpha_one_x86

j'ai pas de .ko ni de .mo, j'ai tester avec le .o mais ca marche pas.

----------

## YetiBarBar

ls dans le repertoire où tu as fait le make devarit te confirmer que la commande était bien celle que tu as faite au début

```
insmod ledpanel
```

Par contre, il faut bien le faire là où est le fichier "module" ledpanel et être root

----------

## alpha_one_x86

toc ledpanel-0.1.2 # ls

INSTALL  LICENSE  LISEZMOI.txt  Makefile  led  led.c  led.h  ledpanel.c  ledpanel.o  ledpanel.sgml  ledpanel_2.1.c  rt_ledpanel.c

toc ledpanel-0.1.2 # insmod ledpanel

insmod: can't read 'ledpanel': No such file or directory

toc ledpanel-0.1.2 #

----------

## ghoti

 *alpha_one_x86 wrote:*   

> toc ledpanel-0.1.2 # insmod ledpanel
> 
> insmod: can't read 'ledpanel': No such file or directory

 

Il faut indiquer le répertoire, même si c'est le répertoire courant, sinon insmod va chercher le module dans une série de répertoires bien définis (cfr man insmod) :

 *Quote:*   

> Ou bien :
> 
> cd my_directory
> 
> insmod ./ledpanel
> ...

 

----------

## alpha_one_x86

il y a pas de modules dedans:

```
toc user # cd /mnt/servstock/samba/ledpanel-0.1.2/

toc ledpanel-0.1.2 # insmod ./ledpanel

insmod: can't read './ledpanel': No such file or directory

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/ledpanel

ledpanel.c      ledpanel.o      ledpanel.sgml   ledpanel_2.1.c

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/ledpanel.o

insmod: error inserting '/mnt/servstock/samba/ledpanel-0.1.2/ledpanel.o': -1 Invalid module format

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/ledpanel.sgml

insmod: error inserting '/mnt/servstock/samba/ledpanel-0.1.2/ledpanel.sgml': -1 Invalid module format

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/*

insmod: error inserting '/mnt/servstock/samba/ledpanel-0.1.2/INSTALL': -1 Invalid module format

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/

INSTALL         LICENSE         LISEZMOI.txt    Makefile        led             led.c           led.h           ledpanel.c      ledpanel.o      ledpanel.sgml   ledpanel_2.1.c  rt_ledpanel.c

toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/led

insmod: error inserting '/mnt/servstock/samba/ledpanel-0.1.2/led': -1 Invalid module format

toc ledpanel-0.1.2 #

```

EDIT: ce serai plus simple de me dire comment ecrire directement des données sur mon port.

----------

## ghoti

 *alpha_one_x86 wrote:*   

> il y a pas de modules dedans:

 

Tu rigoles ou quoi ?   :Evil or Very Mad: 

 *alpha_one_x86 wrote:*   

> toc ledpanel-0.1.2 # ls
> 
> INSTALL  LICENSE  LISEZMOI.txt  Makefile  led  led.c  led.h  ledpanel.c   ledpanel.o  ledpanel.sgml  

 

Tu es sûr d'avoir lu et compris tout ce qu'on t'a dit plus haut ?

 *Quote:*   

> EDIT: ce serai plus simple de me dire comment ecrire directement des données sur mon port.

 

Non

----------

## alpha_one_x86

Sauf erreur de ma part c'est pas un module:

```
toc ledpanel-0.1.2 # insmod /mnt/servstock/samba/ledpanel-0.1.2/ledpanel.o

insmod: error inserting '/mnt/servstock/samba/ledpanel-0.1.2/ledpanel.o': -1 Invalid module format
```

 Invalid module format

----------

## ghoti

 *alpha_one_x86 wrote:*   

> Sauf erreur de ma part c'est pas un module

 

Si, c'est bien un module mais conçu pour les noyaux 2.0.*

Il y a un autre module pour les noyaux 2.1.*

Tout ça ne date pas d'hier  :Sad: 

Mais en tout état de cause, il n'y a pas de module pour les noyaux 2.6.* ce qui explique le "invalid format"

----------

## Enlight

 *Quote:*   

> 
> 
> #                                                                               
> 
> # LedPanel driver & command line interface                                      
> ...

 

Ce sont les 3 seuls modules qui puissent être construits!!!!

et si ton format est invalide il y'a une excellente raison à celà :

 *Quote:*   

>  a) Si vous utilisez le noyau 2.0 (Non temps-réel):
> 
>   Taper "make"
> 
> ...
> ...

 

edit : grilled!

----------

## alpha_one_x86

Et pour un noyau 2.6 je fait quoi? Vous me conseillez quoi?

----------

## ghoti

 *alpha_one_x86 wrote:*   

> Et pour un noyau 2.6 je fait quoi? Vous me conseillez quoi?

 

- Soit tu contactes le développeur

- Soit tu reprends les sources et tu les adaptes

Mais c'est hors sujet !

----------

## alpha_one_x86

Qui aurai un tuto, ou une sources simple pour le controle du port paralélle?

Car je dévelope régulierement en C++ mais j'ai jamais fait ça sous linux.

----------

## Enlight

Google est ton ami   :Rolling Eyes:  http://www.aqra.ca/article.php3?id_article=22 premier truc qui sort.

----------

## ghoti

Et pour un cours de C/C++ : ici

----------

## alpha_one_x86

Je sais, mais j'y arrive pas avec ce tuto, bon je continu a chercher, ...

----------

## YetiBarBar

 *alpha_one_x86 wrote:*   

> Qui aurai un tuto, ou une sources simple pour le controle du port paralélle?
> 
> Car je dévelope régulierement en C++

 

Donc je suppose que tu es parfaitement apte à comprendre le code source du programme (écrit en C)

man est ton ami:

```
man outb
```

 devrait te permettre de comprendre comment l'auteur de ton programme accède aux ports et de le reproduire dans tes programmes ...

----------

## ghoti

 *YetiBarBar wrote:*   

> 
> 
> ```
> man outb
> ```
> ...

 

Tu es dur : moi j'avais pas osé   :Confused: 

----------

## YetiBarBar

 *ghoti wrote:*   

>  *YetiBarBar wrote:*   
> 
> ```
> man outb
> ```
> ...

 

C'est préventif ... Vu la qualité de ses recherches (on doit pas avoir le même google ...), je m'attendais à la question d'ici peu ...

----------

## ghoti

 :Laughing: 

----------

## alpha_one_x86

Je croi que j'ai de quoi m'occuper avec votre aide, merci.

Mais j'ai une derniere question: dans quel pakage il y a outb, car la commande n'existe pas par default.

----------

## Enlight

Tu le lis ce foutu man ou tu fais semblant???

----------

## ghoti

 *YetiBarBar wrote:*   

> je m'attendais à la question d'ici peu ...

 

And de winner is ...  :Laughing:   :Laughing: 

Assez : j'ai mal au bide !  :Laughing:   :Laughing: 

----------

## alpha_one_x86

J'ai lu le man mais j'ai pas compris, je vais ouvrir les sources de led panel apres, ca m'aidera, mais la j'ai un exam jeudi, donc je révise.

D'apres ce que j'ai compris, c'est outb(0xff, 0x378) pour tout allumer. c'est outb(0x00, 0x378) pour tout éteindre.

----------

## Enlight

outb c'est une macro... (cf stdio.h) pas une commande shell. C'est écrit dans le paragraphe description. pour envoyer un octet de donnée sur un port. un octet c'est 8 bits et ton cable contient 8 sorties (D0 à D7) donc oui avec 0xff (0b11111111) tu va probablement tout allumer et avec 0x00 tout éteindre.

Ca c'est expliqué sur le site que je t'ai filé, de manière prodigieusement claire en plus, et devine quoi je ne le savais pas ce matin en me levant.

----------

## alpha_one_x86

Je sais que c'est une macro mais j'ai deux pc sous linux, l'un a la commande outb, l'autre pas.

```
user@silvestre ~/led $ gcc port.cpp

port.cpp: In function 'int main()':

port.cpp:14: error: 'ioperm' was not declared in this scope

port.cpp:15: error: 'exit' was not declared in this scope

port.cpp:23: error: 'exit' was not declared in this scope

user@silvestre ~/led $ gcc port.cpp

/tmp/ccsaJt4O.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

collect2: ld returned 1 exit status

user@silvestre ~/led $

```

Si non, je tente de faire un truc simple:

```
#include <stdio.h>

#include <asm/io.h>

        int data,etat,cont,octet;

        int main()

        {

                unsigned int lu;

       

                data=0x378;  /* pour le port lpt0 */

                etat=0x379;

                cont=0x37a;

       

                /*if(ioperm(data,3,1))

                 {perror("ioperm"); exit(1);}       */

                octet=0xFF;

                outb(octet, data);

       

                lu=inb(etat);

                printf("%X", lu);

       

                //exit(0);

        }
```

mais meme ca ca marche pas.

user@silvestre ~ $ which outb

/usr/bin/outb

user@silvestre ~ $ outb --help

outb [-i <index>] <port> <value>Last edited by alpha_one_x86 on Tue Nov 21, 2006 5:29 pm; edited 2 times in total

----------

## Enlight

1) lis le lien que je t'ai donné mais lis le!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2) .cpp ça se compile pas avec gcc en principe. le support étant trèèèèèèèèèèès restreint.

3) le outb dont tu parles appartient à xorg, je jouerai pas avec sans être sur de ce qu'il contient.

----------

## Bapt

en plus chez moi man ioperm (puisque ioperm te pose des problèmes à la compilation) me donne #include <sys/io.h> et non asm/io.h (première entrée en tapant ioperm sur google)

----------

## Ezka

Mais ça sert a quoi ? ... je veux dire allumer des LED sur le port parallèle ? c'est pour la déco de noël ? Enfin bon, bon courage quoi   :Laughing: 

Nb : défois j'hésite a poster ça ... mais encore désolé, allumé des led sur un port LPT ça me choque ... c'est comme chercher des champignons en pleine rue bétonnée ... ou mettre des palmes et prendre son harpon dans sa baignoire ... Défois je me demande ...   :Rolling Eyes: 

----------

## TrizoLakai

Si moi j'ai voulu fair eun truc du genre j'avais une classe super belle ça fonctionnait, mais j'ai pas envi de la retrouver :p

Je voulais me servir de ça pour sortir un numero sur mon port et le moduler pour je ne sais plus quoi dans mon PPE de SI   :Laughing: 

Un truc infaisable xD, et qui servait à rien.

Mais ça peut te servir à afficher le nombre de messages non lu de ta boite pop, de te donner l'heure, heu, ...

 :Wink: 

----------

## alpha_one_x86

Ca sert a simple a voir si mon service apache mysql, samba, ... sont démarer. Car sur mon serveur il n'y as pas de carte graphique.

----------

## YetiBarBar

Sinon ça sert aussi à griller une carte mère ... Enfin je dis ça ... (j'espère que ce sera pas préventif ce coup-ci ...)

Quitte à investir dans un montage à DEL, j'investirais plutôt dans une "vieille" carte graphique PCI

----------

## Ezka

 *alpha_one_x86 wrote:*   

> Ca sert a simple a voir si mon service apache mysql, samba, ... sont démarer. Car sur mon serveur il n'y as pas de carte graphique.

 

Ha oué c'est vrai   :Laughing:  , enfin bon si même tu as pas de CG, tu peux le joindre en ssh ton server et vérifier ... quitte même a ce qu'il émettent un/des BIP si des services foirent au démarrage ... ce sera largement moins prise de tête  :Very Happy: 

----------

## alpha_one_x86

1) je sort d'un bac élctronique donc je sais ce que je fait, merci de me dire que je vais cramer ma carte mere.

2) Je veux voir l'état de mon serveur d'un simple coup d'oeuil, quand il ne boot pas ou que ssh ne ce lance pas, je pas voir l'état.

----------

## blasserre

pour ça dieu a créé les cartes graphiques

----------

## geekounet

 *alpha_one_x86 wrote:*   

> 1) je sort d'un bac élctronique donc je sais ce que je fait, merci de me dire que je vais cramer ma carte mere.
> 
> 2) Je veux voir l'état de mon serveur d'un simple coup d'oeuil, quand il ne boot pas ou que ssh ne ce lance pas, je pas voir l'état.

 

Et si ssh se lance pas, faudra bien y connecter un écran/clavier pour réparer ça, donc ya pas d'intérêt de retirer la CG ...

----------

## Scullder

 *blasserre wrote:*   

> pour ça dieu a créé les cartes graphiques

 

Mais chaque fois que t'en branche une, dieu tue un petit chaton   :Sad: 

--->[]

(oui je sais, cette intervention est très utile)

----------

## ghoti

 *Scullder wrote:*   

> [Mais chaque fois que t'en branche une, dieu tue un petit chaton  
> 
> --->[]

 

Toi, tu viens d'upgrader vmware !  :Laughing: 

 *Changelog wrote:*   

> [ ... ]
> 
> Added 5.5.3 version and closing bug #155593. Remember, kids, every time you
> 
> file a 0-day bump request, God kills a kitten. Please think of the kittens.
> ...

 

----------

## alpha_one_x86

On ne vas pas débatre pourquoi je veux le faire, je vais acheter bientot un carte graphique mais en attendant...

Que je fase mais programme, ou que je compile ce des autre j'ai toujours cette erreur qui bloque tout les programmes:

```
user@silvestre ~/led $ gcc port.cpp

/tmp/cc6ZCzyu.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

collect2: ld returned 1 exit status

user@silvestre ~/led $

```

alors la si on pouvais m'indiquer ou chercher.

----------

## Tuxicomane

```
man gcc
```

 :Rolling Eyes: 

----------

## kopp

As-tu lu ce qu'on te disait ? Enlight pour être précis !

Bon, pour que ce soit clair, je répète:

on ne compile pas du C++ avec gcc mais avec g++ !

----------

## ghoti

 *alpha_one_x86 wrote:*   

> alors la si on pouvais m'indiquer ou chercher.

 

Jouer avec, c'est bien mais s'y suspendre !   :Evil or Very Mad:   :Evil or Very Mad: 

----------

## YetiBarBar

 *alpha_one_x86 wrote:*   

> 1) je sort d'un bac élctronique donc je sais ce que je fait, merci de me dire que je vais cramer ma carte mere.

 

Le dernier qui m'a dit ça est ingé en électronique embarquée ... Je te mets juste en garde (un peu lourdement ... )

Par contre, je ne pense pas que tu aies réellement besoin de faire du C++, je te conseillerais même du C pur si tu veux avoir une chance de pouvoir transformer ton programme en module et ne pas avoir à tout lancer en root.

Sinon, sans ton code source, je vois mal d'où viens la référence à ce symbole

----------

## alpha_one_x86

Désoler j avais appris le contraire, surment car mes code marcher tous avec gcc, et que dev-cpp compil par default avec gcc et non g++.

Vu que je peu compiler les exemple du web, et que je sais programmer, je met ce topic en résolut, car tout le monde a marre de moi ici  :Sad:  , et je vais bien m'en sortir, car maitenant j'ai tout les outils de base pour travailler et un system correcte et stable.

----------

## Enlight

Si tu avais lu le man gcc comme on te l'a conseillé, tu aurais vu qu'il y'a une très bonne raison pour laquelle ont te dit d'utiliser g++ au lieu de gcc :

 *Quote:*   

>  g++ is a program that calls GCC with the
> 
>        default language set to C++, and automatically specifies linking
> 
>        against the C++ library.
> ...

 

autrement dit si tu persiste sur gcc tu doit au minimum ajouter -lstdc++ (pour la portion de code que j'ai vue sur la page précédente) et peut être d'autres, pour ce que je connais au C++ moi...

Sinon comme dit dans la mesure où ton code n'a rien de spécifique au C++ par rapport au C (et n'en aura probablement pas besoin), pourquoi s'emmerder.

edit : et puisqu'on en est là t'oublieras pas que selon man outb il faut :  *Quote:*   

> Compiler  le programme avec les options -O or -O2

 

Une fois encore, c'est la démarche que tu dois apprendre, souvent quand on te file une réponse, c'est pas du par coeur, c'est vraiment pas rare qu'au moment de la question on ait pas la moindre idée de ce dont tu parles, mais avec une bonne démarche de recherche (les manuels et google), ça prends pas longtemps, le seul prérequis c'est de savoir lire. Si c'est l'anglais le problème y'a un paquet qui s'appèle  man-pages-fr.

Voilà, c'est la dernière fois que je ferais un telle démarche de recherche et de prémachage, alors j'espère que c'est imprimé.

edit 2 : arf avec cette affaire je viens de passer sireyessire au ranking   :Rolling Eyes: 

----------

## dapsaille

 *alpha_one_x86 wrote:*   

> Désoler j avais appris le contraire, surment car mes code marcher tous avec gcc, et que dev-cpp compil par default avec gcc et non g++.
> 
> Vu que je peu compiler les exemple du web, et que je sais programmer, je met ce topic en résolut, car tout le monde a marre de moi ici  , et je vais bien m'en sortir, car maitenant j'ai tout les outils de base pour travailler et un system correcte et stable.

 

Tu as ton expérience et nous avons tous la notre ..

 rien ne t'empêche de puiser dans les conseils des autres ...

 Bon respire un bon coup reprend ton code source proprement et attaque le truc .. tient nous au courant ca peut être bon d'upgrader ce bout de code du kernel 2.0/1 vers le 2.6,

rien ne t'empeche de le forward au créateur afin qu'il sois diffusé ...

 Sinon par pitié , nous faisons tous des fautes ... plus ou moins grossières .. mais en ce qui te concerne ca sens plutot le dédain des autres ... fait un effort tu auras plus de réponse constructive   :Wink: 

----------

