Android usb流程分析Word下载.docx

上传人:b****1 文档编号:475638 上传时间:2023-04-29 格式:DOCX 页数:22 大小:1.73MB
下载 相关 举报
Android usb流程分析Word下载.docx_第1页
第1页 / 共22页
Android usb流程分析Word下载.docx_第2页
第2页 / 共22页
Android usb流程分析Word下载.docx_第3页
第3页 / 共22页
Android usb流程分析Word下载.docx_第4页
第4页 / 共22页
Android usb流程分析Word下载.docx_第5页
第5页 / 共22页
Android usb流程分析Word下载.docx_第6页
第6页 / 共22页
Android usb流程分析Word下载.docx_第7页
第7页 / 共22页
Android usb流程分析Word下载.docx_第8页
第8页 / 共22页
Android usb流程分析Word下载.docx_第9页
第9页 / 共22页
Android usb流程分析Word下载.docx_第10页
第10页 / 共22页
Android usb流程分析Word下载.docx_第11页
第11页 / 共22页
Android usb流程分析Word下载.docx_第12页
第12页 / 共22页
Android usb流程分析Word下载.docx_第13页
第13页 / 共22页
Android usb流程分析Word下载.docx_第14页
第14页 / 共22页
Android usb流程分析Word下载.docx_第15页
第15页 / 共22页
Android usb流程分析Word下载.docx_第16页
第16页 / 共22页
Android usb流程分析Word下载.docx_第17页
第17页 / 共22页
Android usb流程分析Word下载.docx_第18页
第18页 / 共22页
Android usb流程分析Word下载.docx_第19页
第19页 / 共22页
Android usb流程分析Word下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android usb流程分析Word下载.docx

《Android usb流程分析Word下载.docx》由会员分享,可在线阅读,更多相关《Android usb流程分析Word下载.docx(22页珍藏版)》请在冰点文库上搜索。

Android usb流程分析Word下载.docx

二层:

USB设备层(usbcore)。

这一层是Linux内核开发维护者实现的,与我们没太大关系,不用我们操心,我们只关心其的一些接口就行。

浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:

usb_gadget_driver,usb_composite_dev。

这层主要的一个驱动文件为:

driver/usb/gadget/

三层:

USB设备控制器驱动层。

这一层主要是与CPU、CPUUSB控制器有关,与硬件紧密相关,主要它和USB控制器牵扯在一起,涉及有寄存器、时钟、DMA等等。

但是这一层往往是由芯片厂商去实现。

我们一般仅需在板级文件中处理好所需要的USB接口即可。

这层的关键字就是“UDC”,主要驱动文件命名含“udc”关键字,一般与CPU或芯片厂商有关,如MTKUDC驱动在kernel/mediatek/platform/mt6592/kernel/drivers/usb20/目录下。

USBGadget的三层架构的关系

可以用一句简单的话去概括三层的关系:

USBGadget功能层调用USB设备层的接口,USB设备层调用USB设备控制器驱动层的接口,然后USB设备控制器驱动层回调USB设备层,USB设备层回调USBGadget功能层。

USB设备驱动层:

USBDEVICE注册

Driver:

(doov6592kk\kernel\mediatek\platform\mt6592\kernel\drivers\usb20):

Probe:

重新注册了一个"

musb-hdrc"

设备,

然后在kernel/drivers/usb/musb/加载musb-hdrc驱动,

执行PROBE,这里才是真正的加载驱动,内存,中断,DMA等资源申请,并初始化USB.

musb_probemusb_init_controllermusb_gadget_setupusb_add_gadget_udc加入了LINUXUSB框架了。

 

注册的android_usb_function:

在SYS下创建一系列文件,对应接口XX_show/store

充电器插入中断检测电路

USB插入中断流程:

USB插入中断

WAKEUPPMICTHERAD

if((((int_status_val_0)&

(0x0400))>

>

10)==1){chrdet_int_handler();

}

do_chrdet_int_task

mt_battery_charger_detect_check

mt_usb_connect

musb_start(mtk_musb);

