Forum Linux.général Projet : conflit avec vstmod

Posté par  . Licence CC By‑SA.
Étiquettes :
0
31
mai
2015

Bonjour à tous,

Je suis sur un projet en ce moment. Je me charge de développer une communication fiable entre l'ordinateur et un matériel avec les ressources informatiques que j'ai en ma possession.

J'utilise un "pack" du nom de SeaBreeze. Je suis confronté à un problème. Lorsque je récupère des données d'un matériel du nom d'USB4000, je reçois des données erronées. Le lien concernant SeaBreeze ci-contre spécifie que pour le matériel USB4000, SeaBreeze est en conflit avec VSTMOD sous Linux.

Lien : SeaBreeze -> THREADING -> conflit VSTMOD

Paragraphe "Threading" :

vstmod conflict

Under Ubuntu 10.04 LTS and other Linux versions, you may have trouble claiming certain spectrometers, including the USB4000, due to a conflict with the vstmod kernel module. Try running "sudo rmmod vstmod", then re-running your SeaBreeze application.


Solution 1 : désactiver VSTMOD

sudo rmmod vstmod

->rmmod: ERROR: Module vstmod is not currently loaded

Test du programme compilé pour récupérer les données -> éronnées de nouveau !!?


Autres solutions :

-soit modprobe -r vstmod
-soit le blacklister
-> il faut savoir en tout cas à quoi sert vstmod avant de la désactiver !


Autres solutions :

-vérifier la compatibilité du driver USB avec les librairies utilisées pour le projet. Le souci c'est que j'ai testé 2 librairies en plus pour récupérer des informations des périphériques USB! J'ai peut être fait une gaffe à ce niveau la mais je ne pense pas.
L'USB de la distribution d'Ubuntu n'est peut être pas compatible ! Avec Windows, SeaBreeze fonctionne pour récupérer les données sur l'USB4000.


Je pense avoir tous dit! Si vous avez une direction de recherche pour palier à ce problème je suis preneur ^

Les tests seront fait demain.

