Augmenter la productivité Atelier electronique mobile
jan 05

Suite à mes tests avec les AVR d’ATMEL et l’implémentation logicielle USB, j’ai testé l’interface avec la plateforme hardware via un script python s’appuyant sur le module python usbtiny fourni avec l’implémentation logicielle USB.

Un problème qui me bloque actuellement est l’utilisation de cette interface de communication sous Mac OS X.

J’ai installé la libusb (téléchargée depuis un projet développé pour utiliser des scanners sous Mac OS X). Les fichiers installés semblent se trouver dans  /usr/local/lib, /usr/local/include. Dans la version linux, le wrapper utilisé pour communiquer entre le module python et la libusb avait été généré automatiquement par Swig. Le fichier libusb.py généré contient la ligne “import _libusb” qui doit faire référence au fichier _libusb.so dont le type ne correspond pas à une librairie sous Mac OS X :

ImportError: dlopen(./_libusb.so, 2): no suitable image found.  Did find:
./_libusb.so: unknown file type, first eight bytes: 0×7F 0×45 0×4C 0×46

Une piste qui explique comment générer un wrapper avec Swig sous Mac OS X (et les différences avec la génération du wrapper sous Linux).

Suite au prochain épisode…

written by Mathias

6 Responses to “Utilisation de libusb”

  1. Mathias Says:

    Je continue mes investigations sur python/swig/libusb (et pyusb au cas où je n’arriverais pas à recréer un wrapper vers la libusb via swig…)
    Peut être une piste :
    >>> from ctypes import *
    >>> cdll.LoadLibrary(”/usr/local/lib/libusb.dylib”)

    >>>

    Reste à étudier l’API de libusb pour voir quelles méthodes sont dispo… ou simplement voir dans le modules libusb.py généré par swig sous Linux quelles méthodes de la libusb sont générées (ou encore mieux, adapter le fichier généré par swig…)

  2. Mathias Says:

    Essais de regénération de libusb.py via swig sur Mac OS (Snow Leopard).
    cf http://www.penzilla.net/tutorials/python/swig/ mais la ligne ld ne fonctionne pas.
    Je fais des tests avec l’exemple téléchargeable en bas de page et même souci avec la ligne du ld.
    Après quelques recherches, je tombe sur http://lists.tartarus.org/pipermail/xapian-devel/2005-August/000231.html et à tout hasard, j’essaie:
    gcc -I/usr/local/include/python2.6 -I/usr/local/include/ -I/usr/lib/python2.6 -undefined dynamic_lookup example.o example_wrap.o -o _example.so qui me génère bien un _example.so mais lorsque j’essaie d’utiliser ce fichier, j’obtiens:
    >>> import example
    Traceback (most recent call last):
    File ““, line 1, in
    File “example.py”, line 7, in

    import _example
    ImportError: dlopen(./_example.so, 2): no suitable image found. Did find:
    ./_example.so: mach-o, but wrong architecture
    qui semble révéler un conflits entre architectures 32 et 64 bits…

    Même problème avec:
    gcc -I/usr/local/include/python2.6 -I/usr/local/include/ -I/usr/lib/python2.6 -undefined dynamic_lookup -arch x86_64 example.o example_wrap.o -o _example.so

    Recompilation des fichiers avec -arch i386
    >>> import example
    Traceback (most recent call last):
    File ““, line 1, in
    File “example.py”, line 7, in

    import _example
    ImportError: dlopen(./_example.so, 2): no suitable image found. Did find:
    ./_example.so: can’t map
    >>>

  3. Mathias Says:

    Suite :

    ld -bundle -flat_namespace -undefined suppress -ldylib1.o -o _example.so example.o example_wrap.o

    >>> import example
    >>> print example.cube(3)
    27
    >>>

  4. Mathias Says:

    En essayant de reproduire la même démarche (en adaptant le Makefile) avec la libusb, j’obtiens l’erreur suivante:
    >>> import libusb
    Traceback (most recent call last):
    File ““, line 1, in
    File “libusb.py”, line 7, in

    import _libusb
    ImportError: dlopen(./_libusb.so, 2): Symbol not found: _usb_busses
    Referenced from: /Users/rene/Desktop/usbtiny-1.4/util/_libusb.so
    Expected in: flat namespace

    >>>

  5. Mathias Says:

    google -> http://www.developpez.net/forums/d62929/autres-langages/python-zope/interfacage-langage/swig-utilisation-ld-sous-mac-osx-tiger/

    donc test:
    gcc -I/usr/include/python2.6 -I/usr/local/include -I/usr/lib/python2.6 -framework Python -bundle -Wcast-qual -fno-common -undefined dynamic_lookup -arch i386 -m32 -c libusb_wrap.c -o _libusb.so

    >>> import libusb
    Traceback (most recent call last):
    File ““, line 1, in
    File “libusb.py”, line 7, in

    import _libusb
    ImportError: dlopen(./_libusb.so, 2): no suitable image found. Did find:
    ./_libusb.so: can’t map

    Fail…

  6. Mathias Says:

    Libusb & ctypes: http://stackoverflow.com/questions/1052135/some-help-understanding-async-usb-operations-with-libusb-1-0-and-ctypes

Leave a Reply

You must be logged in to post a comment.