Что случилось с драйвером гаджета USB MTP в основном ядре Linux?

Я пытаюсь заставить встроенное устройство работать как устройство MTP, используя драйвер USB-гаджета.

Я знаю, что Android уже давно переключился с устройства хранения данных на устройство MTP и обнаружил исходный код драйвера гаджета MTP в нескольких репозиториях Android.

Однако в основном коде ядра я не нашел этого конкретного файла, ни эквивалентов.

Но я нашел патчи для драйвера гаджета MTP, представленные для RFC в 2010 году.

Вопрос:

Почему основное ядро ​​не принимает этот патч, а также не предоставляет никакой другой реализации гаджета MTP, но ядро ​​Android предоставляет его?

Это из-за технических трудностей или по другим причинам, например, есть лучший способ сделать это?

Если я хочу включить USB MTP-гаджет на своих устройствах (одно с TI OMAP3730 SoC с ядром 2.6.37, а другое с NXP/Freescale IMX6 SoC с ядром 3.14), какую версию MTP-гаджета мне следует использовать для обратного переноса?


person user3528438    schedule 05.02.2016    source источник


Ответы (1)


Почему основное ядро ​​не принимает этот патч, а также не предоставляет никакой другой реализации гаджета MTP, но ядро ​​Android предоставляет его?

В этой ветке упоминалось, что ответчик MTP должен быть реализован как пользователь- космический демон, а не USB-гаджет ядра. И некоторые реализации были упомянуты.

На ПК инициатор MTP уже работает через реализацию пользовательского пространства. На сегодняшний день у меня на Debian стоит ядро ​​4.3, и ему по-прежнему не хватает гаджета MTP. Но мне все равно удалось запустить MTP между моим ПК и телефоном, используя некоторые инструменты пользовательского пространства (возможно, на основе libmtp, но это не главное).

Ядро Android, как известно, имеет некоторые спорные технические решения (с точки зрения разработчиков основного ядра), поскольку Android был быстрорастущим проектом, и все должно было быть реализовано быстро. Конечно, были попытки апстримить как можно больше материала. Но гаджет MTP, кажется, одна из тех вещей, которые не смогли добраться даже до drivers/staging. Наверное, все согласны с тем, что MTP должен быть реализован в пользовательском пространстве.

Если я хочу включить USB MTP-гаджет на своих устройствах (одно с TI OMAP3730 SoC с ядром 2.6.37, а другое с NXP/Freescale IMX6 SoC с ядром 3.14), какую версию MTP-гаджета мне следует использовать для обратного переноса?

Если вам действительно нужно это в ядре (вероятно, нужно только для Android), вам следует искать версии ядра Android, максимально приближенные к вашей. Неважно, какой SoC вы используете, реализация MTP является общей для всех платформ, поэтому просто ищите версию ядра.

Например, взгляните на эти репозитории:

person Sam Protsenko    schedule 05.02.2016
comment
Итак, правильный способ - реализовать это в пользовательском пространстве? Можете ли вы указать мне какую-нибудь ссылку о том, как это можно сделать? - person user3528438; 06.02.2016
comment
@ user3528438 Ну, это не единственный правильный способ, скорее, это единственный доступный способ с текущим основным ядром. Какую реализацию MTP использовать — это зависит от того, как вы хотите, чтобы ваше устройство действовало. Есть сторона инициатора (обычно это ПК) и сторона ответчика. Для инициатора ищите libmtp и так далее. Но, похоже, вам нужна сторона ответчика. Для этого вы можете изучить проект Buteo MTP. - person Sam Protsenko; 06.02.2016