Merci à tous et bon appétit.

  • # tes infos datent de 2010...

    Posté par  . Évalué à 2.

    depuis on a fait du progres…
    la preuve vstmod n'est pas dans les modules chargés (la preuve le rmmod ne fonctionne pas).

    2 possibilités alors :
    - vstmod est inclu en dur dans le noyau => tu devras alors recompiler le noyau en supprimant le vstmod
    - vstmod n'est pas dans le noyau, et pas en module => ton probleme vient d'ailleurs.

    apparemment le fournisseur fournit plusieurs logiciels et drivers, certains commencent à dater (2011), d'autres sont plus recents (7 mai 2015)
    http://oceanoptics.com/support/software-downloads/

    tu as pris quoi ?
    il dit quoi le support de OceanOptics ?

    • [^] # Re: tes infos datent de 2010...

      Posté par  . Évalué à 1.

      Merci pour ta réponse. J'ai pris SeaBreeze sur ce lien la : SeaBreeze

      Je n'ai pas pris le temps de regarder le support pour le moment

      • [^] # Re: tes infos datent de 2010...

        Posté par  . Évalué à 2.

        et ca plante à quel moment ?
        parce que seabreeze à priori, ce n'est que le "driver" que tu vas ensuite venir interroger avec ton logiciel pour piloter le spectrographe/metre.

        • [^] # Re: tes infos datent de 2010...

          Posté par  . Évalué à 1.

          En fait je lance le protocole d'acquisition classique pour récupérer deux tableaux.

          Un tableau concernant les nanomètres
          Un tableau concernant les intensités
          Tous deux de taille 3648 pour le matériel USB4000

          Lorsque je fait un printf du tableau de nanomètre, j'obtiens des valeurs incompréhensible! Mon professeur m'a dit que c'était peut être du à une incompatibilité avec le driver USB sous Linux (ou alors vstmod). Je ne sais pas …

          • [^] # Re: tes infos datent de 2010...

            Posté par  . Évalué à 3.

            il faut revoir le protocole de test.

            tu compiles le driver, donc pour verifier que le driver fonctionne, il faut :
            - soit utiliser un programme que tu sais fonctionner sur une autre machine et l'utiliser sur la machine ou tu testes le driver
            - soit faire le programme le plus basic possible,

            • [^] # Re: tes infos datent de 2010...

              Posté par  . Évalué à 1.

              il faut revoir le protocole de test.

              Qu'entends-tu par protocole de test?

              tu compiles le driver

              Tu parles de SeaBreeze?

              • soit utiliser un programme que tu sais fonctionner sur une autre machine et l'utiliser sur la machine ou tu testes le driver
              • soit faire le programme le plus basic possible,

              J'ai pas très bien saisi ce que tu voulais dire!


              Ce que je peux assurer c'est que SeaBreeze fonctionne avec un matériel mais pas avec l'USB4000 de leur gamme sous Linux.

              • [^] # Re: tes infos datent de 2010...

                Posté par  . Évalué à 3.

                SeaBreeze, c'est un driver, sur lequel vient s'appuyer un logiciel pour communiquer avec ton materiel.
                tu as un bug et tu ne sais pas pointer ou il se trouve,

                il te faut donc une procedure de test :
                1°) un materiel qui marche (par exemple sous windows)
                2°) un jeu de test pour comparer les resultats entre ceux de windows et ceux de linux
                3°) le meme programme sur 2 linux differents pour voir si ca marche sur l'un et pas sur l'autre…

                à tout hasard, ca marche avec certains equipements, mais pas avec USB4000.
                t'aurais pas compiler seabreeze 32bits, pour l'utiliser sur une machine 64bits ?

                c'est quoi l'erreur exactement ?
                le support de seabreeze te dit quoi ?

                • [^] # Re: tes infos datent de 2010...

                  Posté par  . Évalué à 1.

                  Je l'ai compilé sur une machine 64 bits.

                  L'erreur, il n'y en a pas. Enfin, je sais juste observer que les valeurs que je récupère ne sont pas les bonnes. Après je n'ai pas regardé plus loins encore à ce niveau la.

                  En ce moment je suis bloqué pour faire du multithread avec mon logiciel d'ailleurs! Mais ça c'est une autre histoire

                  • [^] # Re: tes infos datent de 2010...

                    Posté par  . Évalué à 1.

                    Je vais tester les manips que tu me dis dès que j'ai du temps pour ça.

                    Le blacklister ne servirait à rien alors visiblement !

                  • [^] # Re: tes infos datent de 2010...

                    Posté par  . Évalué à 2.

                    je suis bloqué pour faire du multithread avec mon logiciel d'ailleurs!

                    tu utilises donc ton propre code pour dialoguer avec l'appareil,
                    si tu utilises un logiciel fournit par le fournisseur oceanoptics,
                    tu as aussi le "bug" sur l "USB400", ou bien tu as ces erreurs de données uniquement avec ton logiciel ?

                    • [^] # Re: tes infos datent de 2010...

                      Posté par  . Évalué à 1.

                      je suis bloqué pour faire du multithread avec mon logiciel d'ailleurs!

                      Je voulais dire par la que je suis entrain de développer la communication un thread pour ça et un pour la gestion de l'interface graphique.

                      tu utilises donc ton propre code pour dialoguer avec l'appareil

                      Non, j'utilise les fonctions C++ de SeaBreeze pour dialoguer avec l'appareil.

                      si tu utilises un logiciel fournit par le fournisseur oceanoptics,
                      tu as aussi le "bug" sur l "USB400", ou bien tu as ces erreurs de données uniquement avec ton logiciel ?

                      Si j'utilise un logiciel de chez eux on aurait pas ce problème car ils doivent utiliser Omnidriver avec Mcirosoft Visual Basic et Omnidriver n'est compatible uniquement avec le compilateur C++ MSVC. J'utilise SeaBreeze pour développer mon logiciel sous QtCreator.

                      • [^] # Re: tes infos datent de 2010...

                        Posté par  . Évalué à 2.

                        pourtant ici, il est dit qu'omnidriver est dispo sous linux
                        http://oceanoptics.com/support/software-downloads/

                        ca pourrait donc etre un bon point de depart pour verifier si c'est ton implemntation ou le "pilote" qui deconne, non ?

                        • [^] # Re: tes infos datent de 2010...

                          Posté par  . Évalué à 1.

                          Il est dispo seulement pour la compilation gcc mais non avec g++ sous QtCreator.

                          J'ai déjà testé hors QtCreator avec Omnidriver. Ca fonctionne

                          • [^] # Re: tes infos datent de 2010...

                            Posté par  . Évalué à 3.

                            alors il faut peut-etre un peu de lecture, car tu peux tres bien utiliser une librairie C dans un programme C++
                            et ce ne serait donc pas un probleme d'utiliser omnidriver dans ton projet.

                            https://isocpp.org/wiki/faq/mixing-c-and-cpp
                            http://www.cplusplus.com/forum/general/13700/

                            • [^] # Re: tes infos datent de 2010...

                              Posté par  . Évalué à 1.

                              Je veux bien faire ça mais pour la suite j'aimerais mettre mon code dans un système embarqué. SeaBreeze est apparemment fait pour ça. Et vu que SeaBreeze fonctionne aussi pour créer mon logiciel, je me dis que ça pourrais être bien de m'en servir pour le logiciel et pour le système embarqué.

                              • [^] # Re: tes infos datent de 2010...

                                Posté par  . Évalué à 1.

                                Si j'utilise le code C, je n'utiliserais pas la notion d'objet dans ce cas la.
                                Je retournerais juste les deux tableaux de double.
                                C'est ca aussi que j'appréhende un peu

                                • [^] # Re: tes infos datent de 2010...

                                  Posté par  . Évalué à 1.

                                  Pour Omnidriver, voici ce qui est dit :

                                  If you are developing with Microsoft Visual Studio, you may use any of these interface methods.
                                  However, if you are developing with any other IDE (e.g., Borland C++ Builder), you may only use the C
                                  and COM interfaces. This is because there is no standard for how C++ name mangling is performed, and
                                  the OmniDriver C++ interface was developed using Microsoft Visual Studio. Using the C++ interface
                                  with an IDE other than Visual Studio results in many "undefined symbol" errors.

                                  Peut être qu'on peut passer par du C sous le compilateur C++ de Qt qui est une surcouche de C++.

                                  • [^] # Re: tes infos datent de 2010...

                                    Posté par  . Évalué à 2.

                                    en gros ils recommandent de n'utiliser que les fonctions C et COM si tu developpes avec autre chose que Microsoft Visual Studio.

                                    ils ne disent pas que ce n'est pas possible, juste que cela peut donner des resultats inattendus à la compilation (undefined symbol)

                                    mais ca veut aussi dire que tu peux utiliser omnidriver pour ton projet en C++, avec les techniques listées dans les liens precedemment proposées.

                                    • [^] # Re: tes infos datent de 2010...

                                      Posté par  . Évalué à 1.

                                      Pour le moment j'essai de charger les librairies dans mon projet QtCreator et lorsque je compile avec MSVC voici ce que j'obtiens :

                                      error: LNK1181: impossible d'ouvrir le fichier en entrée 'OmniDriver64.lib'

                                      • [^] # Re: tes infos datent de 2010...

                                        Posté par  . Évalué à 1.

                                        Maintenant j'arrive à compiler avec un compilateur MSVC 32 bits sous windows et les libs en 32 bits.

                                        Le souci c'est que mon programme plante lorsque je fais une acquisition ^

                                        • [^] # Re: tes infos datent de 2010...

                                          Posté par  . Évalué à 1. Dernière modification le 02 juin 2015 à 20:34.

                                          Je fais appel à une librairie qui se sert de machine virtuelle JAVA (du JDK).

                                          En mode Debug j'ai cette erreur de compilation :

                                          The inferior stopped because it triggered an exception.
                                          Stopped in thread 0 by: Exception at 0x75cac42d, code: 0xc06d007e: , flags=0x0.

                                          • [^] # Re: tes infos datent de 2010...

                                            Posté par  . Évalué à 2.

                                            Je fais appel à une librairie qui se sert de machine virtuelle JAVA (du JDK).

                                            ah oui, gros projet alors,
                                            tu melange du C, du C++, du QT et du Java ?

                                            • [^] # Re: tes infos datent de 2010...

                                              Posté par  . Évalué à 1. Dernière modification le 02 juin 2015 à 21:48.

                                              du C oui et du C++ (QT) et du Java pour la communication avec l'appareil.

                                              C'est à cette ligne de code que ça plante :
                                              wrapperHandle = Wrapper_Create(); //ERREUR ICI

                                              Avec ceci avant la ligne qui bug :
                                              WRAPPER_T wrapperHandle;

                                              Ca plante avant d'ouvrir une connection !!


                                              Je devrais surement mettre les .dll, .lib et .jar dans mon dossier de projet aussi. Je vais faire le test

                                              • [^] # Re: tes infos datent de 2010...

                                                Posté par  . Évalué à 2.

                                                et du Java pour la communication avec l'appareil.

                                                pourquoi ?
                                                tu as omnidriver ou seabreeze pour la communication avec l'appareil,
                                                pourquoi tu passes par du java ?

                                                • [^] # Re: tes infos datent de 2010...

                                                  Posté par  . Évalué à 1.

                                                  J'utilise Omnidriver.

                                                  C'est comme ça que le pack a été construit visiblement!

                                                  Mais vu que le projet date de 2010 omme tu dis, je vais déjà tester la compilation avec MSVC2012.
                                                  Si c'est pas avec MSVC2010 ou antérieur que le projet a été compilé!

                                                  Je ne sais pas si des versions antérieurs de MSVC posent problème

                                                  • [^] # Re: tes infos datent de 2010...

                                                    Posté par  . Évalué à 2.

                                                    J'utilise Omnidriver.
                                                    C'est comme ça que le pack a été construit visiblement!
                                                    Mais vu que le projet date de 2010 omme tu dis, je vais déjà tester la compilation avec MSVC2012.

                                                    sauf que omnidriver 2.38 date de mai 2015

                                                    t'as été lire le document ?
                                                    http://oceanoptics.com/wp-content/uploads/OmniDriver_Programming_Manual.pdf

                                                    principalement la page 54 pour la mise en place de l'environnement linux/netbeans

                                                    ainsi que la documentation des APIs
                                                    http://oceanoptics.com/api/omnidriver/index.html

                                                    • [^] # Re: tes infos datent de 2010...

                                                      Posté par  . Évalué à 1.

                                                      Oui j'ai été le lire il y a un petit peu de temps maintenant. Mais ils ne disent rien à propos de l'IDE QtCreator. Sous Linux j'arrive à compiler avec G++ Omnidriver mais pas sous Windows avec MSVC2013 64 bits, avec MSVC2013 32 bits oui mais au moment de lancer le code pour l'acquisition, la première ligne me fait planter le programme.

                                                      La page 54/134 (ds pdfReader) ou page 54 de la doc?

                                                      Oui j'ai lu aussi

                                                      • [^] # Re: tes infos datent de 2010...

                                                        Posté par  . Évalué à 1. Dernière modification le 03 juin 2015 à 13:25.

                                                        Environnement de compilation :
                                                        OS : Windows 7 64bits
                                                        Omnidriver_SPAM : 64 bits
                                                        JDK : 64 bits version 1.8.0_45 (jni.h & jni_md.h) -> normalement avec Omnidriver, le jdk n’a pas besoin d’être installé. On a juste besoin de récupérer les deux headers.
                                                        QtCreator : 3.3.0
                                                        Driver USB : WinUSB

                                                        Compilateur :
                                                        Qt 5.4.0
                                                        MSVC 2013
                                                        32bits

                                                        Que faire si une seule ligne en C ou C++ de la lib Omnidriver exécuté une fois l'interface lancé fait planter le programme !! Le problème pourrait venir de quoi?

                                                        • [^] # Re: tes infos datent de 2010...

                                                          Posté par  . Évalué à 2.

                                                          Que faire si une seule ligne en C ou C++ de la lib Omnidriver exécuté une fois l'interface lancé fait planter le programme !! Le problème pourrait venir de quoi?

                                                          contacter le developpeur ? (oceanoptics)

                                                          • [^] # Re: tes infos datent de 2010...

                                                            Posté par  . Évalué à 1. Dernière modification le 03 juin 2015 à 15:33.

                                                            J'ai réussi à régler le problème!!

                                                            Enfin, j'arrive à compiler mon projet avec :
                                                            -lib OmniDriver64
                                                            -lib common64

                                                            Avec le compilateur MSVC 64 bits. (mode debug et release). J'arrive à lancer le programme avec les dll qui vont bien depuis le dossier. C'est encore du déploiement local. Comment faire pour déployer sur d'autres PC?

                                                            Je me pose la question. Est-ce que si je déploie le projet sur :
                                                            -windows 7 32 bits alors que j'ai compilé en 64 bits avec les libs 64 bits ça fonctionnerait?

                                                            -sous windows Xp ou autres …

                                                            • [^] # Re: tes infos datent de 2010...

                                                              Posté par  . Évalué à 2.

                                                              hm, tu compiles un projet, utilisant des DLLs, avec Microsoft Visual C++
                                                              et tu pose la question sur LINUXfr

                                                              enfin admettons.

                                                              si tu as compilé des dlls cela ne fonctionnera que sous windows
                                                              si tu as compilé en 64bits, cela ne fonctionnera que sur les OS 64bits
                                                              donc dans ton cas, ca ne fonctionnera que sous windows 64bits.

                                                              comment deployer sur d'autres machines ?
                                                              plusieurs solutions :
                                                              1°) le copier/coller du projet, sans les sources (donc le binaire et les dlls)
                                                              2°) le fichier zip, qui contient les binaires et les dlls pour un lancement sans installation
                                                              3°) le setup.exe qui va aller ranger les binaires et dlls dans les bons dossiers, creer un raccourci sur le bureau, etc

                                                              • [^] # Re: tes infos datent de 2010...

                                                                Posté par  . Évalué à 1.

                                                                Je change mon fusil d'épaule. J'arrive Maintenant à compiler la lib Omnidriver 32bit avec le compilateur Qt 5.4.0 MinGW 32bit sous OS windows 7 64bit.

                                                                Ça c'est déjà très bien. Maintenant j'aimerais savoir si il est possible avec ce binaire 32bit (compilé par Qt 5.4.0 MinGW 32bit) d'obtenir les compatibilités suivantes :
                                                                -Windows 8 32bit & 64bit
                                                                -Windows 7 64bit -> testé sur mon PC donc ca devrait être bon
                                                                -Windows Vista 32bit & 64bit
                                                                -Windows Xp 32bit & 64bit
                                                                -…

                                                                La grande question que je me pose aussi c'est est-ce que je peux être compatible windows en compilant avec MinGW et quelle est la différence notable entre MSVC & MinGW?

                                                                Concernant le déploiement sous windows, c'est encore une histoire de DLL. Merci pour ta réponse. Je n'ai pas creusé de ce côté-ci !

                                                                • [^] # Re: tes infos datent de 2010...

                                                                  Posté par  . Évalué à 2.

                                                                  il me semble que windows permet l'execution d'un binaire 32bits dans un os 64bits,
                                                                  mais plus que la theorie, il vaut quand meme mieux faire les tests pour confirmer cela.

                                                                  pour la difference entre MSVC et MinGW,
                                                                  ben le premier provient de microsoft et utilise le compilateur de ce dernier,
                                                                  le deuxieme utilise les outils libres comme GCC/G++, etc

                                                                  • [^] # Re: tes infos datent de 2010...

                                                                    Posté par  . Évalué à 1.

                                                                    J'essai de voir pour obtenir un compilateur MSVC avec ce que j'ai de disponible sous la main.

                                                                    Si avec MinGW on est pas sur de pouvoir le faire fonctionner sur toutes les platformes …

                                                                    En tout cas merci pour ton suivi

                                                                    • [^] # Re: tes infos datent de 2010...

                                                                      Posté par  . Évalué à 2.

                                                                      Si avec MinGW on est pas sur de pouvoir le faire fonctionner sur toutes les platformes …

                                                                      de toute facon, si tu appelles des DLLs, ca ne fonctionnera que sous windows,
                                                                      si tu veux que cela fonctionne aussi sous linux, osx, etc
                                                                      il faut prevoir des libs specifiques pour chaque OS et les fournir avec les variantes de l'executable.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.