CORY's twilight zone > Android 設定備忘録[an error occurred while processing this directive] > Xperia mini Pro SK17 USBホスト機能を使う
Xperia mini Pro SK17a (4.0.4 = ICS) - Android 設定備忘録 の番外編。Xperia mini Pro に搭載のUSB端子は micro USB A/B タイプで、ホスト側の機能も備えており、OSの設定(と電源供給)さえすればB端子としても機能するらしいので、試してみました。
ここでは、SK17a(北米モデル)を例に書いていますが、SK17i(国際モデル)はもちろん、他の Xperia Mini をはじめ多くの2011年モデルでも概ね同様のようです。
なお、ここに書いた内容は筆者の個人的な備忘録です。内容について筆者はいかなる保証もしませんし、質問等いただいても答えられません。また、ここに書いてある操作をするとメーカーや販売店の保証を受けられなくなるばかりでなく、最悪、端末が使えなくなる(いわゆる文鎮化する)かもしれません。あしからず。
◆ ハードウェアの準備 ◆ まずはroot取得&ICS化 ◆ OS側の準備と動作確認 ◆ 手間を省くには?
必要な物は…
4. のセルフパワーUSBハブは必須ではないが、スマートフォンは一般に本体の電源供給能力が厳しく、これが無いとほとんどのUSB機器が使用不可と思われるので、用意しておくと良い。もちろん USB 2.0 に対応したものが望ましい。最近は microB 接続に対応した製品(Android機器対応などと謳われている)もあり、この場合は 3. は不要。
または、最近はこういうの (GH-CRAD-SUAK) もあるようで、この場合は 3. 4. ともに不要になるのではと。
必要な kernel module が入っていない場合(SK17の初期状態では入っていない)には追加する必要があるが、その際に root 権限が必要。 root取得については Xperia mini Pro SK17a (4.0.4 = ICS) - Android 設定備忘録 を参照。CWM と busybox を入れておくことをお勧めする(左記リンク先の手順では両方とも入る)。
なお、Android 2.3.4 (GB) の場合はUSB機器への対応状況が異なり、必要なライブラリ類も異なるが、本稿では割愛。
【参考】
Android OS は Linux kernel を採用しており、今回その kernel にモジュール(部品)を追加する必要があるが、標準状態では kernel を操作する手段が無いので、Google Play からそのためのアプリをインストールする。筆者が使ったのは Android Terminal Emulator(端末エミュレータ)。
Unix系OSのコンソール(またはtelnet/ssh)を使ったことのある人には説明不要でしょうが、右画面のようにコマンド(文字列)により操作することになるので、苦手意識がある人、何かあっても自分で解決できない人には、以下の作業はお勧めできません。
このコンソールから lsmod を実行してみると、
app_146@android:/ $ lsmod wl12xx_sdio 6213 0 - Live 0x7f0b5000 wl12xx 214871 1 wl12xx_sdio, Live 0x7f070000 mac80211 201123 1 wl12xx, Live 0x7f033000 cfg80211 137730 2 wl12xx,mac89211, Live 0x7f008000 compat 11665 3 wl12xx,mac80211,cfg80211, Live 0x7f000000
このように、USB機器を使う際に必要になるモジュールが入っていない。 (なお、この状態でもUSBマウスは使うことができる。意味ないと思うけど…)
そこで、Linux kernel のバージョンに合ったモジュールのソースコードを入手して自分でbuildするか、または他の人がbuildしてくれたモジュールを入手してインストールするかのどちらか。 ここでは手っ取り早く後者で。
USB mass storage class 対応機器や、FAT/NTFS 論理フォーマットの記憶装置を読み書きするために必要なモジュールのパッケージになっており、インストール方法はリンク先に書かれている通り(.zip ファイルをダウンロードして sdcard に入れ、端末の電源を落としてから再度電源を投入、SONY ロゴが出たら VolDown キー連打で CWM を起動し、install zip from sdcard を実行)。
このパッケージは Xperia mini pro SK17i v4.1.B.0.587 用とのこと。筆者は SK17a 4.1.B.0.587 にて確認。ビルド番号が多少前後しても使える可能性はあると思われるが、kernel が大きく異なる Android 2.3.4 や、CPU (ARMv7-A) が異なる他の機種では使えず、最悪データを壊したり起動しなくなる(いわゆる文鎮化する)ことが考えられるので、とりわけこの後の作業は自己責任により慎重に行うこと。
これらのモジュールはsystem領域に置かれるだけで自動的にloadされないので(その方が安全)、まずは動作確認を。
インストール後に端末エミュレータを起動し、kernel に load する。
$ su # insmod /system/lib/modules/MODULENAME.ko
MODULENAME は必要なモジュールの名前。ここではいわゆるUSBメモリを使えるようにするため、usb-storage.ko と nls_utf8.ko(日本語を含むファイル名を利用可能にするもの、英字しか扱わないなら不要)を有効にする。
$ su # insmod /system/lib/modules/usb-storage.ko # insmod /system/lib/modules/nls_utf8.ko
この時点で動かなくなってしまった場合は、焦らず電源を落として(電源ボタンが操作できなければ一旦電池を抜いて)から電源再投入。それで起動しない場合は(ここまでの手順でそれは無いとは思うが)上記パッケージ入手先からアンインストーラzipをダウンロードしてCWMでインストール。
この状態でOSは USB mass storage class を認識するようになっている、はず。
USBメモリなどを読み書きするためのマウント場所を確保する。 場所はお好みで、とはいえ /mnt 以下にディレクトリを作るのが一般的かと。
# mount -o remount,rw -t rootfs rootfs / # mkdir /mnt/usb # chmod 777 /mnt/usb # mount -o remount,ro -t rootfs rootfs /
USBホストケーブルを使って、USBメモリやメモリカードリーダなどを接続してみる。 (当然ながら、USBメモリが壊れても困らないよう、大事なデータが入っている物は使わない。予めFAT/FAT32でフォーマットして、動作確認用に適当なファイルをコピーしておくと良いでしょう。)
が、どうも Xperia mini pro はUSB機器への電源供給が厳しく制限されているようで、消費電力の小さな機器しか使えない模様。筆者の手元にあったメモリカードリーダライタをかき集めて試した範囲では、1機種(たしか秋葉原のどこかで100円で買った物、メーカーその他不詳、ちなみに USB VendorID 1976 は "Chipsbrand Microelectronics (HK) Co., Ltd." だがこれはチップメーカーのものでしょう)のみバスパワーで動作し、他は全て電源不足で動作しなかった。
もっとも、これは電源供給の問題なので、間にセルフパワーのUSBハブを介してやることで使えるようになる。(ハードディスクなどの電力消費の大きなUSB機器も使えるはず。NTFSやMO/CD/DVDなどの論理フォーマット仕様によりソフトウェア側の準備が要るが。)
下記のように、接続後システムログを見ることでUSB機器が認識したか(または認識に失敗したか)と、認識した場合はどこに割り当てられたか(sdaなど)が判る。
$ dmesg ... <6>[ 5130.654846] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 <6>[ 5130.654907] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 <6>[ 5130.654937] usb usb1: Product: Qualcomm On-Chip EHCI Host Controller <6>[ 5130.654998] usb usb1: Manufacturer: Linux 2.6.32.9-perf ehci_hcd <6>[ 5130.655029] usb usb1: SerialNumber: msm_hsusb_host.0 <6>[ 5130.663696] usb usb1: configuration #1 chosen from 1 choice <6>[ 5130.671447] hub 1-0:1.0: USB hub found <6>[ 5130.671508] hub 1-0:1.0: 1 port detected <6>[ 5130.988555] usb 1-1: new high speed USB device using msm_hsusb_host and address 2 <3>[ 5131.140136] usb 1-1: device v0cf2 p6230 is not supported <6>[ 5131.140136] usb 1-1: New USB device found, idVendor=0cf2, idProduct=6230 <6>[ 5131.140167] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=4 <6>[ 5131.140167] usb 1-1: Product: UB623X <6>[ 5131.140197] usb 1-1: Manufacturer: ENE Flash <6>[ 5131.140197] usb 1-1: SerialNumber: 60********** <6>[ 5131.140625] usb 1-1: rejected 1 configuration due to insufficient available bus power <4>[ 5131.140655] usb 1-1: no configuration chosen from 1 choice
$ dmesg ... <6>[31227.588073] msm_hsusb_host msm_hsusb_host.0: Qualcomm On-Chip EHCI Host Controller <6>[31227.588287] msm_hsusb_host msm_hsusb_host.0: new USB bus registered, assigned bus number 1 <6>[31227.589141] msm_hsusb_host msm_hsusb_host.0: irq 60, io base 0xa3600000 <6>[31227.589416] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 <6>[31227.589477] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 <6>[31227.589508] usb usb1: Product: Qualcomm On-Chip EHCI Host Controller <6>[31227.589538] usb usb1: Manufacturer: Linux 2.6.32.9-perf ehci_hcd <6>[31227.589599] usb usb1: SerialNumber: msm_hsusb_host.0 <6>[31227.600463] usb usb1: configuration #1 chosen from 1 choice <6>[31227.605194] hub 1-0:1.0: USB hub found <6>[31227.605255] hub 1-0:1.0: 1 port detected <6>[31228.243072] usb 1-1: new high speed USB device using msm_hsusb_host and address 2 <3>[31228.395874] usb 1-1: device v1976 p1307 is not supported <6>[31228.395935] usb 1-1: New USB device found, idVendor=1976, idProduct=1307 <6>[31228.395996] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 <6>[31228.396026] usb 1-1: Product: USB Reader <6>[31228.396057] usb 1-1: Manufacturer: ChipsBnk <6>[31228.396087] usb 1-1: SerialNumber: 1100******** <6>[31228.404663] usb 1-1: configuration #1 chosen from 1 choice <6>[31228.410369] scsi5 : SCSI emulation for USB Mass Storage devices <7>[31228.425994] usb-storage: device found at 2 <7>[31228.425994] usb-storage: waiting for device to settle before scanning <7>[31233.423583] usb-storage: device scan complete <5>[31233.425170] scsi 5:0:0:0: Direct-Access ChipsBnk SD/MMCReader 4081 PQ: 0 ANSI: 2 <5>[31233.449890] sd 5:0:0:0: Attached scsi generic sg0 type 0 <5>[31233.451263] sd 5:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB) <5>[31233.452362] sd 5:0:0:0: [sda] Write Protect is off <7>[31233.452392] sd 5:0:0:0: [sda] Mode Sense: 0b 00 00 08 <3>[31233.452392] sd 5:0:0:0: [sda] Assuming drive cache: write through <3>[31233.463195] sd 5:0:0:0: [sda] Assuming drive cache: write through <6>[31233.463226] sda: sda1 <3>[31233.468322] sd 5:0:0:0: [sda] Assuming drive cache: write through <5>[31233.468353] sd 5:0:0:0: [sda] Attached SCSI removable disk
$ dmesg ... <6>[ 5320.844451] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 <6>[ 5320.844512] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 <6>[ 5320.844573] usb usb1: Product: Qualcomm On-Chip EHCI Host Controller <6>[ 5320.844604] usb usb1: Manufacturer: Linux 2.6.32.9-perf ehci_hcd <6>[ 5320.844635] usb usb1: SerialNumber: msm_hsusb_host.0 <6>[ 5320.853332] usb usb1: configuration #1 chosen from 1 choice <6>[ 5320.860137] hub 1-0:1.0: USB hub found <6>[ 5320.860412] hub 1-0:1.0: 1 port detected <6>[ 5321.178680] usb 1-1: new high speed USB device using msm_hsusb_host and address 2 <6>[ 5321.330963] usb 1-1: New USB device found, idVendor=05e3, idProduct=0608 <6>[ 5321.331024] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 <6>[ 5321.331054] usb 1-1: Product: USB2.0 Hub <6>[ 5321.342407] usb 1-1: configuration #1 chosen from 1 choice <6>[ 5321.348327] hub 1-1:1.0: USB hub found <6>[ 5321.351715] hub 1-1:1.0: 4 ports detected <6>[ 5321.629028] usb 1-1.4: new high speed USB device using msm_hsusb_host and address 3 <3>[ 5321.741058] usb 1-1.4: device v0cf2 p6230 is not supported <6>[ 5321.741119] usb 1-1.4: New USB device found, idVendor=0cf2, idProduct=6230 <6>[ 5321.741149] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=4 <6>[ 5321.741210] usb 1-1.4: Product: UB623X <6>[ 5321.741241] usb 1-1.4: Manufacturer: ENE Flash <6>[ 5321.741271] usb 1-1.4: SerialNumber: 60********** <6>[ 5321.755737] usb 1-1.4: configuration #1 chosen from 1 choice <6>[ 5321.764007] scsi0 : SCSI emulation for USB Mass Storage devices <7>[ 5321.773162] usb-storage: device found at 3 <7>[ 5321.773162] usb-storage: waiting for device to settle before scanning <7>[ 5326.769256] usb-storage: device scan complete <5>[ 5326.770843] scsi 0:0:0:0: Direct-Access USB2.0 CardReader CF 0100 PQ: 0 ANSI: 0 <5>[ 5326.771850] scsi 0:0:0:1: Direct-Access USB2.0 CardReader SM XD 0100 PQ: 0 ANSI: 0 <5>[ 5326.772827] scsi 0:0:0:2: Direct-Access USB2.0 CardReader MS 0100 PQ: 0 ANSI: 0 <5>[ 5326.773834] scsi 0:0:0:3: Direct-Access USB2.0 CardReader SD 0100 PQ: 0 ANSI: 0 <5>[ 5326.792510] sd 0:0:0:0: Attached scsi generic sg0 type 0 <5>[ 5326.794158] sd 0:0:0:1: Attached scsi generic sg1 type 0 <5>[ 5326.797729] sd 0:0:0:2: Attached scsi generic sg2 type 0 <5>[ 5326.802032] sd 0:0:0:3: Attached scsi generic sg3 type 0 <5>[ 5326.802642] sd 0:0:0:0: [sda] Attached SCSI removable disk <5>[ 5326.805297] sd 0:0:0:1: [sdb] Attached SCSI removable disk <5>[ 5326.807922] sd 0:0:0:3: [sdd] Attached SCSI removable disk <5>[ 5326.811309] sd 0:0:0:2: [sdc] Attached SCSI removable disk
USB mass storage が認識したら、後は一般的なUnix系OSと同様、mount / umount を行うことで、読み書きできるか試してみる。
先ほど用意したマウント場所にmount。下記例の sda1 の部分は状況により変わるので、上記dmesgで確認しておく。
# mount -t vfat -o iocharset=utf8 /dev/block/sda1 /mnt/usb
※ -o iocharset=utf8 の部分は、ファイル名に英数字しか使わないなら不要。
ls でディレクトリエントリを覗いてみる、df で容量を見てみる、ESファイルエクスプローラなどのアプリを使ってファイルを開いてみるなど、お好きな方法でどうぞ。
$ df Filesystem Size Used Free Blksize /dev 170.0M 76.0K 169.9M 4096 /mnt/asec 170.0M 0.0K 170.0M 4096 /mnt/obb 170.0M 0.0K 170.0M 4096 /system 400.0M 294.7M 105.3M 4096 /data 420.0M 261.2M 158.8M 4096 /cache 101.5M 1.2M 100.3M 4096 /data/idd 6.0M 824.0K 5.2M 4096 /data/sdext2 7.9G 362.5M 7.5G 4096 /mnt/sdcard 21.7G 9.5G 12.2G 32768 /mnt/secure/asec 21.7G 9.5G 12.2G 32768 /mnt/asec/com.bus10-1 2.0M 40.0K 2.0M 8192 /mnt/usb 29.3G 9.9G 19.5G 32768 $ ls -Fla /mnt/usb drwxrwxrwx root root 1980-01-28 22:18 .android_secure drwxrwxrwx root root 1980-01-28 22:18 Android drwxrwxrwx root root 2013-04-07 01:55 DCIM -rwxrwxrwx root root 1793462 2012-03-26 04:26 MIDI_STAR☆CARNIVAL.mp3 -rwxrwxrwx root root 1924864 2013-04-07 16:40 MTLc3m.ttf -rwxrwxrwx root root 2871020 2013-04-07 16:40 MTLmr3m.ttf drwxrwxrwx root root 2013-06-09 01:27 Movies drwxrwxrwx root root 2012-12-05 06:25 Music drwxrwxrwx root root 2013-04-07 16:15 Notifications drwxrwxrwx root root 2013-04-07 16:15 Podcasts drwxrwxrwx root root 2013-04-07 16:15 Ringtones
使い終わったら、取り外す前にumountを忘れずに。
# umount /mnt/usb
その後、USBメモリを外す(dmesg を見れば disconnect のログが見られる)。 ここまで出来たら、とりあえず問題なさそう。
(準備中)
下記を参考にさせていただきました。この場を借りて御礼申し上げます。
更新日 : 2013年12月25日 (3762)
CORY's twilight zone > Android 設定備忘録[an error occurred while processing this directive] > Xperia mini Pro SK17 USBホスト機能を使う