HTC Sensation を Linux につなぐ(USB)

まぁ、公式の解説(Using Hardware Devices | Android Developers)もあるんですが、自分用の備忘録。

対象とするのはDebian squeeze(Debian 6.0.x)。現在はbackportsを入れてるので微妙に違うかもしれない。基本的にはUSBでSensationを接続すれば認識はする。問題はudevで適切な認識をするかどうか。

公式の見解としては

Log in as root and create this file: /etc/udev/rules.d/51-android.rules. Use this format to add each vendor to the file:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

とのこと。

このまま書けば動くんですが、ちょっとは調べようと言う事で調べた。

 

udev設定をしろと言う事はそこら中に書いてあるが、udevってなんぞや?、と。別にUSB Deviceの略では無く、”Linux dynamic device management”としか公式には言われていない。UNIXが黎明期に絶賛されたのがデバイスのファイル抽象化で、全てをファイルの読み書きと言う操作に統一した事が事の発端。コンピュータに繋がった機器全てがファイルとして抽象化されて、そのファイルを読み書きすると、デバイスドライバ良きに計らってくれる。その抽象化されたファイルがデバイスファイル。昔はそれで良かったけど、今みたいに星の数ほど周辺機器が揃ってくると、その特殊なファイルを最初から全て準備しておくのは無駄であると言うことで、必要なモノを必要なだけその都度作りましょうというのがudev。なので、USB以外にもHDDやらNICやらの設定も混じってます。ここを押さえておくと、悩まずに済む。USBの設定と思うと、破綻します。

次に設定ファイルの場所。/etc/udev/rules.d/と/lib/udev/rules.d/がある。後者はシステムデフォルトで、前者に同一ファイル名があった場合には無視されるとのこと。debian的に/lib/以下はパッケージ以外は触ってないことが普通なので、/etc/udev/rules.d/に置くのがルールに従ってそうです。

次にファイル名。51-android.rulesとなってますが、微妙なところ。

  • 50:/dev/以下に特有の名称をつけてデバイスを認識する場合の設定。(例:/dev/input/miceとか)
  • 60:HDD等の固定されたIDをふっていくデバイスを設定(例:/dev/sdaとか)
  • 70:60番台が終わった後にデバイスファイル名が変更されるモノとか、デバイスの設定が必要なモノとか(ディスクで認識されているCDROMデバイスを/dev/cdromに直すとか。一部、scriptでその場で設定ファイルを生成したり。)
  • 80:70番台で一通りの設定が終わってるので、カーネルモジュールが認識に必要だったりするデバイスの設定(ここまではカーネルモジュールが全て読み込めてるとは限らない)
  • 91:各デバイスファイルへのアクセス権限等の設定

と、言う事のはずなんですが…。こっそりと”/lib/udev/rules.d/40-usb-media-players.rules”なんていうファイルがあったりします。media-player-infoと言うパッケージから紛れ込んでますね…。(しかも、こっそりとHTC Diamondの設定があったりします)

と言うことで、「別に頭の数字は何でも良い」と言うことですが、Debian的には80番台でつけてあげるのが良さそうです。”/etc/udev/rules.d/89-htc-sensation.rules”とでもしておきましょうか。

# HTC Android Phone
ATTRS{idVendor}==”0bb4″, MODE=”0666″

これだけで良さそうな気がします。所有グループの設定はrootのままでも全ユーザにアクセス可な権限だし、利用には問題ないかと。

コメント