标题: Win7+红米MTP模式切换成USM模式
http://scz.617.cn/android/201404161227.txt
Q:
什么是MTP模式?
A:
MTP是"Media Transfer Protocol"的缩写,Windows Media Player 10/11支持。MTP有 两种角色,Initiator和Responder,WMP是Initiator,支持MTP的设备是Responder。 MTP可以跑在USB上,可以跑在TCP/IP、蓝牙上。Vista及以上版本内置对MTP的支持, XP需要安装WMP 10或以上版本。
MTP是微软搞的,有点类似iTunes那套,可以在设备与电脑之间同步东西。在MTP模式 下只有用WMP才能看到MP3播放器中的内容。
微软向数码相机、MP3播放器、手机等厂商免费提供MTP技术,这些厂商可以在Firmware 中内置对MTP的支持。数码相机用户不必像过去那样安装厂商专有的驱动程序就可以让 Windows识别数码相机。
与MTP模式相对应的是MSC模式(Mass Storage),也叫UMS模式(USB Mass Storage)。设 备通过MTP模式与电脑连接时,最明显的标志是没有盘符。
MTP与ADB(USB调试)无法同时使用。曾经发现"adb push"上去的文件在电脑里看不到, 关了USB调试也不行,重启手机后才能同步,这是MTP模式的通病。
UMS模式下,电脑拥有SD卡的完全控制,设备无法同时访问SD卡,Camera或MP3因为没 有SD卡而提示无法操作。有些设备做了针对性处理,只将外置SD卡暴露给电脑,将内 置SD卡隐藏起来,从而可以在内置SD卡上存放少量数据。
MTP模式下,SD卡的控制权属于设备而不是电脑。设备通过MTP协议向电脑提供一个虚 拟文件系统,电脑访问SD卡时,通过MTP协议向设备发起相应请求。MTP模式是一种C/S 架构,因此从电脑上移除设备时可以直接拔掉USB线,不必经过安全删除硬件环节。
MTP解决了USM的三大问题:
- 分区通过USM连接电脑时,设备无法同时访问分区
- USM不支持4GB以上的大文件
- /data分区经常不够用
与USM相比,MTP的劣势:
- MTP传输大文件较慢
- MTP模式下不能从电脑直接修改设备上的文件,只能复制到电脑,改完后复制回设 备。有一些封装后的效果使得看上去可以直接修改。
- USM模式与ADB(USB调试)可以同时使用,MTP不能。
- 设备通过USM模式与电脑连接时,有盘符。MTP没有盘符。
针对第2条,可能有不同的外在表现形式,比如不能在电脑上双击打开设备上的文件, 不能预览图片。这些都不一定,要看电脑这边有没有其他封装处理。从C/S架构原理上 讲,这很好理解。
MTP是C/S架构,从电脑向设备复制文件的性能、质量受限于设备端MTP Responder实现。 除了慢,还有可能大批量复制小文件或复制超大文件时出现文件损坏、对长文件名支 持得不好、复制过程中卡死等等。
D: yangtou@SMTH 2012-07-25
一句话解释MTP与USM的区别,网上邻居(SMB)或者FTP与U盘的区别。
D: tsa300@SMTH 2012-07-25
用MTP替代UMS是巨大进步。MTP的最大优点是设备向电脑输出的内容可控。UMS输出的 是整个分区,电脑得到分区的全部控制,设备只有等从电脑断开后才能重获分区的控 制。为了防止小白把NAND Flash搞乱,设备一般将NAND Flash划成两个分区。
MTP可以设置权限。比如你设置了锁机图案,设备在锁机状态时接入电脑,电脑上看不 到设备内容,设备解锁后电脑才会看到设备内容。MTP还支持认证机制。
MTP不再限定输出的分区格式必须是FAT,可以是ext4等。
Q:
Win7+红米,如何从MTP模式切换成USM模式?
A:
除非你完全清楚MTP与USM的含义,否则不建议从MTP模式切换成USM模式。因为USM模式 接入电脑时会影响手机对(内置、外置)SD卡的识别,很多人不明所以地盲目切换USM模 式,常常带来一堆衍生问题,然后跑到论坛上狂喊"希望官方修正",官方也很无奈。
mtp,adb
mass_storage,adb
重启手机使之生效。
通知->作为USB存储设备使用(触摸可显示其他USB选项)->USB计算机连接
USB存储设备
每次USM接入时都会提示"是否打开USB存储",如果选中"下次不再询问",以
后想恢复这个提示较复杂
MTP
不要在这里选MTP,否则非root情况下想再次看到"其他USB选项"较复杂
PTP
只充电
据说在这个模式下充电快
内置光盘
光盘里只有一个文件,Micro-USB_1_01.pdf
通知->USB数据存储
这是一个开关,在"作为USB存储设备使用"的前提下,串行控制USM模式,实际就
是"是否打开USB存储"的另一处控制点。但这个地方有BUG,会出现与实际情况不
同步的情况,来回拨拉使之同步。
前面直接操作/data/property/persist.sys.usb.config,还可以用setprop:
mtp,adb
与前面相比有一个重要区别,"setprop persist.sys.usb.config"之后"adb shell"会 断开,无论是"mass_storage,adb"还是"mtp,adb"。而sed不会。
同样需要重启手机使之生效。
设置->全部设置->存储
手机以USM模式接入电脑后,手机看不到外置SD卡、内置SD卡,这里二者都是灰的,
无大小。弹出U盘,拔掉USB线,手机重新看到外置SD卡、内置SD卡。
MTP模式下手机与电脑可以同时看到并操作外置SD卡、内置SD卡。
Q:
Win7+红米,已经处在MTP模式,没有"root shell",怎么才能看到"其他USB选项"
A:
shell@android:/ $ am start -n com.android.settings/com.android.settings.UsbSettings
这可能是程序员最喜欢的方案,不用root,不用安装任何其他应用。
D:
关于"persist.sys.usb.config",研究/init.usb.rc,在里面发现很多组合,比如:
mtp,mass_storage mtp,mass_storage,adb
测试"mtp,mass_storage,adb",手机以USM模式接入电脑,"其他USB选项"被隐藏,这 可真是一个奇葩的组合。
Q:
USM接入时会提示"是否打开USB存储",我选中过"下次不再询问",后来再也见不到这 个提示了,现在想恢复这个提示。
A:
这叫请神容易送神难,手机软件不像电脑软件,很多配置项并不直接提供UI,轻易不 要选中类似"下次不再询问"这样的记忆类配置,选了就要有愿赌服输的觉悟。
为了恢复提示"是否打开USB存储",必须有"root shell"。
-rw-rw---- system system 86016 2014-04-16 10:17 settings.db
在电脑上:
adb pull /data/local/tmp/settings.db sqlite3 settings.db "select name,value from secure where name='usb_mode'" usb_mode|2 sqlite3 settings.db "delete from secure where name='usb_mode'" adb push settings.db /data/local/tmp/
意思就是,选中"下次不再询问",会在settings.db的secure表中插入一条记录,将 usb_mode设为2,为了恢复提示"是否打开USB存储",删掉这条记录即可。
关于sqlite3,多演示一下:
sqlite3 settings.db SQLite version 3.8.4.3 2014-04-03 16:53:12 Enter ".help" for usage hints. sqlite> .database seq name file
0 main settings.db sqlite> .tables android_metadata bookmarks secure bluetooth_devices global system sqlite> .schema secure CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT); CREATE INDEX secureIndex1 ON secure (name); sqlite> select name,value from secure where name='usb_mode'; usb_mode|2 sqlite> delete from secure where name='usb_mode'; sqlite> .exit
回到正题,在手机上:
-rw-rw---- system system 86016 2014-04-16 11:16 settings.db
至此,USM接入时会提示"是否打开USB存储"。
我是把settings.db从手机弄到电脑用sqlite3修改,再传回手机。也可以用SQLiteSpy, 这是个GUI程序,查看secure表更方便些。不过不建议用SQLiteSpy进行修改操作,试 了一次,结果settings.db的大小增加了不少,而sqlite3无此现象。
如果装了"Google Play商店",可以下载"SQLite Editor",直接在手机上操作前述settings.db, 同样需要root。有人还喜欢与"Root Explorer"配合。注意,"SQLite Editor"是收费 应用。我没支付通道,所以才弄回电脑修改的。
/data/data/目录下有很多应用的配置数据库,我决定全部拖回电脑,用SQLiteSpy研 究。
182448 /data/data/
----rwxr-x system sdcard_rw 46940992 2014-04-16 11:51 data_data.tgz
adb pull /sdcard/downloaded_rom/data_data.tgz