USB mass storage驱动分析
1. USB驱动代码在/drivers/usb/gadget下,有文件:android.c,其他驱动文件f_adb.c,f_mass_storage.c;其中android.c 依赖于f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。
2. usb_mass_storage重新mount一个分区;
a. adb shell 进入/sys/devices/platform/usb_mass_storage/lun0
b. echo "" > file //unmount card
c. echo /dev/block/vold/179:14 > file //mount internal mass storage
d. echo "" > file //unmount card
e. echo /dev/block/vold/179:32 > file //mount external mass storage
3. 如何check 设备号
a. cat /proc/partitions
b. cat /proc/mounts
c. ls -l /dev/block
4. f_mass_storage.c中 android_register_function(&mass_storage_function);注册该驱动为USB驱动,其中有如下设置其属性
static DEVICE_ATTR(ro, 0644, fsg_show_ro, fsg_store_ro);
static DEVICE_ATTR(file, 0644, fsg_show_file, fsg_store_file);
fsg_show_ro, fsg_store_ro, 和 fsg_show_file, fsg_store_file 位于 storage_common.c文件中
5. 函数 fsg_store_file 中会把以前的partition给fsg_lun_close,然后 fsg_lun_open 一个新的partition,这就可以解释为什么不能同时mount两个partition暴露给PC, 如何挂载多个mass storage设备?
6. kernel\arch\arm\mach-ux500\board-rio-grande.c中有static struct usb_mass_storage_platform_data mass_storage_pdata定义,修改nluns = 2,测试
7. 进入手机会发现/sys/devices/platform/usb_mass_storage 目录下多一个lun?, 在两个不同的lun0/1下,可以手动挂载两个卡
a. 进入lun0
b. echo /dev/block/vold/179:14 > file
c. 进入lun1
d. echo /dev/block/vold/179:32 > file
(顺便提及下多出的lun2 是给cdrom用的,因为在f_mass_storage.c中fsg_probe 有nluns = fsg_cfg.nluns + fsg_cfg.cdrom_nluns;而cdrom_nluns=1
8. system\vold\volumemanager.cpp中函数sharevolume和unsinit.rcharevolume中会往/sys/devices/platform/usb_mass_storage/lun0 写入/dev/block/vold/179:xx; 可在这修改添加挂载多一个sd卡设备
9. system\vold\main.cpp中process_config函数会分析/system/etc/vold.fstab,然后addVolume 到volumemanager.cpp中的变量mVolumes中
10. system\vold\commandlistener.cpp中int CommandListener::VolumeCmd::runCommand(SocketClient*cli,int argc, char **argv)函数接收sd卡的挂载命令
11. frameworks\base\services\java\com\android\server\mountservice.java,中函数setEachUsbMassStorageEnabled(String path, boolean enable) <--setUsbMassStorageEnabled
12. /dev/block/vold/179:14设备可以同时挂载为mtp 和 sd 卡
USB mass storage驱动分析相关推荐
- 如何实现Linux下的U盘(USB Mass Storage)驱动
如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write LinuxUSB MSC (Mass Storage Class) Driver Crif ...
- usb storage驱动分析
本文以usb storage设备驱动来分析,由于usb storage涉及到usb驱动框架,scsi驱动框架,block io驱动框架,先来看下初始化 1. usb storage设备的初始化流程 s ...
- USB Mass Storage大容量存储 The Thirteen Class章节的理解
http://blog.csdn.net/xgbing/article/details/7002558 USB Mass Storage 6.7 The Thirteen Class章节的理解 Cas ...
- ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)
ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...
- usb mass storage设备枚举过程
8月份从PC开发岗位换到底层嵌入式驱动开发来了.接到的第二个活,是在高通8650平台上实现驻留支持SCSI指令.8650平台是高通推出的EVDO RevB的双核平台,和之前6085相比性能更强,软件结 ...
- 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍
USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...
- Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识
第 2 章 USB Mass Storage大容量存储的基本知识 摘要 USB Mass Storage所对应的层次和要实现哪些东西: 图 2.1. USB Mass Storage Framewor ...
- USB Mass Storage协议
简介 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个 ...
- USB Mass Storage Class
编辑博客时,回车的意思是切换段落,shift+回车才是换行. SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEa ...
最新文章
- 2022-2028年中国丝印硅胶行业市场深度分析及投资前景趋势报告
- spring mvc 与Struts的认识
- git 撤销提交的文件
- NIO 之 ByteBuffer实现原理
- 图片自动播放和动态添加
- 28个不得不看的经典编程算法!!
- goaccess_nginx日志分析工具
- NET流行高性能JSON框架-Json.NET
- [Algorithm] 字符串匹配算法——KMP算法
- 四部门联合发文推动数学科学发展,释放支持高校建设基础数学中心信号!
- 第一部linux手机,手机界再掀风波,英特尔力争在下一部手机中抢得一席之地
- python做定时任务的方式及优缺点_使用Python做定时任务及时了解互联网动态
- zabbix mysql trapper_分分钟一键部署Zabbix Server
- jsf el 表达式_JSF表达式语言– JSF EL
- jQuery Validate插件验证
- 英语语法之后缀决定词性
- 安信可CA-01首款4G模组以物模型连接阿里云物联网,实现远程控制;
- oracle crm系统叫什么,常用CRM软件有哪些?
- c ref java_使用JNA将C数组返回给Java
- Python print连续输出不换行
热门文章
- 批量关闭公众号推送_微信喊你「批量屏蔽公众号」啦!还有其他新功能!!
- 群同态和群同构的区别_如何判断群的同态与同构
- 试试画面快煮面,给自己味蕾不一样的体验
- 响应式布局 android,Android响应式布局
- java代码实现文件扫描_JAVA文件扫描(递归)的实例代码
- 解决手机设备无法adb连接
- UML之程序流程图画法
- Android 开发高手课 温故知新篇
- adams样条驱动_Adams中如何生成3D样条数据
- UNITY实战进阶-科大讯飞TTS(离线语音合成) unity播放PCM格式的wav(不依赖第三方库)-7