Androidusb流程分析研究文档格式.docx
- 文档编号:6655696
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:23
- 大小:1.82MB
Androidusb流程分析研究文档格式.docx
《Androidusb流程分析研究文档格式.docx》由会员分享,可在线阅读,更多相关《Androidusb流程分析研究文档格式.docx(23页珍藏版)》请在冰点文库上搜索。
三层:
USB设备控制器驱动层.这一层主要是与CPU、CPUUSB控制器有关,与硬件紧密相关,主要它和USB控制器牵扯在一起,涉及有寄存器、时钟、DMA等等.但是这一层往往是由芯片厂商去实现.我们一般仅需在板级文件中处理好所需要地USB接口即可.这层地关键字就是“UDC”,主要驱动文件命名含“udc”关键字,一般与CPU或芯片厂商有关,如MTKUDC驱动在kernel/mediatek/platform/mt6592/kernel/drivers/usb20/目录下.DXDiT。
USBGadget地三层架构地关系
可以用一句简单地话去概括三层地关系:
USBGadget功能层调用USB设备层地接口,USB设备层调用USB设备控制器驱动层地接口,然后USB设备控制器驱动层回调USB设备层,USB设备层回调USBGadget功能层.RTCrp。
USB设备驱动层:
USBDEVICE注册
Mt_devs.c
Driver:
Usb20.c(doov6592kk\kernel\mediatek\platform\mt6592\kernel\drivers\usb20):
5PCzV。
Probe:
重新注册了一个"
musb-hdrc"
设备,
然后在kernel/drivers/usb/musb/musb_core.c加载musb-hdrc驱动,jLBHr。
执行PROBE,这里才是真正地加载驱动,内存,中断,DMA等资源申请,并初始化USB.
musb_probe→musb_init_controller→musb_gadget_setup→usb_add_gadget_udc加入了LINUXUSB框架了.xHAQX。
Android.c
注册地android_usb_function:
在SYS下创建一系列文件,对应接口XX_show/store
充电器插入中断检测电路
USB插入中断流程:
USB插入中断
→WAKEUPPMICTHERAD
→if((((int_status_val_0)&
(0x0400))>
>
10)==1){chrdet_int_handler();
}LDAYt。
→do_chrdet_int_task
→mt_battery_charger_detect_check
→mt_usb_connect
→musb_start(mtk_musb);
*ProgramtheHDRCtostart(enableinterrupts,dma,etc.).Zzz6Z。
→开始USB枚举
→android.candroid_setup
→android_work
→kobject_uevent_env
→USBserviceueventobserver收到UEVENT事件....
PMIC中断,检测到充电器中断
Battery里判断chargertype,然后会使能USB,等待主机发枚举包.
收到主机发来地枚举包,会调用到android_setup完成枚举,android_setup会调用android_work发uevent事件.dvzfv。
2.UsbService相关
/**
*UsbServicemanagesallUSBrelatedstate,includingbothhostanddevicesupport.rqyn1。
*HostrelatedeventsandcallsaredelegatedtoUsbHostManager,anddevicerelatedEmxvx。
*supportisdelegatedtoUsbDeviceManager.
*/
在systemserver中启动
并调用,
在USBDEVICEMANAGER里,得到NOTIFICATION_SERVICE,后面显示通知时用到.SixE2。
上面newusbdevicemanager,在其构造函数中,newusbhandler
在usbhandler构造函数中,
上面那个文件是有kernelandroid.c里地设备,
当KERNELandroid_work发UEVENT时,UeventObserver会收到,执行onUEvent6ewMy。
Updatestate,给HANDLER发消息
Handler处理消息:
updateUsbNotification,STATUSBAR显示通知,com.android.settings.UsbSettings,kavU4。
updateAdbNotification提示ADB,com.android.settings.DevelopmentSettings.y6v3A。
LOG:
3.应用相关
3.1Statusbar:
Onresume中调用下面方法加载preferencescreen,
并获得USBMANAGER,在后面设置改变时会用到.
UsbManagerOverview
ThisclassallowsyoutoaccessthestateofUSBandcommunicatewithUSBdevices.CurrentlyonlyhostmodeissupportedinthepublicAPI.M2ub6。
Youcanobtainaninstanceofthisclassbycalling
Context.getSystemService().0YujC。
当设置改变时调用usbmanager地setCurrentFunction方法来设置USBFUNCTION.eUts8。
往下地流程:
mUsbManager.setCurrentFunction(function,makeDefault);
sQsAE。
→mService.setCurrentFunction(function,makeDefault);
GMsIa。
→mDeviceManager.setCurrentFunctions(function,makeDefault);
TIrRG。
→mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS,functions,makeDefault);
7EqZc。
→setEnabledFunctions
→setUsbConfig
→SystemProperties.set("
sys.usb.config"
config);
→initproperty_service
→init.rc
→内核SYS文件show/store完成KERNELUSBFUNCTIONbind.
kernelusbfunctionbind
3.2UsbStorageActivity
*Thisactivityisshowntotheuserforhim/hertoenableUSBmassstoragelzq7I。
*on-demand(thatis,whentheUSBcableisconnected).Itusesthealertzvpge。
*dialogstyle.Itwillbelaunchedfromanotification.NrpoJ。
*/
USBDEVICEMANAGER地handler处理中还会发送ACTION_USB_STATE地广播.1nowf。
Sendboardcast,上面地LOG:
广播会被mountservice收到
因为如上图StorageNotification.start中通过storagemanager注册了listener,会huidaoStorageNotification(SYSTEMUI中)地onUsbMassStorageConnectionChangedAsyncfjnFL。
onUsbMassStorageConnectionChangedAsync中会调到updateUsbMassStorageNotificationtfnNh。
updateUsbMassStorageNotification,
提示UMS.
UsbStorageActivity中如果使能UMS,则会通过storagemanagerenableUsbMassStorage方法设置UMS.HbmVN。
往下流程分析:
mStorageManager.enableUsbMassStorage();
→mMountService.setUsbMassStorageEnabled(true);
→往handler发H_UNMOUNT_PM_UPDATE消息,
→处理消息,mForceUnmounts.add(ucb);
→doUnmountVolume(path,true,removeEncryption);
→回调UmsEnableCallBack.handleFinished
→doShareUnshareVolume
→mConnector.execute("
volume"
enable?
"
share"
:
unshare"
path,method);
V7l4j。
→VOLD下面就是VOLD地处理流程了.
4.Mountservice,storagemanager
*MountServiceimplementsback-endservicesforplatformstorage83lcP。
*management.
*@hide-Applicationsshoulduseandroid.os.storage.StorageManagermZkkl。
*toaccesstheMountService.
和vold等合作起作用,主要负责监听并广播device地mount/unmount/badremoval等等事件.AVktR。
mountservice启动也在systemserver中,如下图,构造函数中newNativeDaemonConnector,连接到VOLD.ORjBn。
5.Vold(volumedaemon)
vold启动在init.rc中:
入口:
/system/vold/main.cpp
流程图:
接上面地流程,mountservice发下来share地命令后(之前发了umount),会到CommandListener.cpp中VolumeCmd地runCommand.2MiJT。
VolumeManager:
:
shareVolume会将设备名
写入到sys下地一个文件,这个文件是由kernel地mass_storage_functioninit函数创建地,写入要分享地设备名就直接将这个设备share出去了.gIiSp。
问题:
1.只大概梳理了UMS,其他项MTP,PTP等都没分析.
2.内核USBCORE地功能比较复杂,没涉及,KERNELUSB功能绑定功能没有深入涉及.
3.本文档不涉及到USBHOST(特指KERNEL不原生支持地设备).
版权申明
本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有
Thisarticleincludessomeparts,includingtext,pictures,anddesign.Copyrightispersonalownership.uEh0U。
用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.IAg9q。
Usersmayusethecontentsorservicesofthisarticleforpersonalstudy,researchorappreciation,andothernon-commercialornon-profitpurposes,butatthesametime,theyshallabidebytheprovisionsofcopyrightlawandotherrelevantlaws,andshallnotinfringeuponthelegitimaterightsofthiswebsiteanditsrelevantobligees.Inaddition,whenanycontentorserviceofthisarticleisusedforotherpurposes,writtenpermissionandremunerationshallbeobtainedfromthepersonconcernedandtherelevantobligee.WwghW。
转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.asfps。
Reproductionorquotationofthecontentofthisarticlemustbereasonableandgood-faithcitationfortheuseofnewsorinformativepublicfreeinformation.Itshallnotmisinterpretormodifytheoriginalintentionofthecontentofthisarticle,andshallbearlegalliabilitysuchascopyright.ooeyY。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Androidusb 流程 分析研究