背景:android9.0系统的开发板,接入双目摄像头,仅能打开其中一路摄像头,另一路打不开

关键log:

从串口打印看,usb驱动有正确识别到usb hub以及两路usb camera设备

[ 4526.512542] usb 2-1: new high-speed USB device number 8 using ehci-platform

<6>[ 4526.512542] usb 2-1: new high-speed USB device number 8 using ehci-platform

[ 4526.637809] usb 2-1: New USB device found, idVendor=05e3, idProduct=0608<6>[ 4526.640429] hub 2-1:1.0: USB hub found

[ 45

<6>[ 4526.6240947] hub 2-1:1.0: 4 ports de6tect.ed

637857] usb 2-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0

[ 4526.637868] usb 2-1: Product: USB2.0 Hub

[ 4526.640429] hub 2-1:1.0: USB hub found

[ 4526.640947] hub 2-1:1.0: 4 ports detected

[ 4526.912582] usb 2-1.1: new high-speed USB device number 9 using ehci-platform

<6>[ 4526.912582] usb 2-1.1: new high-speed USB device number 9 using ehci-platform

[ 4527.071511] usb 2-1.1: New USB device found, idVendor=735f, idProduct=2208

[<6>[ 4527.071511] usb 2 -1.1: New USB device found, idVendor=735f, idProduc4t=2208

<6>[ 45257.071564] usb 2-1.1: New 27.USB device s0trings: Mfr=2, Product=1, S7erialNumber=0

15<6>[ 4527.071576] usb 2-1.61: Product: Techshino TCF2342G Nir

<6>[ 4527.071587] usb 2-1.1: Manufacturer: Techshino] TCF232G Nir

usb 2-1.1: New USB device str<6>[ 4527.102122] input: Techshino TCF232G Nir as /devices/platform/ff340i000.usb/usb2/n2-1/2-1.1/2-1.1:1.0/input/ignput9

s: Mfr=2, Product=1, SerialNumber=0

[ 4527.071576] usb 2-1.1: Product: Techshino TCF232G Nir

[ 4527.071587] usb 2-1.1: Manufacturer: Techshino TCF232G Nir

[ 4527.076643] uvcvideo: Found UVC 1.00 device Techshino TCF232G Nir (735f:2208)

[ 4527.102122] input: Techshino TCF232G Nir as /devices/platform/ff340000.usb/usb2/2-1/2-1.1/2-1.1:1.0/input/input9

[ 4527.182559] usb 2-1.2: new high-speed USB device number 10 using ehci-platform

<6>[ 4527.182559] usb 2-1.2: new high-speed USB device number 10 using ehci-platform

[ 4527.345527] usb 2-1.2: New USB device found, idVendor=735f, id<6>[ 4527.345527] usb 2-1.2: New USB device found,Prod idVendor=735f, iuctdProd=uct=2207

<6>[ 4527.345573] usb 2-1.2: New 220USB device string7

s: Mfr=2, Product=1, SerialNu[mber=0

<6>[ 4 527.345586] usb4 2-1.2: Product: Techshino 5TCF232G Col

<6>[ 4527.345597] usb 2-1.22: Manufacturer: Techshino TCF232G Col

7.345573] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0

[ 4527.345586] usb 2-1.2: Product: Techshino TCF232G Col

[ 4527.345597] usb 2-1.2: Manufacturer: Techshino TCF232G Col

[ 4527.356031] uvcvideo: Found UVC 1.00 device Techshino TCF232G Col (735f:2207)

[ 4527.391576] input: Techshino TCF232G Col as /devices/platform/ff340000.usb/usb2/2-1/2-1.2/2-1.2:1.0/input/input10

但奇怪的是android层却只能正确识别到其中一路摄像头的usb设备描述符信息,错误的那路设备,vid、pid以及Devclass、DevSubClass均读取错误。正确的信息应该是:

vid=0x735f pid=0x2208 DevClass=0xef DevSubClass=0x02

实际框架层读取到的却是:

vid=0x0581 pid=0x0b20 DevClass=0 DevSubClass=0

02-22 04:01:52.479 D/EventHub( 459): No input device configuration file found for device 'Techshino TCF232G Nir'.

02-22 04:01:52.484 D/UsbHostManager( 459): USB device attached: vidpid 0581:0b20 mfg/product/ver/serial Techshino TCF232G Nir/Techshino TCF232G Nir/9.01/Techshino TCF232G Nir hasAudio/HID/Storage: false/false/false

02-22 04:01:52.487 W/EventHub( 459): Unable to disable kernel key repeat for /dev/input/event7: Function not implemented

02-22 04:01:52.487 I/EventHub( 459): wakeMechanism=EPOLLWAKEUP, usingClockIoctl=true

