海思3559上适配UVC摄像头(一) 驱动添加

参考资料:
1、海思官方文档
2、Linux USB 摄像头驱动 https://blog.csdn.net/qq_26093511/article/details/78763824

1 确定 USB 摄像头支持 UVC (在 PC 上)

淘宝找的USB 摄像头厂家买的YUV的摄像头。
接到PC上,
在这里插入图片描述
多了一个摄像头设备。
右键属性 -> 详细信息 –> 属性 选择硬件 ID 查看
海思3559上适配UVC摄像头(一) 驱动添加_第1张图片
可以得到插入的 USB 摄像头 VID:PID 为04f2:b3f0 。 这里的 ID 号可以在下一步 UVC 官方的文档中进一步确定是否被支持。

2 确定 USB 摄像头种类

通过这个网页 http://www.ideasonboard.org/uvc/ 来查看是否支持 UVC,这个网站是 USB Video Class Linux device driver 的主页,里面有 UVC 的详细的介绍。根据前面的打印信息,根据自己的 ID 号, 这里是搜索 USB 摄像头的 VID 号:04f2 和 PID 号:b3f0。

通过摄像头的 ID,可以看到该摄像头是否支持 UVC 和其他信息。绿勾代表支持。
发现没有找到这个型号的。

3. 使用AMCap查看支持的数据类型

AMCap是在windows系统上运行的软件,网上有下载。
海思3559上适配UVC摄像头(一) 驱动添加_第2张图片
依次看了下支持YUY2的 640X480 30帧, 720p 10帧, 1080P 5帧。

4. YUV2 数据格式

跟YUYV是一样的,
格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次。一个宏像素为4个字节,实际表示2个像素。(4:2:2的意思为一个宏像素中有4个Y分量、2个U分量和2个V分量。)图像数据中YUV分量排列顺序如下:
Y0 U0 Y1 V0 Y2 U2 Y3 V2 …

5. 使用 USB 2.0 Host,配置与编译 USB 2.0 Host 相关的内核驱动。

执行:make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig
进入 menuconfig 的如下路径,

Device Drivers —>
 [*] USB support —>
  <*> EHCI HCD (USB 2.0) support
   [*] Improved Transaction Translator scheduling (NEW)
   <*> Generic EHCI driver for a platform device
   <*> OHCI HCD (USB 1.1) support
   <*> Generic OHCI driver for a platform device
 PHY Subsystem —>
  <*> Hisilicon Inno USB2 PHY suppor

USB2.0 Host 配置如下
海思3559上适配UVC摄像头(一) 驱动添加_第3张图片
Multimedia support
Device Drivers —>
  <*> Multimedia support —>

配置如下:
海思3559上适配UVC摄像头(一) 驱动添加_第4张图片

Device Drivers —>
  <*> Multimedia support —>
    <*>Media USB Adapters —>
海思3559上适配UVC摄像头(一) 驱动添加_第5张图片

Device Drivers —>
  <*> Multimedia support —>
    <*>V4L platform devices —>

配置如下:

海思3559上适配UVC摄像头(一) 驱动添加_第6张图片
PHY Subsystem —>
  <*> Hisilicon Inno USB2 PHY support

在这里插入图片描述

6. 修改驱动代码

由于 VID:PID 为04f2:b3f0 的设备不在支持列表
需要修改驱动代码:
尝试修改如下:
driver/media/usb/uvc/uvc_driver.c
增加内容:

......
static struct usb_device_id uvc_ids[] = {
    
 /*XXXX taobao product */
	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
				| USB_DEVICE_ID_MATCH_INT_INFO,
	  .idVendor		= 0x04f2,
	  .idProduct		= 0xb3f0,
	  .bInterfaceClass	= USB_CLASS_VIDEO,
	  .bInterfaceSubClass	= 1,
	  .bInterfaceProtocol	= 0,
	  .driver_info		= UVC_QUIRK_RESTRICT_FRAME_RATE },
       
......

生成的以下ko文件:
gspca_main.ko
uvcvideo.ko
videobuf2-memops.ko
videobuf2-vmalloc.ko
安装顺序安装驱动:
insmod videobuf2-memops.ko
insmod videobuf2-vmalloc.ko
insmod uvcvideo.ko

插入USB 摄像头识别成功,打印如下:

# usb 1-1: new high-speed USB device number 3 using ehci-platform
uvcvideo: Found UVC 1.00 device 5M Cam (04f2:b3f0)
input: 5M Cam as /devices/soc/10120000.ehci/usb1/1-1/1-1:1.0/input/input1

通过命令 ls /dev/video0 查看video 设备

/dev/video0

到此驱动部分添加完成。

你可能感兴趣的:(海思平台(hisi))