高通平台android 8.1基线某款usb camera打开dev/video1出错

在调试一款USB Camera时遇到打开/dev/video1错误,表现为'Device or resource busy'。经过分析,硬件无问题,UVC驱动已成功注册。问题出在uvc_fops.open调用usb_autopm_get_interface返回-16,表明设备休眠唤醒功能异常。考虑关闭PM_RUNTIME,但Android 8.1中不可行,最后在usb_enumerate_device函数中避免设备休眠使问题得到解决。
摘要由CSDN通过智能技术生成

故障现象:
某客户需要调试一款usb camera,包括黑白和彩色两个sensor:
在这里插入图片描述

在调试中发现调用open函数去打开注册的 dev/video1节点时报错:
USBCamera: Cannot open ‘/dev/video1’: 16, Device or resource busy

分析:
1.首先排查硬件的问题。
把该camera连接到PC,下载通用的camera驱动后,设备管理器中显示:
在这里插入图片描述
使用网上下载的USB摄像头采集调试工具2020可以正常使用的,说明硬件是好的。

2.检查下camera的uvc驱动注册是正常的:
[ 6.406765] usb 1-1: New USB device found, idVendor=15aa, idProduct=1555
[ 6.412464] usb 1-1: New USB device strings: Mfr=3, Product=1, SerialNumber=2
[ 6.419546] usb 1-1: Product: SIT USB2.0 Camera RGB
[ 6.424433] usb 1-1: Manufacturer: Generic
[ 6.428487] usb 1-1: SerialNumber: 200901010001
[ 6.439198] uvcvideo: Found UVC 1.00 device SIT USB2.0 Camera RGB (15aa:1555)
检查dev下成功注册了video1节点。

3.apk会通过ioctl调到uvc camera的open操作。(uvc_v4l2.c)

const struct v4l2_file_operations uvc_fops = {
   
	.owner		= THIS_MODULE,
	.open		= uvc_v4l2_open,
	.release	= uvc_v4l2_release,
	.unlocked_ioctl	= uvc_v4l2_ioctl,
#ifdef CONFIG_COMPAT
	.compat_ioctl32	= uvc_v4l2_compat_ioctl32,
#endif
	.read		= uvc_v4l2_read,
	.mmap		= uvc_v4l2_mmap,
	.poll		= uvc_v4l2_poll,
#ifndef CONFIG_MMU
	.get_unmapped_area = uvc_v4l2_get_unmapped_area,
#endif
};

既然是上层open错误,那肯定是调用到驱动这里的open有错误。
继续添加打印发现是uvc_fops的.open函数uvc_v4l2_open -->ret = usb_autopm_get_interface(stream->dev->intf);
这里返回错误 -16。

4.usb_autopm_get_interface分析。
uvc_v4l2_open函数里会调用usb_autopm_get_interface:

static int uvc_v4l2_open(struct file *file)
{
   
	struct uvc_streaming *stream;
	struct uvc_fh *handle;
	int ret = 0;

	uvc_trace(UVC_TRACE_CALLS, "uvc_v4l2_open\n");
	stream = video_drvdata(file);

	if (stream->dev->state & UVC_DEV_DISCONNECTED)
		return -ENODEV;

	ret = usb_autopm_get_interface
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归心2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值