Je m’intéresse à ça pour mon stage plutôt. J'ai besoin d'un .c pour récupérer des données depuis un matériel mais sa bibliothèque n'est pas compatible avec g++ …
Du coup je dois scinder mon travail ! Quelle chance, ça me retarde un peu mais j'en apprends également.
Je cherche a récupérer des données d'un fichier acquisition.c.
1-Pour cela j'envoie des arguments depuis le programme interface.cpp vers acquisition.c avec la commande execl. Ça m'évite de créer un tube nommé et de traiter la chaine de caractères, en plus cette méthode ne fonctionne pas très bien malheureusement.
2-Le programme acquisition.c fait l'acquisition des données et créé un tube nommé et écrit dessus.
3-Le fichier interface.cpp vient lire le tube nommé.
CODE :
Syntaxe de execl :
execl("chemin d'accès/prog","prog","arg1","arg2",…,NULL);
Programme :
#include "mainwindow.h"#include "ui_mainwindow.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <iostream>#include <string>#include <fstream>#include <qwt_plot_curve.h>#include <QColorDialog>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>usingnamespacestd;//CONSTRUCTEURMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);}//DESTRUCTEURMainWindow::~MainWindow(){deleteui;}voidMainWindow::on_pushButton_clicked(){execl("/home/jo-pc/Acquisition","Acquisition",temps_integration,NULL);//lecture du tube :doubletmp2=0;cout<<"essai3"<<endl;intfd2;FILE*fp2;cout<<"essai4"<<endl;char*nomfich2="/home/jo-pc/Bureau/test2.txt",chaine2[50];cout<<"essai5"<<endl;fd2=open(nomfich2,O_RDONLY);/* ouverture du tube */cout<<"essai6"<<endl;fp2=fdopen(fd2,"r");/* ouverture du flot */cout<<"essai7"<<endl;fscanf(fp2,"%s",chaine2);/* lecture dans le flot */cout<<"essai8"<<endl;//tmp2 = strtod (chaine2,NULL);cout<<"essai9"<<endl;cout<<chaine2<<endl;cout<<"essai10"<<endl;//printf("%lf\n",tmp2); /* affichage */unlink(nomfich2);/* fermeture du flot */cout<<"essai11"<<endl;}
Quelques warnings :
mainwindow.cpp:86: avertissement : deprecated conversion from string constant to 'char*'[-Wwrite-strings]
char *nomfich2="/home/jo-pc/Bureau/test2.txt", chaine2[50];``` ^
Je compile avec g++ 64 bits sous QtCreator.
Voila voila
Pour le moment le programme se termine "subitement". Le programme s’arrête à l'affichage d'essai 7. Il ne passe pas cette ligne : fscanf(fp2, "%s", chaine2); /* lecture dans le flot */
C'est plus par "habitude" pour le sudo car parfois quelques commandes ne s'exécutent pas autrement qu'avec les droits de l'administrateur.
Le module nécessaire était présent mais il fallait en fait changer deux paquets de ligne de code pour que mon adaptateur soit reconnu et pour enlever une erreur.
Merci pour ta précision pour lsusb.
J'ai réussi à faire fonctionner le driver mais en règle général tout se compile avec des makefile car on a trop de dépendance entre les fichiers. Desfois ça peut être utile de savoir comment créer un makefile.
include linux/version.h
//include linux/config.h
ifdef CONFIG_USB_DEBUG
define DEBUG
endif
include linux/module.h
include linux/kmod.h
include linux/sched.h
include linux/init.h
include linux/netdevice.h
include linux/etherdevice.h
include linux/ethtool.h
include linux/workqueue.h
include linux/mii.h
include linux/usb.h
include linux/crc32.h
Oui tu as raison, j'aimerais compiler le driver fourni par le constructeur en cross compilation pour ma carte linux elektor mais je ne sais pas trop comment m'y prendre et quelles étapes lancer.
En fait j'utilise le noyau qu'ils ont donné pour le projet pour le moment. J'ai trouvé un driver mais il faudrait que j'arrive effectuer une cross compilation avec pour ma carte linux elektor.
Malheureusement je ne sais pas trop comment procéder.
[^] # Re: lire le cours sur execl et sur les tubes nommés
Posté par electro575 . En réponse au message Communication entre deux fichiers sous linux. Évalué à 0.
Ben j'ai juste l'appel du programme acquisition.c qui ne fonctionne pas.
Si je lance les deux programmes separement ca fonctionne.
Le tube nommé est écrit par acq.c et lu & affiché par interface.cpp
Merci pour ta precision
[^] # Re: lire le cours sur execl et sur les tubes nommés
Posté par electro575 . En réponse au message Communication entre deux fichiers sous linux. Évalué à 0. Dernière modification le 13 avril 2015 à 10:02.
Je m’intéresse à ça pour mon stage plutôt. J'ai besoin d'un .c pour récupérer des données depuis un matériel mais sa bibliothèque n'est pas compatible avec g++ …
Du coup je dois scinder mon travail ! Quelle chance, ça me retarde un peu mais j'en apprends également.
Je cherche a récupérer des données d'un fichier acquisition.c.
1-Pour cela j'envoie des arguments depuis le programme interface.cpp vers acquisition.c avec la commande execl. Ça m'évite de créer un tube nommé et de traiter la chaine de caractères, en plus cette méthode ne fonctionne pas très bien malheureusement.
2-Le programme acquisition.c fait l'acquisition des données et créé un tube nommé et écrit dessus.
3-Le fichier interface.cpp vient lire le tube nommé.
CODE :
Syntaxe de execl :
execl("chemin d'accès/prog","prog","arg1","arg2",…,NULL);
Programme :
Quelques warnings :
[^] # Re: lui donner à manger
Posté par electro575 . En réponse au message Création d'un makefile pour cross-compilation. Évalué à 1.
Tu as raison oui, c'est ce que j'ai fait par la suite.
Bonne journée à toi
[^] # Re: Module noyau
Posté par electro575 . En réponse au message Création d'un makefile pour cross-compilation. Évalué à 1.
Merci pour la documentation, je note ton site internet pour regarder ça.
Bonne journée à toi
[^] # Re: sudo ?
Posté par electro575 . En réponse au message Création d'un makefile pour cross-compilation. Évalué à 1.
C'est plus par "habitude" pour le sudo car parfois quelques commandes ne s'exécutent pas autrement qu'avec les droits de l'administrateur.
Le module nécessaire était présent mais il fallait en fait changer deux paquets de ligne de code pour que mon adaptateur soit reconnu et pour enlever une erreur.
Merci pour ta précision pour lsusb.
J'ai réussi à faire fonctionner le driver mais en règle général tout se compile avec des makefile car on a trop de dépendance entre les fichiers. Desfois ça peut être utile de savoir comment créer un makefile.
Bonne journée à toi et merci
[^] # Re: kernel plus recent
Posté par electro575 . En réponse au message Carte Linux Embedded Elektor . Évalué à 1.
include linux/version.h
//include linux/config.h
ifdef CONFIG_USB_DEBUG
define DEBUG
endif
include linux/module.h
include linux/kmod.h
include linux/sched.h
include linux/init.h
include linux/netdevice.h
include linux/etherdevice.h
include linux/ethtool.h
include linux/workqueue.h
include linux/mii.h
include linux/usb.h
include linux/crc32.h
[^] # Re: kernel plus recent
Posté par electro575 . En réponse au message Carte Linux Embedded Elektor . Évalué à 1.
J'essai de faire la cross compilation d'un driver que j'ai trouvé et qui devrait je pense bien marcher.
Lorsque j'essai de faire une cross-compilation du driver, il me demande les .h nécessaire !!!
jo@008:~/Bureau/embedded/projet_elektor/AX88772B_772A_760_772_178_LINUX_Driver_v4.4.1_Source$ sudo arm-linux-gnueabi-gcc -o asix asix.c
asix.c:29:26: erreur fatale: linux/module.h : Aucun fichier ou dossier de ce type
compilation terminée.
jo@008:~/Bureau/embedded/projet_elektor/AX88772B_772A_760_772_178_LINUX_Driver_v4.4.1_Source$
Je pense prendre ceux du noyau linux embarqué mais je ne sais pas ou les prendre
[^] # Re: kernel plus recent
Posté par electro575 . En réponse au message Carte Linux Embedded Elektor . Évalué à 1.
Le problème c'est que j'ai juste fait une commande :
make zImage -> /driver/net/usb/asix.c créé
make modules -> /drover/net/usb/asix.ko créé
Autrement je ne sais rien de plus. Juste qu'ils utilisent une chaine d'outils armv5-qte-5.0 à l'aide de ce script :
P1=/opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/usr/bin/armv5te-linux-gnueabi/
P2=/opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/bin/armv5te-linux-gnueabi/
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
export PATH=$P1:$P2:$PATH
[^] # Re: Pas de mélange
Posté par electro575 . En réponse au message Carte Linux Embedded Elektor . Évalué à 1.
Oui tu as raison, j'aimerais compiler le driver fourni par le constructeur en cross compilation pour ma carte linux elektor mais je ne sais pas trop comment m'y prendre et quelles étapes lancer.
[^] # Re: kernel plus recent
Posté par electro575 . En réponse au message Carte Linux Embedded Elektor . Évalué à 1.
En fait j'utilise le noyau qu'ils ont donné pour le projet pour le moment. J'ai trouvé un driver mais il faudrait que j'arrive effectuer une cross compilation avec pour ma carte linux elektor.
Malheureusement je ne sais pas trop comment procéder.