02-22 04:01:52.487 I/EventHub( 459): New device: id=8, fd=240, path='/dev/input/event7', name='Techshino TCF232G Nir', classes=0x80004001, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false,

02-22 04:01:52.487 I/InputReader( 459): Device added: id=8, name='Techshino TCF232G Nir', sources=0x00002103

02-22 04:01:52.493 D/UsbDeviceDescriptor( 459): 0 configs

02-22 04:01:52.494 D/UsbHostManager( 459): Added device UsbDevice[mName=/dev/bus/usb/002/006,mVendorId=1409,mProductId=2848,mClass=0,mSubclass=0,mProtocol=7,mManufacturerName=Techshino TCF232G Nir,mProductName=Techshino TCF232G Nir,mVersion=9.01,mSerialNumber=Techshino TCF232G Nir,mConfigurations=[]

02-22 04:01:52.650 D/FinancialApplication( 2119): didRangeBeaconsInRegion called with beacon count: 0

02-22 04:01:52.751 E/UsbDescriptorParser( 459): Exception parsing USB descriptors.

02-22 04:01:52.751 E/UsbDescriptorParser( 459): java.lang.NegativeArraySizeException: -64

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.descriptors.Usb10ACHeader.parseRawDescriptors(Usb10ACHeader.java:59)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.descriptors.UsbDescriptorParser.parseDescriptors(UsbDescriptorParser.java:229)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.descriptors.UsbDescriptorParser.(UsbDescriptorParser.java:64)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.UsbHostManager.usbDeviceAdded(UsbHostManager.java:355)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.UsbHostManager.monitorUsbHostBus(Native Method)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.UsbHostManager.lambda$XT3F5aQci4H6VWSBYBQQNSzpnvs(Unknown Source:0)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at com.android.server.usb.-$$Lambda$UsbHostManager$XT3F5aQci4H6VWSBYBQQNSzpnvs.run(Unknown Source:2)

02-22 04:01:52.751 E/UsbDescriptorParser( 459): at java.lang.Thread.run(Thread.java:764)

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 225 type:0xffffffe4

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 2 type:0x0

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 21 type:0x16

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 26 type:0x30

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 4 type:0x30

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 37 type:0x30

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 58 type:0x0

02-22 04:01:52.751 I/UsbDescriptorParser( 459): Unknown Descriptor len: 16 type:0x0

02-22 04:01:52.751 W/UsbDescriptor( 459): UNDERRUN t:0x24 r: 6 < l: 30

02-22 04:01:52.751 I/chatty ( 459): uid=1000(system) UsbService host identical 6 lines

02-22 04:01:52.751 W/UsbDescriptor( 459): UNDERRUN t:0x24 r: 6 < l: 30

02-22 04:01:52.751 W/UsbACInterface( 459): Unknown Audio Class Interface subtype:0xd

相关代码路径:

frameworks/base/services/usb/java/com/android/server/usb/UsbHostManager.java

frameworks/base/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java

frameworks/base/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java

frameworks/base/services/usb/java/com/android/server/usb/descriptors/UsbDescriptor.java

frameworks/base/services/core/jni/com_android_server_UsbHostManager.cpp

system/core/libusbhost/usbhost.c

驱动节点路径:

/sys/devices/platform/ff340000.usb/usb2/2-1/2-1.1

/sys/devices/platform/ff340000.usb/usb2/2-1/2-1.2

事件大致流程:

usb接入--》EvenHub获取usb设备信息--》唤醒UsbHostManager jni的usb_host_read_event事件线程,回调usb_device_added函数--》调用usbhost.c的usb_device_open打开设备并读取设备描述符--》回调UsbHostManager.java的usbDeviceAdded方法,增加usb设备并读取和解析usb设备描述符

具体解决过程就不再赘述,问题的原因是因为UsbDescriptorParser.java中解析设备的接口类型时出错,将uvc设备误判为了uac设备,导致读取的usb设备描述符信息错误

diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java

old mode 100644

new mode 100755

index e615428..ee6b131

--- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java

+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java

@@ -177,13 +177,18 @@ public final class UsbDescriptorParser {

* Audio Class Specific

*/

case UsbDescriptor.DESCRIPTORTYPE_AUDIO_INTERFACE:

- descriptor = UsbACInterface.allocDescriptor(this, stream, length, type);

+ if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) {

+ descriptor = UsbACInterface.allocDescriptor(this, stream, length, type);

+ }

break;

case UsbDescriptor.DESCRIPTORTYPE_AUDIO_ENDPOINT:

- descriptor = UsbACEndpoint.allocDescriptor(this, length, type);

+ if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) {

+ descriptor = UsbACEndpoint.allocDescriptor(this, length, type);

+ }

break;

default:

break;

}

