4

USBガジェットドライバーを使用して、組み込みデバイスをMTPデバイスとして機能させようとしています。

私は、Android がマス ストレージ ガジェットから MTP ガジェットにかなり長い間切り替えられたことを知っています。MTP ガジェット ドライバーのソース コードは、いくつかの Android リポジトリで見つかりました。

ただし、メインラインのカーネル コードでは、その特定のファイルも同等のものも見つかりませんでした。

しかし、2010 年に RFC に提出された MTP ガジェット ドライバーのパッチを見つけました。

質問:

メインライン カーネルがこのパッチを受け入れず、MTP ガジェットの他の実装も提供しないのに、Android カーネルが提供するのはなぜですか?

これは技術的な問題によるものですか、それとももっと良い方法があるなどの理由によるものですか?

デバイス (カーネル 2.6.37 を実行する TI OMAP3730 SoC を搭載したデバイスと、カーネル 3.14 を実行する NXP/Freescale IMX6 SoC を搭載したデバイス) で USB MTP ガジェットを有効にしたい場合、どのバージョンの MTP ガジェットをバックポートに使用すればよいですか?

4

1 に答える 1

3

メインライン カーネルがこのパッチを受け入れず、MTP ガジェットの他の実装も提供しないのに、Android カーネルが提供するのはなぜですか?

このスレッドでは、MTP レスポンダーはカーネル USB ガジェットとしてではなく、ユーザー空間デーモンとして実装する必要があると言及されていました。そして、いくつかの実装が言及されました。

PC では、MTP イニシエーターは既にユーザー空間の実装を介して動作します。現在、私の Debian にはカーネル 4.3 がありますが、まだ MTP ガジェットがありません。しかし、とにかく、いくつかのユーザー空間ツールを使用して、PC と電話の間で MTP を実行することができました (おそらく libmtp に基づいていますが、それは重要ではありません)。

Android カーネルは (メインライン カーネル開発者の観点から) 議論の余地のある技術的決定を下すことが知られています。Android は急速に成長したプロジェクトであり、迅速に実装する必要があるためです。もちろん、できるだけ多くのものをアップストリームする試みもありました。しかし、MTP ガジェットは、drivers/staging. おそらく誰もが、MTP をユーザー空間に実装する必要があることに同意します。

デバイス (カーネル 2.6.37 を実行する TI OMAP3730 SoC を搭載したデバイスと、カーネル 3.14 を実行する NXP/Freescale IMX6 SoC を搭載したデバイス) で USB MTP ガジェットを有効にしたい場合、どのバージョンの MTP ガジェットをバックポートに使用すればよいですか?

カーネルでこれが本当に必要な場合 (おそらく Android でのみ必要)、自分のバージョンにできるだけ近い Android カーネル バージョンを探す必要があります。どの SoC を使用しているかは問題ではありません。MTP の実装はすべてのプラットフォームで共通であるため、カーネルのバージョンを確認してください。

たとえば、次のリポジトリを見てください。

于 2016-02-05T23:49:40.717 に答える