高通android usb otg,Android OTG支持USB读卡器
我们知道,三星Android手机将USB读卡器通过OTG线插入Micro USB插口后,插拔读卡器里的SD卡,文件管理器也能够识别卡的插拔;而很多手机的OTG连上USB读卡器也来插拔SD卡,会发现文件管理器无法加载SD卡。而将USB读卡器放到Windows上或者桌面Linux上,我们发现插拔读卡器里的SD卡也是有效的。
究其原因是Android的用户空间或者内核空间没有处理好SCSI 的TUR(Test Unit Ready)命令。
由于项目需要,我实现了Android OTG支持读卡器里的SD卡插拔,需要修改的地方分为两部分,一部分是kernel,一部分是vold。
对于kernel部分:
当用户空间打开诸如/dev/block/sda的设备节点时,kernel会调用到kernel/fs/block_dev.c里的__blkdev_get()函数,该函数会向USB读卡器发送TUR命令来测试读卡器里的media是否已插入,如果插入返回1,否则是0,当Kernel发现media状态从1->0或者0->1转换时,就会设置bdev->bd_invalidated为true,这样到1185行:
if (bdev->bd_invalidated) {
if (!ret) {
rescan_partitions(disk, bdev);
} else if (ret == -ENOMEDIUM){
invalidate_partitions(disk, bdev);
}
}
该函数会重新无效或者扫描分区,但事实上无论你怎么插拔SD卡,这两个函数都没有执行完毕,关键原因是有一个打开计数没有清空,把上面函数改成如下的形式:
if (bdev->bd_invalidated) {
if (!ret) {
bdev->bd_part_count = 0;
rescan_partitions(disk, bdev);
} else if (ret == -ENOMEDIUM){
bdev->bd_part_count = 0;
invalidate_partitions(disk, bdev);
}
}
配合用户空间周期性打开/dev/block/sda设备节点,你再插拔SD卡就会发现,插入SD卡时,/dev/block/sda1设备节点会出现,拔除SD卡时,/dev/block/sda1设备节点消失。代码跳到1125行,将无效或者扫描分区前同样加上bdev->bd_part_count = 0,即解决了内核无法扫描读卡器SD卡插拔的问题。
对于vold部分:
在vold进程中需要加入周期性打开和关闭/dev/block/sda设备节点的轮训线程,才能使内核周期性向读卡器发送TUR命
令来检查读卡器中的SD卡是否存在,我们可以将该轮训线程放于DirectVolume.cpp中,示例函数如下:
我们的OTG U盘是挂载在/storage/UsbDriveA、/storage/UsbDriveB、/storage/UsbDriveC、/storage/UsbDriveD、
/storage/UsbDriveE、/storage/UsbDriveF目录下的。
同时需要在DirectVolume.cpp中加入其它几个函数,由于代码保护问题,在本文中就不粘贴代码了,有需要的人可以向我索取源代码。
增加的几个函数名如下:
int DirectVolume::adjustDiskPartNum(int diskNumParts, int pendingPartMap);
bool DirectVolume::isUsbDrive(const char *tag);
bool DirectVolume::isUsbDrive();
void DirectVolume::diskRemoved(int major, int minor);
void DirectVolume::diskRemoved();
高通android usb otg,Android OTG支持USB读卡器相关推荐
- Unity 高通AR发布到Android发生黑屏
这两天在做Unity 高通AR发布到Android的时候发生黑屏现象 后来发觉是不调用摄像头而不是黑屏(所谓黑屏是因为摄像头背景就是黑色的) 最后发觉是高通的文件夹出现错误 重新复制之前备份的一个高通 ...
- 高通、猎户机型Android典型bootloader分析
1.bootloader是什么? 简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,我们可以初始化硬件设备.建立内存空间的映射图,从而将系统的软硬件环境带到一 ...
- 使用高通QXDM工具实现Android设备网络制式更改(如仅注册LTE网络)(独家!)
修改网络制式需要用到高通的QXDM工具,该工具包下载链接如下: 链接:https://pan.baidu.com/s/1rRNicFvlRSstUhka2JSiOg 密码:pssp 具体操作步骤如下: ...
- 高通发布 Gobi 4000 ,可支持多种制式的通信网络
高通今天发布了其基于4G LTE 技 术的通信模块Gobi 4000 .这个产品提供了对CDMA2000,1xEV-DO Rev A & B, HSPA+, Dual-Carrier 双载波 ...
- 介绍一款小尺寸高通方案无线路由WiFi模块SKW103_支持无线中继,视频传输,智能网关
WiFi模块根据工作频段分为2.4GHz单频WiFi模块和2.4/5GHz双频WiFi模块:根据工作模式,分为主设备WiFi模块.从设备WiFi模块:根据应用类型分为AP/Router WiFi模块. ...
- [高通SDM450][Android9.0]设备默认支持连接WPA3-SAE加密协议的WIFI
文章目录 开发平台基本信息 问题描述 问题分析 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 前段时间,有个医院的客户反馈 ...
- 高通旗舰芯片835亚洲发布 支持3200万像素摄像头
3月22日下午,美国高通公司全新旗舰芯片Qualcomm骁龙835处理器在亚洲首秀.这颗采用三星10纳米制程工艺的芯片,将使搭载该芯片的智能设备拥有更低的功耗与更高的性能. 据了解,骁龙835已经投入 ...
- 转usb驱动cmw500 ni_支持USB Type-C接口的外置蓝光驱动器IO Data BRP-UT6 / MC2本月发售...
IO Data以其非正统的数据设备闻名,最近IO Data新推出了一款支持USB Type-C接口的外置超薄蓝光驱动器设备 BRP-UT6 / MC2,除了支持USB-C接口,其配置是非常标准的超薄外 ...
- 高通Q+A平台 android gcore解析环境搭建
QNX+LA平台在运行过程中可以在android发生crash的时候生成core文件,本文将会介绍如何搭建环境解析gcore文件. 获取gcore文件 在异常情况下或者LA侧手动触发kernel pa ...
- Unity3d使用高通Vuforia发布IOS工程不支持64位的一些解决办法
1.将Unit升级至4.6.x或5.0.x,将Vuforia差距升级到最新版本(vuforia-unity-mobile-android-ios-4-0-105 ) 2.平台Other Setting ...
最新文章
- 一张图看懂数据库十年大格局!
- iOS 开发问题 书籍 价值 改名 创业大赛app
- 执行Bean 实例化
- Marketing Cloud的Contact主数据创建
- 画闭合的多边形 - HTML5 Canvas 作图
- 程序员内卷?连熬数夜肝出这份2021Java面试题核心知识点总结,近300页!
- 如何将日志配置文件放入到Apollo配置中心并支持热更新
- 16进制颜色与UIColor互转
- mysql insert on update_我可以始终使用INSERT…ON DUPLICATE UPDATE进行简单的更新/插入吗?...
- 图像加密算法毕业论文【含代码】
- 2020-02-24
- 微信小程序中下载app的方法
- Laravel5.4中文分词搜索-使用 Laravel Scout,Elasticsearch,ik 分词(一)
- 据说优秀的程序员都是这样送新年祝福的?
- 转:Windows8内核模式下开发NDIS应用-NDIS Filter讲解
- C# 使用Interop.Excel一些报错的对应
- EtherCAT使用与解析-SII信息提取
- iOS 下载量、注册量追踪统计
- QUIC构建1——chromium镜像,clone文件depot_tools的过程+git过程中的问题
- 基于Java web的购物商城
热门文章
- 【程序源代码】微信小程序商城管理系统(java后台+小程序)
- tensorflow框架下,多进程model.predict(x)无响应/暂停/无输出
- HBuilder X右端预览点击无反应(解决方法)
- 对专业学习的期望与目标
- 虚拟机装系统出现 ntldr is missing(NTLDR丢失)、无法正常开机、解决方法
- HTML5排序罗马数字,HTML5 罗马数字时钟
- 使用opencv调用摄像头然后录制视频和保存文件
- 做了一个网页版的串口调试助手
- Java-Excel报表开发POI(含POI保护工作表功能)
- H264(AVC)/H265(HEVC)/H266(VVC):GOP的区别