usb mtp激活流程
来源:互联网 发布:淘宝上的耐克是真的吗 编辑:程序博客网 时间:2024/06/06 03:31
废话少说, 先上两张时序图 , 图片有点大, 建议用新窗口打开或者另存到本地查看
图1: UsbSettings的流程
图2: property属性的触发事件流程
好, 开始分析
从图1开始, 当用户从Setting UI里面点了一下那个MTP的选择框后,引起一系列的操作,
说白了,这里绕那么多个圈, 无非就是想发个消息通知UsbHandler而已, 然后就等待状态更新, 真正干活的就是图2.
这也不复杂,就是为后面更新persist.sys.usb.config这个property组装合适的value, 这个value就是functions这个变量, 纯字符串, 以逗号分割各个功能. 假如只有mtp, 那么functions就是"mtp", 假如adb和mtp都有, 那么function就是"adb,mtp" .
所以从图2步骤1到3都是内部逻辑为了得到更准确的functions的值, 最后执行property_set().
有同学会很奇怪, peroperty_set()不久是更新一个全局持久化的特殊变量而已吗? 怎么会触发而外的逻辑呢?
既然特殊,那当然有特殊的地方.
值得注意的是步骤6-7的通讯方式是通过LOCAL socket来实现的, 文件是/dev/socket/property_service , 在init程序初始话的时候创建的
在android启动初始化的时候,在init.rc文件里面会有一段
# Used to set USB configuration at boot and to switch the configuration
# when changing the default configuration
on property:persist.sys.usb.config=*
setprop sys.usb.config $persist.sys.usb.config
没错,就是它, 这个注册了一个触发器, 意思是当系统使用property更新persist.sys.usb.config的值的话,就同时更新sys.usb.config为同样的值
在init.rc其他地方也同样有sys.usb.config的触发器, 如:
# Used to disable USB when switching states
on property:sys.usb.config=none
stop adbd
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/bDeviceClass 0
setprop sys.usb.state $sys.usb.config
# adb only USB configuration
# This should only be used during device bringup
# and as a fallback if the USB manager fails to set a standard configuration
on property:sys.usb.config=adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct D002
write /sys/class/android_usb/android0/functions $sys.usb.config
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state $sys.usb.config
# USB accessory configuration
on property:sys.usb.config=accessory
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct 2d00
write /sys/class/android_usb/android0/functions $sys.usb.config
write /sys/class/android_usb/android0/enable 1
setprop sys.usb.state $sys.usb.config
# USB accessory configuration, with adb
on property:sys.usb.config=accessory,adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 18d1
write /sys/class/android_usb/android0/idProduct 2d01
write /sys/class/android_usb/android0/functions $sys.usb.config
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state $sys.usb.config
所以, 真正的操作就看sys.usb.config更新为什么值了.
这些操作都是往/sys/class/android_usb/android0/下面对应的文件写数据.
这些都是android内核空间与用户的数据交换接口, 更改对应的值就相当与告诉内核做对应的事情了.
好了, 流程就分析完了.
- usb mtp激活流程
- usb mtp激活流程
- 解剖Android USB MTP 的激活流程
- 解剖Android USB MTP 的激活流程
- 解剖Android USB MTP 的激活流程
- android mtp usb
- Android MTP流程分析
- USB UMS MTP设置过程
- android的USB for MTP
- Android USB/MTP相关实现
- Android USB/MTP相关代码
- MTP模式与USB存储模式(MTP in Android)
- MTP and MSC Mode of USB Devices
- USB UMS MTP设置过程 (一)
- mtp usb驱动 v4.9 最新版
- USB UMS MTP设置过程 (一)
- Android 连接USB 默认选中MTP
- Android USB默认连接模式为MTP
- Bestcoders
- CM3 STM32F的低功耗
- jQuery插件开发的五种形态小结
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- 画图解释 SQL join 语句
- usb mtp激活流程
- iOS 使用Quartz 2D画虚线
- 敏捷开发之道
- [Elasticsearch] 部分匹配 (一) - 前缀查询
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- C++中一个Vector内容和动态数组
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- linux下配置git版本控制工具
- swift开发教程--如何设置导航控制器标题栏的字体及颜色