usb mtp激活流程【转】
本文转载自:https://blog.csdn.net/kc58236582/article/details/46895901
废话少说, 先上两张时序图 , 图片有点大, 建议用新窗口打开或者另存到本地查看

图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激活流程【转】的更多相关文章
- pycharm 的 激活流程
激活流程 一.通过Activation code 方式激活 注册码获取地址为:http://idea.lanyus.com/ 在idea或者pycharm的Activation code中输入 注册码 ...
- Navicat破解激活流程
Navicat Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL.MariaDB.MongoDB.SQL Server.Oracle.Postg ...
- android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget
MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议.早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTP(Pictu ...
- CodeSmith Generator 7.0.2的激活流程
学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是超越以往......具体看这篇日 ...
- navicat 激活流程
Navicat Premium 12激活 我自己测试了一下可以激活,很好用 原作链接:https://blog.csdn.net/loveer0/article/details/82016644 Na ...
- Android之 MTP框架和流程分析
概要 本文的目的是介绍Android系统中MTP的一些相关知识.主要的内容包括:第1部分 MTP简介 对Mtp协议进行简单的介绍.第2部分 MTP框架 介绍 ...
- 总体介绍ASP.NET Web API下Controller的激活与释放流程
通过<ASP.NET Web API的Controller是如何被创建的?>我们已经对HttpController激活系统的核心对象有了深刻的了解,这些对象包括用于解析程序集和有效Http ...
- vivo机器如何无需root激活XPOSED框架的流程
在大多运行室的引流或者业务操作中,理论上需要使用安卓的神一般的Xposed框架,上周我们运行室购来了一批新的vivo机器,理论上都是基于7.0以上系统版本,理论上不能够获得root的su权限,虽然一部 ...
- oppo7.0系统手机(亲测有效)激活Xposed框架的流程
对于喜欢钻研手机的朋友而言,很多时候会使用到xposed框架及种类繁多功能极强的模块,对于5.0以下的系统版本,只要手机能获得root权限,安装和激活xposed框架是异常简单的,但随着系统版本的升级 ...
随机推荐
- snap方式nextcloud安装笔记
官方安装文档:https://docs.nextcloud.com/server/12/admin_manual/installation/source_installation.html#examp ...
- CI的意思
Continuous integration (CI) is the practice, in software engineering, of merging all developer worki ...
- 解决java.lang.NoClassDefFoundError错误
昨天在开发过程中,导入同事的一个服务到本地,首先从git上把项目拉下来,然后使用maven导入eclipse,然后build. build的过程中在项目的一个测试类里面报错 java.lang.NoC ...
- 【BZOJ4771】七彩树 主席树+树链的并
[BZOJ4771]七彩树 Description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j], ...
- 《从零开始学Swift》学习笔记(Day 28)——总结使用问号(?)和感叹号(!)
原创文章,欢迎转载.转载请注明:关东升的博客 在使用可选类型和可选链时,多次使用了问号(?)和感叹号(!),但是它们的含义是不同的,下面我来详细说明一下. 1. 可选类型中的问号(?) 声明这个类型是 ...
- ul和li弄的图片列表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 1603 限高二叉排列树(计数DP)
1603 限高二叉排列树 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 作为游戏魔方的编写者和管理员,Bob在很多主存模块中 ...
- android菜鸟学习笔记30----Android使用百度地图API(一)准备工作及在应用中显示地图
1.准备工作: 百度地图API是免费开放的,但是需要申请API Key: 1)先注册一个百度开发者帐号 2)进入百度开放服务平台http://developer.baidu.com/ 3)进入LBS云 ...
- Truthy Falsy
https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy falsy(虚值)是在 Boolean 上下文中已认定可转换为‘假‘的值. JavaS ...
- pc端监听屏幕实现导航固定定位
要点:占位符 js,监听屏幕滚动事件,当滚动条距离浏览器顶部的距离 大于 要固定定位开始以下元素的距离,则给要固定元素添加fixed样式. 初始化方法时,要给占位符添加样式 function sort ...