You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
11 KiB
320 lines
11 KiB
INSTALLATION OVERVIEW |
|
===================== |
|
|
|
Once libmtp is built and installed, you will have the following files |
|
($PREFIX is the --prefix option given to the "configure" script and |
|
defaults to /usr/local/): |
|
|
|
$PREFIX/lib/libmtp.a Static C library |
|
$PREFIX/lib/libmtp.so.x.y.z Dynamic C library |
|
$PREFIX/lib/libmtp.so.x A link to the library |
|
$PREFIX/lib/libmtp.so A link to the library |
|
$PREFIX/include/libmtp.h C header file for libmtp API |
|
$PREFIX/lib/pkgconfig/libmtp.pc pkg-config configuration file |
|
|
|
Sample programs will be built in the "example" directory, and should |
|
help you get used to using the libmtp API, as well as provide some |
|
immediate gratification. Links to other programs using the libmtp |
|
API may be found at the homepage: http://libmtp.sourceforge.net/ |
|
|
|
|
|
Install From Distribution |
|
------------------------- |
|
|
|
You should probably prefer to install libmtp from the distribution |
|
source you're using. Last time we checked, libmtp was part of Ubuntu, |
|
Fedora, OpenSUSE, Debian testing, Gentoo, FreeBSD ports and OpenBSD |
|
packages/ports. |
|
|
|
|
|
Dependencies |
|
------------ |
|
|
|
To build libmtp you should only need development files for libusb. |
|
(Often named libusb-devel or similar.) For working with CVS versions |
|
you may need autoconf, automake, libtool, gettext(-devel). |
|
|
|
To enable the optional MTPZ support using libgcrypt you need the |
|
libgcrypt library installed as well. |
|
|
|
|
|
Shared Library Support |
|
---------------------- |
|
|
|
Shared library linking is supported. You will need to 'make install' |
|
the library before you can execute the sample binaries, and add the |
|
libmtp install directory to your shared library search path. |
|
|
|
On Linux, you would add the line "/usr/local/lib" to your |
|
"/etc/ld.so.conf" or as a oneliner in for example a |
|
"/etc/ld.so.conf.d/local.conf" file and run the |
|
program "ldconfig" to scan in the shared libraries at |
|
the new path. This is a part of the Linux shared library |
|
loader actually. |
|
|
|
To access the library from real odd locations you can use |
|
the LD_LIBRARY_PATH environment variable by setting it before |
|
you run your program, for example: |
|
|
|
% export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib |
|
% my_program |
|
|
|
To check whether you need to do something this: |
|
|
|
% ldd /usr/lib/rhytmbox/plugins/mtpdevice/libmtpdevice.so | grep mtp |
|
% ldd /usr/bin/gnomad2 | grep mtp |
|
|
|
If the program is linking to a packaged version of libmtp |
|
it will likely say something like this: |
|
|
|
libmtp.so.N => /usr/lib/libmtp.so.N (0xb4e4b000) |
|
|
|
In this case you may have your freshly compiled library in |
|
/usr/local/lib or something like that, and you need to do the |
|
LD_LIBRARY_PATH trick. Verify by using "ldd" again. |
|
|
|
This way of enabling the library to link is a workaround hack. |
|
Note that the LD_LIBRARY_PATH is actually supposed to be used for |
|
testing, not production systems or distributions. It is commonly |
|
used as a workaround when a user is installing libraries in her/his |
|
home directory however. Read more about this environment variable |
|
here: http://www.visi.com/~barr/ldpath.html |
|
|
|
The shared library comes with different interface version numbers, |
|
for example libmtp.so.4, libmtp.so.5 and so forth. This is used so |
|
that both old and new libmtp libraries shall be able to coexist on |
|
the same system. When you compile your programs they will typically |
|
bind to the latest version of the shared library. A link to the |
|
latest version is always provided as $PREFIX/lib/libmtp.so. |
|
|
|
libusb support |
|
-------------- |
|
|
|
This package depends on libusb. Get libusb from sourceforge at: |
|
|
|
http://www.sourceforge.net/projects/libusb/ |
|
|
|
libusb 1.0 and later is preferred for libmtp, but currently also |
|
older 0.1.x versions of libusb are supported. |
|
|
|
|
|
libgcrypt support |
|
----------------- |
|
|
|
The MTPZ extension to libmtp requires libgcrypt to be installed. |
|
|
|
http://www.gnu.org/software/libgcrypt/ |
|
|
|
MTPZ support will not be built unless the configure script finds |
|
libgcrypt. |
|
|
|
|
|
BASIC BUILD PROCEDURE |
|
===================== |
|
|
|
To build the package: |
|
|
|
% ./configure |
|
% make |
|
% make install |
|
|
|
By default, libmtp will add the program-prefix "mtp-" to all the |
|
example programs prior to installation. The program-prefix option |
|
makes libmtp sample programs avoid collision with other programs like |
|
sox' "play" program. If the default prefix for some reason fail, |
|
try to tag on "--program-prefix=mtp-" to the "configure" command. |
|
|
|
The "libexedir" in the configure file is hardcoded to /lib/udev to |
|
make the mtp-probe (which is built for Linux only) install into |
|
that directory. This is the only location that makes sens for this |
|
executable. |
|
|
|
if you want to install the documentation type: |
|
|
|
% make install-docs |
|
|
|
if you checked out the sources from CVS, you must first run the |
|
autogen.sh script that generates all the GNU autotools files. |
|
Notice that this requires GNU autoconf, automake and libtool and |
|
possibly some other packages like gettext, readline, intltool and |
|
other M4 macro sources. This is done with: |
|
|
|
% ./autogen.sh |
|
|
|
|
|
Linux hotplugging |
|
----------------- |
|
|
|
After compilation and installation you may (and should) add hotplugging |
|
support by running the hotplug script, if your distribution supports |
|
hotplugging (all do). This typically means you have something |
|
in /etc/hotplug and that hotplugging is started when you boot your |
|
machine in a script named /etc/init.d/hotplug or similar. |
|
|
|
Activate hotplugging by running: |
|
|
|
%./hotplug.sh |
|
|
|
Hotplug will (typically) use the device map file installed by hotplug.sh |
|
at /etc/hotplug/usb/libmtp.usermap to lift the device to userspace for the |
|
current user by running the script /etc/hotplug/usb/libmtp.sh. If |
|
you have the program "resmgr" installed (currently used only by SuSE to |
|
our knowledge) that program will be used for enabling desktop user |
|
access, otherwise the current user of the desktop will be determined |
|
from files in /var/run. (See the script "libmtp.sh" for details.) |
|
|
|
|
|
Linux udev hotplugging |
|
---------------------- |
|
|
|
Newer Linux distributions have dropped support for the old hotplug system |
|
and rely solely on udev, and rules stored below /etc/udev/rules.d to |
|
handle permissions and actions on device connections. It's quite solid |
|
but the whole thing is rather shaky when it comes to such things as |
|
custom devices handled solely by libusb, which is what libmtp and for |
|
example SANE backends use. |
|
|
|
The libmtp.rules file that comes with libmtp can be used as a starter. |
|
|
|
This will set the environment variables ID_MEDIA_PLAYER and |
|
ID_MTP_DEVICE to "1" and the former one will be recognized by the |
|
scripts distributed by recent versions of udev to be a |
|
console-writable device that should be accessible for all |
|
users. |
|
|
|
Ancient udev, HAL, libusb |
|
------------------------- |
|
|
|
The old script for udev used to set the device access to "666" |
|
which is rather nasty (not that big security issue, unless you |
|
think someone will break into your jukebox) some systems used |
|
to let PAM do this by placing a configuration file in |
|
/etc/security/ somewhere. Then it was replaced with simple |
|
udev rules. |
|
|
|
At one point HAL was used to take devices detected by udev and |
|
signal to userspace that they were available and provide some |
|
information about them. This was unnecessary middleware, it has |
|
been killed and most userspace applications now get their |
|
information directly from udev instead. |
|
|
|
In old libusb first you need a crazy rule that creates a device |
|
node in the /dev/bus/usb hierarchy whenever any USB device is |
|
connected. The script has this at the top, you can comment it |
|
in if your distribution does not already create these device |
|
nodes. |
|
|
|
Then libusb may need to be patched to recognize this hierarchy. |
|
The 0.1.12 version is the first which is properly fixed. |
|
|
|
|
|
|
|
If you cannot run hotplugging |
|
----------------------------- |
|
|
|
If you have a distro without hotplugging enabled try this as root: |
|
|
|
% chmod -R a+w /dev/bus/usb |
|
|
|
Or if it's *really* ancient you could try: |
|
|
|
% chmod -R a+w /proc/bus/usb |
|
|
|
You have to do this again every time you unplug/replug your USB cable |
|
or restart the jukebox, every time you quit libnjb and restart it, |
|
etc etc etc an alternative is to run libmtp as root which works just fine. |
|
The problem is to somehow assure that you (ie the current user) always |
|
has write access to these files. |
|
|
|
You can find the Linux hotplug project at: |
|
http://linux-hotplug.sourceforge.net/ |
|
|
|
|
|
Compilation for embedded devices |
|
-------------------------------- |
|
|
|
Problems with Autoconf complaining about a missing malloc() function |
|
during cross-compilation can be solved with this hack if you're using |
|
glibc: |
|
|
|
% export ac_cv_func_malloc_0_nonnull=yes |
|
% ./configure |
|
|
|
If you're using uclibc you may have to smack in a custom rpl_malloc() |
|
function in your program, see the Autoconf texinfo documentation. |
|
|
|
See further: |
|
http://wiki.buici.com/wiki/Autoconf_and_RPL_MALLOC |
|
|
|
Compilation for Solaris/SunOS |
|
----------------------------- |
|
|
|
libmtp builds on Solaris/SunOS with either gcc or SunStudio 12. It does |
|
require GNU Make (aka gmake) to be installed. Building libmtp on Solaris |
|
10 and Solaris 11 differ slightly, so alternate instructions are provided |
|
for each Solaris version. |
|
|
|
For Solaris 10 |
|
-------------- |
|
|
|
To build using GCC: |
|
|
|
% CFLAGS="I/usr/sfw/lib -L/usr/sfw/lib -R/usr/sfw/lib" MAKE=gmake \ |
|
INSTALL=/usr/ucb/install ./configure |
|
% gmake |
|
% gmake install |
|
|
|
Custom CLFAGS are required for libusb.so as it lives in /usr/sfw/lib, |
|
and this path is not in the default search path for ld. If these |
|
CFLAGS are not set, several components of ./configure will fail leading |
|
to a failed build. |
|
|
|
To build using SunStudio 12: |
|
|
|
% CFLAGS="I/usr/sfw/lib -L/usr/sfw/lib -R/usr/sfw/lib" MAKE=gmake \ |
|
INSTALL=/usr/ucb/install CC=cc ./configure |
|
% gmake |
|
% gmake install |
|
|
|
|
|
General Notes: |
|
All MTP devices on Solaris 10u2+ are driven by the usb_mid driver, which |
|
will automatically export ugen device interfaces with the correct device |
|
permissions. No special configuration is required. See the usb_mid(7D) |
|
and ugen(7D) manpages and /usr/sfw/share/doc/libusb/libusb.txt for |
|
more information. |
|
|
|
For Solaris 11 |
|
-------------- |
|
|
|
Building libmtp on Solaris 11 is very similar to those instructions for |
|
Solaris 10, however libusb now lives in /usr/lib, and openusb is also |
|
available as an alternative USB library. Oracle does not provide a |
|
libusb v1.0 API compatible version of libusb, instead providing the older |
|
v0.1 API interface version of libusb. As mentioned, Oracle also provides |
|
the OpenUSB USB library as an alternate to libusb v1.0, however OpenUSB is |
|
not source or binary compatible with libusb. |
|
|
|
Before building/installing libmtp there are some components missing from |
|
the base Solaris 11 installation, and are required to be installed prior |
|
to building/installing libmtp. The 'libusbugen' package must be installed |
|
before libusb itself is usable on Solaris 11, alternatively the 'openusb' |
|
package may be used. |
|
|
|
To build using GCC: |
|
% ./configure |
|
% gmake |
|
% sudo gmake install |
|
|
|
To build using SunStudio 12: |
|
% CC=cc ./configure |
|
% gmake |
|
% sudo gmake install |
|
|
|
|
|
General Notes: |
|
All MTP devices on Solaris 11+ are driven by the usb_mid driver, which |
|
will automatically export ugen device interfaces with the correct device |
|
permissions. No special configuration is required. See the usb_mid(7D) |
|
and ugen(7D) manpages and /usr/share/doc/libusb/libusb.txt for more |
|
information.
|
|
|