`
shangjava
  • 浏览: 1233581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android-vold源码分析之连接电脑OTG(11)

 
阅读更多
作者:gzshun. 原创作品,转载请标明出处!
来源:http://blog.csdn.net/gzshun


OTG是on-the-go的简称,是2001年由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。特别是PDA、移动电话、消费类设备。改变如数码照相机、摄像机、打印机等设备间多种不同制式连接器,多达7种制式的存储卡间数据交换的不便。
对OTG介绍比较详细的在USB的官网,详细请见英文文档:http://www.usb.org/developers/onthego/。以下是官网的一个简要的介绍,贴出来看看:
USB On-The-Go and Embedded Host

Virtually every portable device now uses USB for PC connectivity. As these products increase in popularity, there is a growing need for them to communicate both with USB peripherals and directly with each other when a PC is not available. There is also an increase in the number of other, non-PC hosts (Embedded Hosts) which support USB in order to connect to USB peripherals.

The USB On-The-Go and Embedded Host Supplements addresses these scenarios by allowing portable devices and non-PC hosts to have the following enhancements:

Targeted host capability to communicate with selected other USB peripherals
Support for direct connections between OTG devices
Power saving features to preserve battery life
Revision 2.0 of the USB On-The-Go and Embedded Host Supplement to the USB 2.0 Specification applies to products operating at low-speed, full-speed and high-speed and is released, including applicable ECNs and errata, as part of the USB 2.0 Specification package. The corresponding OTG Adopters Agreement is also available.

Revision 1.0 of the USB On-The-Go and Embedded Host Supplement to the USB 3.0 Specification enhances these scenarios by adding SuperSpeed capability to USB On-The-Go and is released as part of the USB 3.0 Specification package. The corresponding Adopters Agreement for USB OTG 3.0 is the USB 3.0 Adopters Agreement.
这里写得很清楚,OTG主要是实现可移动设备点对点的数据共享,不需要再依赖于PC机第三方的识别或者操作。平时经常从电脑下载MP3格式的音乐到phone or Pad,都是经过USB线来连接电脑,电脑可以识别到设备里面的存储设备,或者手机与手机的连接,这就是OTG功能。

这是一个在线浏览Linux内核源码的网站:http://lxr.linux.no/

Linux内核早就提供了OTG的驱动,在http://lxr.linux.no/linux+v3.1.6/drivers/usb/gadget/目录下,Linux将usb与otg两个功能模块给独立开了,主要的驱动是file_storage.c,该驱动主要负责终端设备的存储设备节点的操作,比如,从电脑,在该终端的磁盘上面创建文件,都会通过这个驱动来完成存储任务。另外一个驱动主要是负责USB通信的,是结尾为"_udc.c"的驱动源码,该目录下有好几个以"_udc.c"结尾的文件,这是针对不同型号的处理器而增加的,不同厂家提供不同的驱动。

这里只是简单的介绍,Android在vold中处理otg,就是将要共享的磁盘设备写到一个标志文件里面,再广播一下大容量存储连接的状态。

一、连接电脑;先来看看源码:


进入shareVolume函数中,该函数判断一下sd卡的状态,如果不存在设备,或者sd卡不是出于空闲状态,那么就返回失败。


如果有Android手机的用户,可以看到系统中存在/sys/devices/platform/usb_mass_storage/lun0/file这么一个文件,Java层可能没有权限访问该文件。最近发现,Java想要访问系统的文件,或者操作命令都要赋以最高权限(0777)才能访问或执行,真是麻烦。


二、断开连接;


这里已经分析完在CommandListener::VolumeCmd::runCommand函数的实现的所有操作了,然后程序将命令的执行结果通知Framework,源码:


磁盘操作的命令圆满结束,下一篇文章继续分析Framework与vold的通信。待续。

分享到:
评论

相关推荐

    Android-vold源码分析

    通过vold源码的深入分析,我们可以窥见Android系统架构的复杂性与精妙之处。vold不仅体现了Android在设备管理方面的灵活性和高效性,也展示了其模块化设计的思想,即通过松耦合的组件和高效的通信机制,构建出一个既...

    android-vold.rar_android_android vold_vold

    1. **设备识别与挂载**:`vold`会识别连接到设备的各种存储设备,例如内置存储、USB存储设备或OTG设备。一旦检测到新的存储设备,它会根据预定义的规则挂载相应的文件系统,如FAT32、EXT4等。 2. **加密支持**:在...

    android-vold.rar_android

    5. MTP(Media Transfer Protocol)与PTP(Picture Transfer Protocol)支持:Vold为Android设备提供了MTP和PTP协议,使得用户可以通过电脑或其他设备以媒体设备的方式进行数据交换。 三、Vold的运行机制 Vold服务...

    android-vold架构[收集].pdf

    Android Vold(Volume Daemon)是Android系统中的一个重要组件,它主要负责管理移动设备上的外部存储设备,如SD卡和USB存储设备。Vold作为一个本地服务,监控并响应这些存储设备的插入、移除和其他相关操作,确保...

    Android磁盘管理-系统源码分析.docx

    Android系统的磁盘管理是其核心功能之一,涉及到系统架构的多个层次。本文档主要分析了Android磁盘管理的关键组件——Vold(Volume Daemon)以及其工作流程。Vold是一个本地服务,它在Android中扮演着重要角色,负责...

    Android 9.0 Vold 挂载流程分析

    在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的。通过kernel–>vold–>StorageManagerService这样的架构去逐级上报热插拔事件。 一、Vold 入口 --> /system/vold/main.c int main(int argc, char** ...

    USB之android Vold分析 storage分析 高清版

    USB之android_Vold分析,分析了linux udev与android vold的关系由来,vold的功能、架构,使用netlink的通信过程。kernel的uevent发送,framework层的处理、磁盘的挂载等等。

    android系统挂载之vold详细分析

    在Android系统中,vold(Volume Daemon)是一个核心的组件,用于管理USB存储和SD卡等外部存储设备。要深入理解vold的工作原理,我们首先需要了解udev,因为在概念和功能上,vold是udev在Android平台上的替代。 udev...

    USB之android_Vold分析.pdf

    ### USB之android_Vold分析 #### 1. Vold简介 Vold,即Volume Daemon,是Android系统中用于管理外部存储设备(如USB、SD卡等)的核心组件。它的功能涵盖了设备的检测、挂载、卸载以及状态监控等多个方面。Vold的...

    android系统vold透析.pdf

    通过上述分析可以看出,Vold在Android系统中扮演着极其重要的角色,它不仅负责管理外部存储设备,还作为连接内核层与应用层的关键桥梁。理解Vold的工作原理对于深入研究Android系统的存储管理机制至关重要。

    android代码VOLD代码分析

    在VOLD的功能分析中,VOLD的启动过程、内部架构、以及如何处理设备连接和断开事件是核心内容。VOLD启动后会创建一个socket,与framework层通信。其内部架构的主要步骤包括创建连接、引导和事件处理。VOLD能够处理的...

    USB之android_Vold_分析

    ### USB之android_Vold_分析 #### 1. Vold简介与udev的由来 ##### 1.1 udev的由来与特性 udev作为Linux 2.6内核的一个重要组成部分,它取代了传统的devfs,成为现代Linux系统中默认的设备管理工具。udev以守护...

    android平台ntfs-3g移植源码,可直接mm编译

    android平台移植ntfs-3g使支持ntfs格式tf卡、U盘、stat硬盘挂载,解压文件到external目录下,mm编译成功后,可手动指行 ntfs-3g /dev/block/vold/* /storage/sdcard1 或者添加 Ntfs.cpp Ntfs.h到system/vold目录实现...

    android中Vold进程详解

    Vold进程的源码分析表明,它的主要功能是管理和控制外部存储设备。Vold进程的main函数主要完成了以下几个步骤:创建Vold设备文件夹、初始化Vold相关的类实例、创建CommandListener并设置Broadcaster、启动Volume...

    android系统vold透析

    **Vold**(Volume Daemon)是Android系统中用于管理外部存储设备的核心组件之一,它负责处理与USB存储设备、SD卡等相关的任务。Vold的功能类似于Linux系统中的**udev**,即用于设备管理的守护进程,但它更适应...

    Android vold 多U盘多分区挂载实现

    在Android系统中,`vold`(Volume Daemon)是一个关键的系统服务,它负责管理设备上的存储设备,包括内部存储、外部SD卡以及USB设备。本文将深入探讨如何在Android系统上实现对多个U盘及多分区的挂载,基于描述中的...

    android vold模块详解

    Vold的功能分析包括三部分:创建连接、引导和事件处理。Vold的内部架构涉及NetLinkManager、CommandListener、VolumeDirect、VolumeAuto、VolumeSocketListener等组件,通过这些组件,Vold监听来自内核的事件,并...

    Android-start-boot-analyze-.rar_android_android bootloader_andro

    Android系统启动过程分析 本文主要介绍Android系统的启动过程,以Androidinit进程之后部分为主,init之前部分同标准Linux内核启动完全相同。于Android启动过程复杂,涉及C、C++及java部分内容,本文以流程分析为主线...

Global site tag (gtag.js) - Google Analytics