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…
6 Responses to “Utilisation de libusb”
Leave a Reply
You must be logged in to post a comment.
janvier 7th, 2010 at 10:34
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…)
janvier 7th, 2010 at 14:32
Essais de regénération de libusb.py via swig sur Mac OS (Snow Leopard).“, line 1, in
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 “
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“, line 1, in
>>> import example
Traceback (most recent call last):
File “
File “example.py”, line 7, in
import _example
ImportError: dlopen(./_example.so, 2): no suitable image found. Did find:
./_example.so: can’t map
>>>
janvier 7th, 2010 at 15:43
Suite :
ld -bundle -flat_namespace -undefined suppress -ldylib1.o -o _example.so example.o example_wrap.o
>>> import example
>>> print example.cube(3)
27
>>>
janvier 7th, 2010 at 16:06
En essayant de reproduire la même démarche (en adaptant le Makefile) avec la libusb, j’obtiens l’erreur suivante:“, line 1, in
>>> import libusb
Traceback (most recent call last):
File “
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
>>>
janvier 7th, 2010 at 16:37
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“, line 1, in
Traceback (most recent call last):
File “
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…
janvier 11th, 2010 at 15:15
Libusb & ctypes: http://stackoverflow.com/questions/1052135/some-help-understanding-async-usb-operations-with-libusb-1-0-and-ctypes