blob: 9020e8db46d9aeb8b8bf08b9f3491d79838dacc9 [file] [log] [blame]
Linus Walleij0dd71e92006-05-04 18:47:07 +00001Building and Installing
2-----------------------
Linus Walleij6fd2f082006-03-28 07:19:22 +00003
Linus Walleij0dd71e92006-05-04 18:47:07 +00004See the "INSTALL" file.
5
6
7Heritage
8--------
9
10libmtp is based on several ancestors:
11
12* libptp2 by Mariusz Woloszyn was the starting point used
13 by Richard A. Low for the initial starter port. You can
14 find it at http://libptp.sourceforge.net/
15
16* libgphoto2 by Mariusz Woloszyn and Marcus Meissner was
17 used at a later stage since it was (is) more actively
18 maintained. libmtp tracks the PTP implementation in
19 libgphoto2 and considers it an upstream project. We will
20 try to submit anything generally useful back to libgphoto2
21 and not make double efforts. In practice this means we
22 use ptp.c, ptp.h and ptp-pack.c verbatim from the libgphoto2
23 source code. If you need to change things in these files,
24 make sure it is so general that libgphoto2 will want to
25 merge it to their codebase too. You find libgphoto2 as part
26 of gPhoto: http://gphoto.sourceforge.net/
27
28* libnjb was a project that Richard and Linus were working
Linus Walleijfcf88912006-06-05 13:23:33 +000029 on before libmtp. When Linus took Richards initial port
Linus Walleij0dd71e92006-05-04 18:47:07 +000030 and made an generic C API he re-used the philosophy and
31 much code from libnjb. Many of the sample programs are for
32 example taken quite literally from libnjb. You find it here:
33 http://libnjb.sourceforge.net/
34
35
36Compiling programs for libmtp
37-----------------------------
38
39libmtp has support for the pkg-config script by adding a libmtp.pc
40entry in $(prefix)/lib/pkgconfig. To compile a libmtp program,
41"just" write:
42
43gcc -o foo `pkg-config --cflags --libs libmtp` foo.c
44
45This also simplifies compilation using autoconf and pkg-config: just
46write e.g.
47
48PKG_CHECK_MODULES(MTP, libmtp)
49AC_SUBST(MTP_CFLAGS)
50AC_SUBST(MTP_LIBS)
51
52To have libmtp LIBS and CFLAGS defined. Needless to say, this will
53only work if you have pkgconfig installed on your system, but most
54people have nowadays.
55
56If your library is installed in e.g. /usr/local you may have to tell
57this to pkgconfig by setting the PKG_CONFIG_PATH thus:
58
59export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
60
61
62Documentation
63-------------
64
65Read the API documentation that can be generated with doxygen.
66It will be output in doc/html if you have Doxygen properly
67installed. (It will not be created unless you have Doxygen!)
68
69For information about the Media Transfer Protocol, see:
70http://en.wikipedia.org/wiki/Media_Transfer_Protocol
71
72
73Contributing
74------------
75
76See the project page at http://libmtp.sourceforge.net/
Linus Walleijee73ef22006-08-27 19:56:00 +000077We always need your help. There is a mailinglist and a
78bug report system there.
Linus Walleij6fd2f082006-03-28 07:19:22 +000079
Linus Walleijfcf88912006-06-05 13:23:33 +000080If you happen upon a device which libmtp claims it cannot
81autodetect, please submit the vendor ID and device ID
82as a bug, patch or feature request on the Sourceforge
Linus Walleijda558be2007-03-10 21:42:25 +000083bug tracker at our homepage. If it gives a sensible
84output from "mtp-detect" then please attach the result as
85well as it teach us some stuff about your device.
86
87If your device is problematic we are curious of how it
88works under Windows, so we enjoy reading USB packet sniffs
89that reveal the low-level traffic carried out between
90Windows Media Player and your device. This can be done
91using the trial version of HHD Softwares software-only
92USB monitor. You need to get a copy of version 2.37 since
93the newer trial versions won't let you carry out the
94needed packet sniffs. (As of 2007-03-10 a copy can be found
95at: http://www.cobbleware.com/files/usb-monitor-237.exe)
96There are other USB monitors as well, some more expensive
97alternatives use hardware and even measure electronic
98characteristics of the traffic (which is far too much
99detail for us).
100
101If you want to poke around to see if your device has some
102special pecularities, you can test some special device
103flags (defined in src/libusb-glue.h) by inserting them
104together with your device entry in src/libusb-glue.c.
105Flags can be tested in isolation or catenated with "|"
106(binary OR). If relatives to your device use a certain
107flag, chances are high that a new device will need it
108too, typically from the same manufacturer.
Linus Walleijfcf88912006-06-05 13:23:33 +0000109
Linus Walleij6fd2f082006-03-28 07:19:22 +0000110
Linus Walleij15def332006-09-19 14:27:02 +0000111Calendar and contact support:
112-----------------------------
Linus Walleijd3bdf762006-02-20 22:21:56 +0000113
Linus Walleij3c16fe42006-04-30 07:53:41 +0000114The Creative Zen series can read VCALENDAR2 (.ics) files
Linus Walleij15def332006-09-19 14:27:02 +0000115and VCard (.vcf) files from programs like for example
116Evolution with the following limitations/conditions:
Linus Walleijd3bdf762006-02-20 22:21:56 +0000117
Linus Walleij3c16fe42006-04-30 07:53:41 +0000118- The file must be in DOS (CR/LF) format, use the unix2dos
119 program to convert if needed
Linus Walleij15def332006-09-19 14:27:02 +0000120
121- Repeat events in calendar files do not seem to be supported,
122 entries will only appear once.
123
124- Calendar (.ics) files should be stored in the folder "My Organizer"
125 when sent to the device (this directory should be autodetected
Linus Walleij80b2c722006-06-22 17:57:17 +0000126 for use with calendar files, otherwise use the option
Linus Walleij15def332006-09-19 14:27:02 +0000127 -f "My Organizer" to sendfile for this) Apparently this file can
128 also contain tasklists.
129
130- Contact (.vcf) files should be stored in the folder "My Contacts"
131 when sent to the device. (-f "My Contacts")
132
133- Some devices are picky about the name of the calendar and
134 contact files. For example the Zen Microphoto wants:
135
Linus Walleijb1318d12006-09-25 14:59:26 +0000136 Calendar: My Organizer/6651416.ics
137 Contacts: My Organizer/6651416.vcf
138
139
140Syncing in with Evolution and Creative Devices
141----------------------------------------------
142
143Evolution can easily export .ics an .vcf files, but you currently
144need some command-line hacking to get you stuff copied over in
145one direction host -> device. The examples/ directory contains a script
146created for the Creative Zen Microphoto by Nicolas Tetreault.
147
Linus Walleij6e8cef42006-12-03 20:45:04 +0000148
149It's Not Our Bug!
150-----------------
151
152Some MTP devices have strange pecularities. We try to work around
153these whenever we can, sometimes we cannot work around it or we
154cannot test your solution.
155
156* The Zen Vision:M (possibly more Creative Zens) has a firmware bug
157 that makes it drop the last two characters off a playlist name.
158 It is fixed in later firmware.
159
Linus Walleijc41f2e82007-03-12 22:26:00 +0000160* For Creative Technology devices, there are hard limits on how
161 many files can be put onto the device. For a 30 GiB device (like
162 the Zen Xtra) the limit is 6000, for a 60 GiB device the limit
163 is 15000 files. For further Creative pecularities, see the
164 FAQ sections at www.nomadness.net.
165
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000166* Sandisk sansa c150 and probably several other Sandisk devices
167 (and possibly devices from other manufacturers) have a dual
168 mode with MTP and USB mass storage. The device will initially
169 claim to be mass storage so udev will capture is and make the
Linus Walleijda558be2007-03-10 21:42:25 +0000170 use of MTP mode impossible. One way of avoiding it could be to
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000171 be to blacklist the "usb-storage" module in
172 /etc/modprobe.c/blacklist with a row like this:
Linus Walleijda558be2007-03-10 21:42:25 +0000173 "blacklist usb-storage". Some have even removed the
174 "usb-storage.ko" (kernel module file) to avoid loading.
Linus Walleijd24a7ab2007-03-07 21:48:43 +0000175
Linus Walleijda558be2007-03-10 21:42:25 +0000176* The iriver devices (possibly all of them) cannot handle the
Linus Walleij6e8cef42006-12-03 20:45:04 +0000177 enhanced GetObjectPropList MTP command (0x9805) properly. So
178 they have been banned from using it.
179
Linus Walleijda558be2007-03-10 21:42:25 +0000180* iriver devices have problems with older versions of libmtp and
Linus Walleij82265222007-03-04 19:47:08 +0000181 with new devices libmtp does not know of as of yet, since it
182 has an oldstyle USB device controller that cannot handle zero
Linus Walleijda558be2007-03-10 21:42:25 +0000183 writes. (Register your device with us!) All their devices are
184 likely to need a special device flag in the src/libusb-glue.c
185 database.
Linus Walleij82265222007-03-04 19:47:08 +0000186
Linus Walleij6e8cef42006-12-03 20:45:04 +0000187* The Samsung Yepp T9 has several strange characteristics, some
188 that we've managed to work around. (For example it will return
189 multiple PTP packages in a single transaction.)
190
Linus Walleijf2711b32007-02-26 20:18:40 +0000191* The early firmware for Philips HDD players is known to be
192 problematic. Please upgrade to as new firmware as you can get.
193 (Yes this requires some kind of Windows Installation I think.)
194
Linus Walleij6e8cef42006-12-03 20:45:04 +0000195* Very few devices that implement GetObjectPropList (0x9805) will
196 return the entire object list if you request a list for object
197 0xffffffffu. (But they should.) So we're currently not using
198 that feature.
Linus Walleijd132d8e2007-04-03 23:24:54 +0000199
200
201Lost symbols
202------------
203
204Shared libraries can be troublesome to users not experienced with
205them. The following is a condensed version of a generic question
206that has appeared on the libmtp mailing list from time to time.
207
208> PTP: Opening session
209> Queried Creative Zen Vision:M
210> gnomad2: relocation error: gnomad2: undefined symbol:
211> LIBMTP_Get_Storageinfo
212> (...)
213> Are these type of errors related to libmtp or something else?
214
215The problem is of a generic nature, and related to dynamic library
216loading. It is colloquially known as "dependency hell".
217(http://en.wikipedia.org/wiki/Dependency_hell)
218
219The gnomad2 application calls upon the dynamic linker in Linux to
220resolve the symbol "LIBMTP_Get_Storageinfo" or any other symbol
221(ELF symbol, or link point or whatever you want to call them, a
222symbol is a label on a memory address that the linker shall
223resolve from label to actual address.)
224For generic information on this subject see the INSTALL file and
225this Wikipedia page:
226
227http://en.wikipedia.org/wiki/Library_(computing)
228
229When Linux /lib/ld-linux.so.X is called to link the symbols compiled
230into gnomad2 (or any other executable using libmtp), it examines the
231ELF file for the libmtp.so.X file it finds first and cannot resolve
232the symbol "LIBMTP_Get_Storageinfo" (or whichever symbol you have a
233problem witj) from it, since it's probably not there. There are many
234possible causes of this symbol breakage:
235
2361) You installed precompiled libmtp and gnomad2 packages (RPMs, debs
237 whatever) that do not match up. Typical cause: your gnomad2 package was
238 built against a newer version of libmtp than what's installed on your
239 machine. Another typical cause: you installed a package you found on
240 the web, somewhere, the dependency resolution system did not protest
241 properly (as it should) or you forced it to install anyway, ignoring
242 some warnings.
243
2442) You compiled libmtp and/or gnomad2 from source, installing both or
245 either in /usr/local/lib and /usr/local/bin. This means at compile-time
246 gnomad2 finds the libmtp library in /usr/local/lib but at runtime, it
247 depends on the Linux system wide library loader (/lib/ld-linux.so.X) in
248 order to resolve the symbols. This loader will look into the file
249 /etc/ld.so.conf and/or the folder /etc/ld.so.conf.d in order to find
250 paths to libraries to be used for resolving the symbols. If you have
251 some older version of libmtp in e.g. /usr/lib (typically installed by a
252 package manager) it will take precedence over the new version you just
253 installed in /usr/local/lib and the newly compiled library in
254 /usr/local/lib will *not* be used, resulting in this error message.
255
2563) You really did install the very latest versions (as of writing libmtp
257 0.1.5 and gnomad2 2.8.11) from source and there really is no
258 pre-installed package of either on your machine. In that case I'm
259 totally lost, I have no idea what's causing this.
260
261Typical remedies:
262
2631) If you don't want to mess around with your system and risk these
264 situations, only use pre-packaged software that came with the
265 distribution or its official support channels. If it still breaks,
266 blame your distribution, they're not packaging correctly. Relying on
267 properly packaged software and not installing things yourself *is* the
268 Linux solution to the "dependency hell" problem.
269
2702) Read about dynamically linked library handling until the stuff I wrote
271 about in the previous list sounds like music to your ears, inspect
272 your /lib, /usr/lib, /usr/local/lib, /etc/ld.so.conf and the
273 /etc/ld.so.conf.d, remove all pre-packed versions using RPM, APT,
274 YaST or whatever your distribution uses, compile libmtp and gnomad2
275 (or whatever) from source only and you will be enlighted.
276
277I don't know if this helps you, it's the best answer we can give.