*ProgramtheHDRCtostart(enableinterrupts,dma,etc.).

开始USB枚举

android_setup

android_work

kobject_uevent_env

USBserviceueventobserver收到UEVENT事件。

PMIC中断,检测到充电器中断

Battery里判断chargertype,然后会使能USB,等待主机发枚举包。

收到主机发来的枚举包,会调用到android_setup完成枚举,android_setup会调用android_work发uevent事件。

相关

/**

*UsbServicemanagesallUSBrelatedstate,includingbothhostanddevicesupport.

*HostrelatedeventsandcallsaredelegatedtoUsbHostManager,anddevicerelated

*supportisdelegatedtoUsbDeviceManager.

*/

在systemserver中启动

并调用,

在USBDEVICEMANAGER里,得到NOTIFICATION_SERVICE,后面显示通知时用到。

上面newusbdevicemanager,在其构造函数中,newusbhandler

在usbhandler构造函数中,

上面那个文件是有kernel里的设备,

当KERNELandroid_work发UEVENT时,UeventObserver会收到,执行onUEvent

Updatestate,给HANDLER发消息

Handler处理消息:

updateUsbNotification,STATUSBAR显示通知,,

updateAdbNotification提示ADB,。

LOG:

3.应用相关

Statusbar:

Onresume中调用下面方法加载preferencescreen,

并获得USBMANAGER,在后面设置改变时会用到。

UsbManagerOverview

当设置改变时调用usbmanager的setCurrentFunction方法来设置USBFUNCTION。

往下的流程:

(function,makeDefault);

(function,makeDefault);

(function,makeDefault);

(MSG_SET_CURRENT_FUNCTIONS,functions,makeDefault);

setEnabledFunctions

setUsbConfig

("

"

config);

initproperty_service

内核SYS文件show/store完成KERNELUSBFUNCTIONbind.

kernelusbfunctionbind

UsbStorageActivity

*Thisactivityisshowntotheuserforhim/hertoenableUSBmassstorage

*on-demand(thatis,whentheUSBcableisconnected).Itusesthealert

*dialogstyle.Itwillbelaunchedfromanotification.

*/

USBDEVICEMANAGER的handler处理中还会发送ACTION_USB_STATE的广播。

Sendboardcast,上面的LOG:

广播会被mountservice收到

因为如上图中通过storagemanager注册了listener,会huidaoStorageNotification(SYSTEMUI中)的onUsbMassStorageConnectionChangedAsync

onUsbMassStorageConnectionChangedAsync中会调到updateUsbMassStorageNotification

updateUsbMassStorageNotification,

提示UMS。

UsbStorageActivity中如果使能UMS,则会通过storagemanagerenableUsbMassStorage方法设置UMS。

往下流程分析:

();

(true);

往handler发H_UNMOUNT_PM_UPDATE消息,

处理消息,(ucb);

doUnmountVolume(path,true,removeEncryption);

回调UmsEnableCallBack.handleFinished

doShareUnshareVolume

("

volume"

enable"

share"

:

"

unshare"

path,method);

VOLD下面就是VOLD的处理流程了。

storagemanager

*MountServiceimplementsback-endservicesforplatformstorage

*management.

*@hide-Applicationsshoulduse*toaccesstheMountService.

mountservice启动也在systemserver中,如下图,构造函数中newNativeDaemonConnector,连接到VOLD.

(volumedaemon)

入口:

/system/vold/

接上面的流程,mountservice发下来share的命令后(之前发了umount),会到中VolumeCmd的runCommand。

VolumeManager:

:

shareVolume会将设备名

写入到sys下的一个文件,这个文件是由kernel的mass_storage_functioninit函数创建的,写入要分享的设备名就直接将这个设备share出去了。

问题:

1.只大概梳理了UMS,其他项MTP,PTP等都没分析。

2.内核USBCORE的功能比较复杂,没涉及,KERNELUSB功能绑定功能没有深入涉及。

3.本文档不涉及到USBHOST(特指KERNEL不原生支持的设备)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2