I2C SPI USB CAN eSPI Cable Testing View All Videos Quick Start Guides Software Downloads App Notes White Papers User Manuals Knowledge Base Sales Support About Us
Products Blog Sales Support Contact Search
libusb compatibility on Linux
libusb compatibility on Linux

Contents

Problem

Customers have reported problems running Total Phase applications (including Control Center, Data Center, Cheetah GUI, and Flash Center) on some Linux distributions, including Arch Linux, OpenSUSE 11.2, and Ubuntu. Attempting to connect to a Total Phase device causes a communication error or an "unable to load driver" error to occur and the software is not able to connect to the device.

Background

The Total Phase shared libraries (aardvark.so, beagle.so, and cheetah.so) dynamically link against the system libusb library at runtime. These libraries are designed to work with libusb-0.1.12. A newer version of libusb has been created (v1.0) which is not compatible with v0.1. To have backwards compatibility between the two API versions, a compatibility layer called libusb-compat-0.1 is available. However, customers have had issues with this compatibility library which can prevent Total Phase products from operating properly.

Customers have also had driver loading issues on 64-bit distributions when the libusb-0.1 library is in /lib32 instead of /lib.

Solutions

Solution for compatibility issues

Uninstall libusb-compat-0.1 and install the 32-bit version of libusb-0.1.12. It is acceptable to have both libusb-1.0 and libusb-0.1 installed side-by-side.

The Total Phase libraries use an environment variable to allow the user to specify which libusb library they want loaded when using our tools. Use this environment variable to point to the libusb-0.1 library. For example, assuming libusb-0.1 has been installed in /libusb, setting LIBUSBTP as follows will instruct the Total Phase shared library to use this version of libusb instead of the system's libusb-1.0:

% export LIBUSBTP=/libusb/libusb-0.1.so.4

Solution for libusb location issues

By default, some Total Phase applications look in /lib to find the 32-bit version of libusb-0.1, but some Linux distributions put this library in /lib32. Use the LIBUSBTP environment variable to point to the 32-bit libusb library.

% export LIBUSBTP=/lib32/libusb.so