Android 双目 单usb,【android9.0】无法打开usb uvc camera相关推荐

  1. AUSBC3.0, 震撼来袭!(UVC Camera,支持开启多路摄像头)

     Android灵活实用的Android平台UVC摄像头引擎,无需任何系统权限即可轻松打开您的uvc摄像头(支持多路摄像头). 您唯一应该做的就是确认您的 Android 设备必须支持 OTG 功能. ...

  2. android 4.0.4 usb调试,安卓手机4.0怎么打开usb调试?图文详解附视频

    安卓手机更新换代的太快,系统每次升级多少会有点不同 总会有那么点不适应,就连如何调试USB都不知道怎么设置了? 下面就来就讲讲目前主流品牌手机4.0手机USB调试. 大部分Android设备打开&qu ...

  3. android 9 电话录音,Android9.0的最大不爽:不能通话录音!国内用户闹情绪

    原标题:Android9.0的最大不爽:不能通话录音!国内用户闹情绪 前些天Android9.0正式版推送了,被命名为"安卓派",这些天不少手机厂商也在陆续行动,越来越多的机型可以 ...

  4. mtk使用android开关机动画,Android9.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)...

    文章较长建议先收藏再看 拆解步骤 1.app 强制横屏显示,无视 android:screenOrientation="portrait" 属性 2.屏幕触摸坐标修改为横屏 3.开 ...

  5. vivo刷android 9教程,vivo Android9.0系统公测:速度再次提升,功能酸爽

    最近朋友的vivo NEX手机收到系统的提示,可以进行基于Android 9.0 的 Funtouch OS 4.5 系统的更新.马上进行了更新,更新之后,在手机的体验上比之前提升了不少.朋友直呼,v ...

  6. android 内置app,android9.0内置APP

    由于android p的代码不同于以往低版本的代码直接可以cp过去,而是在代码的编译同事check一下,多了这一个动作就导致p内置app的时候编译不过的问题,而且错误也是让人摸着头脑,特记录下以防再次 ...

  7. android 不保留活动,Android5.0之后打开开发者选项中的不保留活动,解决方案

    在Andorid5.0之后,在开发者选项中有一项 不保留活动(用户离开后立即清除每个活动) 这是什么意思呢? 假如你从A 界面跳转到B界面. 这个时候你再按返回键,是直接退出了整个应用程序.意思就是销 ...

  8. cv2.VideoCapture(0)无法打开usb摄像头问题

    提示信息: PermissionError: [WinError 5] 拒绝访问. 解决方法: 赋予用户对python的"完全控制"的权限,步骤如下: 找到按照python的位置, ...

  9. 安卓android怎么打开方式,安卓手机USB调试在哪 安卓手机怎么打开USB调试

    作为Android手机,如果我们需要将手机连接电脑传输文件.下载安装应用软件.备份文件甚至ROOT等,都需要打开手机的USB调试.可是每个手机的USB调试的位置和打开的方式都有所不同,不过最底层的An ...

最新文章

  1. Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)...
  2. 一文读懂人类信息存储进化史
  3. OPENSSL X509证书验证
  4. PID:我应该何时计算积分项?
  5. linux下备份mysql日志_Linux下使用Logrotate对MySQL日志进行轮转备份
  6. 【Java NIO的深入研究1】缓冲区
  7. Kylin 对维度表的的要求
  8. SylixOS网络协议栈---Lwip协议栈之ARP表
  9. Atitit.软件开发的几大规则,法则,与原则p821.doc
  10. Android 端的基于TCP的小型服务器_超级简单
  11. VB完全控制IE浏览器,操作ie对象,响应ie事件
  12. Unity UV基于中心点旋转/缩放/位移 Shader
  13. android 蓝牙4.2.2分析研究
  14. 我让我 9 岁的女儿利用 ChatGPT 来学习数学
  15. Ubuntu16.04中鼠标左右键功能相反
  16. MATLAB反三角函数arcsecx, arccscx, arctanx, arccotx, arcsinx, arccosx绘图表示
  17. 正在连接localhost...无法打开到主机的连接。 在端口 8080: 连接失败
  18. 实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点
  19. 给程序员做几年老婆后的心得
  20. wps中自动识别目录之后打开大纲目录会出现上半部分有空白

热门文章

  1. 机器人是如何规划路径的?动画演示一下吧
  2. intellij idea中去除@Autowired注入对象的红色波浪线提示
  3. 用30行代码做一个微信智障机器人
  4. hadoop、spark/storm等大数据相关视频资料汇总下载
  5. shell 读取配置文件
  6. SpringMVC通过注解在数据库中自动生成表
  7. jbpm知识点——tasknode
  8. html左浮动不管用图片往下放,html - 如何在HTML / CSS中水平对齐图像(浮动和显示内联块不起作用) - 堆栈内存溢出...
  9. sdr 软件_SDR 软件定义的无线电
  10. 软件是计算机什么及相关文档的总称,1冯-诺依曼原理的基本思想是什么.doc