本帖最后由 xusheng 于 2025-9-29 18:18 编辑
【运行环境】: 硬件:Hi3751v352 + HDMI USB Dongle 软件:Android 9 SDK
【问题描述】: 1. 不打开audio capture, 只打开video capute,可以热插拔; 2. 同时打开video 和audio capture,热插拔失效。应用软件无法正常工作。
【问题分析】: 1. 在不启用客户Capture应用程序的情况下,Dongle设备插入和拔除,设备节点是正常增加和删除
插入Dongle设备后,dmesg提示:
usb 1-3: new high-speed USB device number 3 using ehci-platform
uvcvideo: Found UVC 1.00 device USB Video (534d:2109)
hid-generic 0003:534D:2109.0002: hidraw0: USB HID v1.10 Device [MACROSILICON USB Video] on usb-f9890000.ehci-3/input4
拔出Dongle设备后,dmesg提示: usb 1-3: USB disconnect, device number 2
2. 启用客户Capture应用程序后,插入Dongle设备后,dmesg提示: usb 1-3: new high-speed USB device number 4 using ehci-platform
uvcvideo: Found UVC 1.00 device USB Video (534d:2109)
hid-generic 0003:534D:2109.0003: hidraw0: USB HID v1.10 Device [MACROSILICON USB Video] on usb-f9890000.ehci-3/input4
拔出Dongle设备后,dmesg提示: usb 1-3: cannot submit urb 0, error -19: no device
usb 1-3: cannot submit urb 0, error -19: no device
usb 1-3: cannot submit urb 0, error -19: no device 而且设备节点没有自动删除 # lsusb -l
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 003: ID 534d:2109
Bus 002 Device 001: ID 1d6b:0001 手动强制退出客户应用后,该设备节点才会自动删除 # lsusb -l
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001
3. 没有运行客户程序时,拔出该USB设备,中断次数会加1 运行客户程序后,拔出该USB设备,中断次数会持续增加
4. 分析结论:USB设备拔出时,由于客户应用程序一直尝试从相关设备节点读取数据,导致相关节点无法销毁,与内核usb驱动存在关联
【解决方案】 方案1:修改应用程序,在无法获取到有效数据时、主动关闭对相关设备的读取操作,并周期性判断相关设备节点是否存在。 结论:因为android 9 环境下设备节点销毁异常,无法通过常规判断节点是否还存在的方式处理。
方案2:升级到Android 12 版本,内核同步升级为5.1 结论:已在352 DEMO板上验证,Dongle 多次插入及拔出,相关设备节点的创建和销毁正常,客户Capture应用工作正常。
|