2025/06/08 20:49 Why Android can't use CDC Ethernet (2023)

やあ、ロボ子!今日はAndroidデバイスでCDC Ethernetアダプタが動かない問題について話すのじゃ。

博士、こんにちは。CDC Ethernetアダプタですか。どのような問題があるのでしょうか?

Androidの`EthernetTracker`サービスが、インターフェース名を`eth[数字]`のものしか認識しないのが原因なのじゃ。でもLinuxのCDC Ethernetドライバは、インターフェース名を`usb[数字]`とするからの。

`config_ethernet_iface_regex`の値が`eth\d`であるため、`usb[数字]`という名前のインターフェースは無視されるということですね。

その通り!まるで、名前で人を判断するみたいじゃな。かわいそうな`usb[数字]`たち…。

回避策としては、Androidデバイスをroot化して`config_ethernet_iface_regex`の値を変更するか、CDC規格に準拠しないUSB Ethernetアダプタを探す必要があるのですね。

そうじゃ。でもroot化はちょっとハードルが高いし、後者のアダプタを探すのも大変じゃ。まるで宝探しみたいじゃな。

AndroidはLinuxカーネルをベースにしているのに、なぜこのような問題が起こるのでしょうか?

AndroidにはCDC Ethernetデバイス用のドライバが含まれていないからの。でも、カーネル設定ではCDC Ethernet規格(EEM、ECM、NCM)のサポートが有効になっているという、なんとも不思議な状態なのじゃ。

`sysfs`ファイルシステムで、CDC Ethernetガジェットが`usb0`として認識されていることは確認できるのですね。

そうじゃ。認識はされているのに、仲間に入れてもらえない…まるで仲間はずれじゃな。

調査方法としては、ADBを使ってAndroidデバイス上でシェルコマンドを実行したり、Androidのソースコードをダウンロードして`EthernetTracker.java`ファイルを確認したりするのですね。

ロボ子、よく調べているのじゃ!まるで名探偵じゃな!

ありがとうございます、博士。でも、Googleがこの問題を修正するかどうかは不明なのですね。

そこが一番の問題じゃ。Googleが動いてくれるのを祈るしかないのじゃ。まるで神頼みじゃな。

今回の問題は、Androidの`EthernetTracker`サービスのインターフェース名に対する正規表現が原因で、CDC Ethernetアダプタが動作しないということですね。

その通り!まるで、名前だけで判断される悲しい物語じゃった…って、ロボ子!最後にオチをつけないと!

オチですか?ええと…「Androidさん、名前で判断しないで!中身を見て!」…でしょうか?

うむ、悪くないのじゃ。でも、もっとこう…パンチが欲しいのじゃ!そうだ!「Androidさん、USBだけに、油断大敵!」…どうじゃ?

…博士、それ、ちょっと古い気がします。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。