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驱动分析相关推荐

  1. 如何实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write LinuxUSB MSC (Mass Storage Class) Driver Crif ...

  2. usb storage驱动分析

    本文以usb storage设备驱动来分析,由于usb storage涉及到usb驱动框架,scsi驱动框架,block io驱动框架,先来看下初始化 1. usb storage设备的初始化流程 s ...

  3. USB Mass Storage大容量存储 The Thirteen Class章节的理解

    http://blog.csdn.net/xgbing/article/details/7002558 USB Mass Storage 6.7 The Thirteen Class章节的理解 Cas ...

  4. ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)

    ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...

  5. usb mass storage设备枚举过程

    8月份从PC开发岗位换到底层嵌入式驱动开发来了.接到的第二个活,是在高通8650平台上实现驻留支持SCSI指令.8650平台是高通推出的EVDO RevB的双核平台,和之前6085相比性能更强,软件结 ...

  6. 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍

    USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...

  7. Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识

    第 2 章 USB Mass Storage大容量存储的基本知识 摘要 USB Mass Storage所对应的层次和要实现哪些东西: 图 2.1. USB Mass Storage Framewor ...

  8. USB Mass Storage协议

    简介 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个 ...

  9. USB Mass Storage Class

    编辑博客时,回车的意思是切换段落,shift+回车才是换行. SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEa ...

最新文章

  1. 2022-2028年中国丝印硅胶行业市场深度分析及投资前景趋势报告
  2. spring mvc 与Struts的认识
  3. git 撤销提交的文件
  4. NIO 之 ByteBuffer实现原理
  5. 图片自动播放和动态添加
  6. 28个不得不看的经典编程算法!!
  7. goaccess_nginx日志分析工具
  8. NET流行高性能JSON框架-Json.NET
  9. [Algorithm] 字符串匹配算法——KMP算法
  10. 四部门联合发文推动数学科学发展,释放支持高校建设基础数学中心信号!
  11. 第一部linux手机,手机界再掀风波,英特尔力争在下一部手机中抢得一席之地
  12. python做定时任务的方式及优缺点_使用Python做定时任务及时了解互联网动态
  13. zabbix mysql trapper_分分钟一键部署Zabbix Server
  14. jsf el 表达式_JSF表达式语言– JSF EL
  15. jQuery Validate插件验证
  16. 英语语法之后缀决定词性
  17. 安信可CA-01首款4G模组以物模型连接阿里云物联网,实现远程控制;
  18. oracle crm系统叫什么,常用CRM软件有哪些?
  19. c ref java_使用JNA将C数组返回给Java
  20. Python print连续输出不换行

热门文章

  1. 批量关闭公众号推送_微信喊你「批量屏蔽公众号」啦!还有其他新功能!!
  2. 群同态和群同构的区别_如何判断群的同态与同构
  3. 试试画面快煮面,给自己味蕾不一样的体验
  4. 响应式布局 android,Android响应式布局
  5. java代码实现文件扫描_JAVA文件扫描(递归)的实例代码
  6. 解决手机设备无法adb连接
  7. UML之程序流程图画法
  8. Android 开发高手课 温故知新篇
  9. adams样条驱动_Adams中如何生成3D样条数据
  10. UNITY实战进阶-科大讯飞TTS(离线语音合成) unity播放PCM格式的wav(不依赖第三方库)-7