2012/11/03

[過去記事]voldとMountServiceの関係

注文していた、Nexus7用のUSBホストケーブルが届いた。
しかし、USBメモリを挿してもマウントされなかった。
そこまでは、情報通りだ。

 

では、どうやったらマウントできるのか?
rootをとれば、できるらしい。
ということは、kernelレベルでは対応しているのだろう。
有償アプリをインストールすれば、rootにならなくてもアクセスできるらしい。
ということは、root権限がなくても使うルートがある?
あるいは、Nexusだけのしくみがあるのか?

よくわからないので、adb shellで見える情報から探ってみよう。。。
としたのだけど、/procとか/sysとかの見方をすっかり忘れてしまった。

昔つくった記事があったので、それをみてみよう。
2010年7月11日だ。


[froyo]voldとMountServiceの関係

 

Androidの起動時、init.rcが処理される。
init.rcの中で、voldが起動される。
voldは起動すると、/sys/block以下にあるueventに"add"と書き込みを行う。
これにより、ブロックデバイスからnetlink(AF_NETLINK)が飛ぶ。
voldはnetlinkを受信する機能も含んでいる。
イベントとして受信し、ブロックデバイスからだったらVolumeManagerのイベントハンドラが呼び出される。
ここでDEVPATHとvold.fstabに書いた中身の比較をし、一致したら処理をしている。
MountServiceはvoldに"list"を要求し、SDカードの挿抜状態を確認する。
最初はPendingで、その後Mountになっていた。
--------------------------------------------------------------------------------
つまりまあ、udevの役割を分担し、ブロックデバイス関係のものはvoldが行っているという見方でいいのかな。
vold.fstabは、サンプルだと/devices/以下になっていたが、SmartQ5では/blockだった。
これはデバイスドライバ依存なのかな?
"/sys/devices/virtual/switch/usb_mass_storage/state"を参照して、これがあればUMS(USB Mass Storage)が使えるんだかなんだかっていう部分があった。
vold起動時しかやってないのだが、どう動くのだろう?
SmartQ5ではファイルがないのでよくわからん。
ASEC、というのがちょこちょこ出てくる。
検索すると、暗号化したファイルと関係しているようだ。
MountServiceなどから受け付けるコマンドに"share"というのがある。
共有化?


ここまで。

froyoって、懐かしいな・・・。まだ2年前なんだ。

とりあえず、"/sys/devices/virtual/switch/usb_mass_storage"はなかった。
まあ、のんびりやりますかね。

 

ネットで見ると、Jerry BeanにはUMS (USB Mass Storage)がない、というのもあった。
http://forum.xda-developers.com/showthread.php?t=1833161

ないなら、どうしようもない・・・。
いやいや、これは「UMSがなくなってMTPになった」という、クライアント側で動くときの話か。

 

shell@android:/sys/class/usb_device/usbdev2.2/device $ ls -l
drwxr-xr-x root     root              2012-11-03 14:02 2-1:1.0
-rw-r--r-- root     root         4096 2012-11-03 14:02 authorized
-rw-r--r-- root     root         4096 2012-11-03 14:02 avoid_reset_quirk
-rw-r--r-- root     root         4096 2012-11-03 14:02 bConfigurationValue
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceClass
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceProtocol
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceSubClass
-r--r--r-- root     root         4096 2012-11-03 14:02 bMaxPacketSize0
-r--r--r-- root     root         4096 2012-11-03 14:02 bMaxPower
-r--r--r-- root     root         4096 2012-11-03 14:02 bNumConfigurations
-r--r--r-- root     root         4096 2012-11-03 14:02 bNumInterfaces
-r--r--r-- root     root         4096 2012-11-03 14:02 bcdDevice
-r--r--r-- root     root         4096 2012-11-03 14:02 bmAttributes
-r--r--r-- root     root         4096 2012-11-03 14:02 busnum
-r--r--r-- root     root         4096 2012-11-03 14:02 configuration
-r--r--r-- root     root        65553 2012-11-03 14:02 descriptors
-r--r--r-- root     root         4096 2012-11-03 14:02 dev
-r--r--r-- root     root         4096 2012-11-03 14:02 devnum
-r--r--r-- root     root         4096 2012-11-03 14:02 devpath
lrwxrwxrwx root     root              2012-11-03 14:02 driver -> ../../../../../bus/usb/drivers/usb
drwxr-xr-x root     root              2012-11-03 14:02 ep_00
-r--r--r-- root     root         4096 2012-11-03 14:02 idProduct
-r--r--r-- root     root         4096 2012-11-03 14:02 idVendor
-r--r--r-- root     root         4096 2012-11-03 14:02 manufacturer
-r--r--r-- root     root         4096 2012-11-03 14:02 maxchild
drwxr-xr-x root     root              2012-11-03 14:02 power
-r--r--r-- root     root         4096 2012-11-03 14:02 product
-r--r--r-- root     root         4096 2012-11-03 14:02 quirks
--w------- root     root         4096 2012-11-03 14:02 remove
-r--r--r-- root     root         4096 2012-11-03 14:02 serial
-r--r--r-- root     root         4096 2012-11-03 14:02 speed
lrwxrwxrwx root     root              2012-11-03 14:02 subsystem -> ../../../../../bus/usb
-rw-r--r-- root     root         4096 2012-11-03 14:02 uevent
-r--r--r-- root     root         4096 2012-11-03 14:02 urbnum
drwxr-xr-x root     root              2012-11-03 14:02 usb_device
-r--r--r-- root     root         4096 2012-11-03 14:02 version

 

shell@android:/sys/class/usb_device/usbdev2.2/device $ cat manufacturer
cat manufacturer
A-DATA

ふむ、USBメモリはわかっているようだ。

255|shell@android:/sys/class/usb_device/usbdev2.2/device/driver $ printenv
printenv
_=/system/bin/printenv
LD_LIBRARY_PATH=/vendor/lib:/system/lib
HOSTNAME=android
BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar
PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
LOOP_MOUNTPOINT=/mnt/obb
ANDROID_DATA=/data
ANDROID_ROOT=/system
SHELL=/system/bin/sh
MKSH=/system/bin/sh
USER=shell
ANDROID_PROPERTY_WORKSPACE=9,32768
EXTERNAL_STORAGE=/storage/sdcard0
ANDROID_ASSETS=/system/app
TERM=vt100
RANDOM=20849
ASEC_MOUNTPOINT=/mnt/asec
HOME=/data
ANDROID_BOOTLOGO=1
PS1=$(precmd)$USER@$HOSTNAME:${PWD:-?} $

EXTERNAL_STORAGEは、内蔵のSDカードだな。

 

# create directory for mounting usb drives
mkdir /mnt/usbdrive 0666 system system
symlink /mnt/usbdrive /usbdrive

こんなのもある。

 

いまさらlogcatでUSBメモリを挿したときの様子を見てみたが、何もない。
これは、ログを見せていないだけなのか、本当に何もないのか・・・。

 

vold.fstabとかにUSBメモリのことが書いてあれば、MountServiceを使って操作することができると思う。
でも"/usbdrive"でマウント要求しても、「そんなのない」とあしらわれてしまった。
ないんだろうね。

うーん、アプリの方はどうやって解決しているんだろう。
買って試せばいいのかもしれんが、答を見てしまうのも面白くないので粘ってみよう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。