Re: [RFC][PATCH 1/2] usb: gadget: configfs: add MTP function

From: Amit Pundir
Date: Fri Aug 14 2015 - 05:54:12 EST

On 14 August 2015 at 02:11, Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx> wrote:
> On 08/13/2015 09:57 PM, Greg Kroah-Hartman wrote:
>> On Thu, Aug 13, 2015 at 09:34:46PM +0200, Krzysztof Opasiak wrote:
>>> Hello,
>>> On 08/13/2015 09:12 PM, Amit Pundir wrote:
>>>> his MTP function is based on years of work originally done in the
>>>> Android kernel tree by:
>>>> Mike Lockwood<lockwood@xxxxxxxxxxx>
>>>> Benoit Goby<benoit@xxxxxxxxxxx>
>>>> Colin Cross<ccross@xxxxxxxxxxx>
>>>> Arve HjÃnnevÃg<arve@xxxxxxxxxxx>
>>>> Peter Oh<poh@xxxxxxxxxxxx>
>>>> Greg Hackmann<ghackmann@xxxxxxxxxx>
>>>> Badhri Jagan Sridharan<Badhri@xxxxxxxxxx>
>>>> I've folded the series up to make it easier to review, and to provide
>>>> a coherent patch description.
>>>> Post Gingerbread (Android v2.3), Android dropped USB Mass Storage
>>>> in favor of Media Transfer Protocal (MTP), which is widely used for
>>>> transferring media files to digital music players and similar
>>>> applications. This USB gadget function implements MTP functionalty.
>>>> Historically this function has been a part of Android composite
>>>> gadget driver. Android composite driver was Android's solution
>>>> for dynamic gadget function switching prior to the ConfigFS gadget
>>>> being merged. There were failed few attempts in past
>>>> to upstream Android
>>>> composite driver as well. Now this Android MTP gadget function has been
>>>> re-implemented so as to be used as a generic ConfigFS function instead.
>>>> Again, many thanks to Mike, Benoit, Colin, Arve, Peter, Greg and Badhri,
>>>> as they are the real authors of this work. However, I've folded their
>>>> patches together and modified it enough that I don't want them to be
>>>> blamed for any mistakes I've made condensing their patches down.
>>>> Cc: Mike Lockwood<lockwood@xxxxxxxxxxx>
>>>> Cc: Benoit Goby<benoit@xxxxxxxxxxx>
>>>> Cc: Colin Cross<ccross@xxxxxxxxxxx>
>>>> Cc: Arve HjÃnnevÃg<arve@xxxxxxxxxxx>
>>>> Cc: Peter Oh<poh@xxxxxxxxxxxx>
>>>> Cc: Greg Hackmann<ghackmann@xxxxxxxxxx>
>>>> Cc: Badhri Jagan Sridharan<Badhri@xxxxxxxxxx>
>>>> Cc: Android Kernel Team<kernel-team@xxxxxxxxxxx>
>>>> Cc: Greg Kroah-Hartman<gregkh@xxxxxxxxxxxxxxxxxxx>
>>>> Cc: Jonathan Corbet<corbet@xxxxxxx>
>>>> Cc: Felipe Balbi<balbi@xxxxxx>
>>>> Cc: Andrzej Pietrasiewicz<andrzej.p@xxxxxxxxxxx>
>>>> Cc: Laurent Pinchart<laurent.pinchart@xxxxxxxxxxxxxxxx>
>>>> Cc: Yegor Yefremov<yegorslists@xxxxxxxxxxxxxx>
>>>> Cc: Philippe Reynes<tremyfr@xxxxxxxxx>
>>>> Cc: John Stultz<john.stultz@xxxxxxxxxx>
>>>> Cc: Sumit Semwal<sumit.semwal@xxxxxxxxxx>
>>>> Signed-off-by: Amit Pundir<amit.pundir@xxxxxxxxxx>
>>> In my humble opinion adding such function to Linux kernel doesn't make
>>> any
>>> sense. By design, MTP is a protocol which requires access to userspace
>>> features esp. file system. It is very important to run MTP daemon with
>>> suitable user and LSM label and many many other issues which should be
>>> handled by userspace access policy.
>>> Moreover this is not a fully functional USB function but only some
>>> interface
>>> which can be used by mtp-responder (mtp-daemon - call it as you like) to
>>> communicate with host. As we have FunctionFS which allows to implement
>>> any
>>> USB function in as a userspace service. As MTP nature is more related to
>>> userspace I think that porting MTP daemon to use this is a right way to
>>> go.
>>> This should be much more reasonable than adding new function which also
>>> requires daemon for proper working. So why add another interface while we
>>> can use a generic one?

Fairly valid point. I did see MTP mentioned in FunctionFS context in
Documentation/usb/functionfs.txt but I could not find an open
userpsace MTP daemon implementation based on F_FS to try.

>> Isn't there already a userspace MTP daemon that uses the existing
>> functionfs for usb gadgets? I thought I remember seeing that
>> somewhere...
> I've found some interesting link[2] which may mean that Sailfish OS guys has
> some mtp implementation with functionfs backend:
> <<<<< cite
> - /dev/mtp
> mtp functionfs rw,relatime
>>>>>> cite
> Started digging and got it!
> This looks like mtp with ffs backend:

Thanks for the pointer. This "buteo-mtp" looks interesting.

Amit Pundir

> Didn't tested, even didn't try to compile, no guarantee;)
> Footnotes:
> 1 -
> Best regards,
> --
> Krzysztof Opasiak
> Samsung R&D Institute Poland
> Samsung Electronics
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at