海思hi3536 usb摄像头驱动配置

Linux系统自带了usb摄像头驱动,在Linux系统中简称uvc驱动,有些系统中默认可能没有配置该驱动,或者需要进行裁剪,这个时候需要自己手动进行配置。配置过程如下:

  1. 在Device Drivers选项下选择Multimedia support

  1. 进入Multimedia support选项,选择Cameras/video grabbers support

  1. 进入Media USB Adapters选项,选中USB Video Class (UVC),可以根据实际需要将该模块编译进内核或者编程成ko文件。

上述步骤完成后可以编译出以下模块,然后用insmod命令加载模块:

insmod videodev.ko

insmod videobuf2-memops.ko

insmod videobuf2-vmalloc.ko

insmod videobuf2-core.ko

insmod uvcvideo.ko

加载成功后,会在板子上/dev目录下生成videoxx节点。然后就可以用Linux下v4l2那套接口采集视频。

下面附一段v4l2采集的demon程序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <getopt.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>#include <asm/types.h>
#include <linux/videodev2.h>#define CAMERA_DEVICE "/dev/video0"
#define CAPTURE_FILE "frame.jpg"#define VIDEO_WIDTH 640
#define VIDEO_HEIGHT 480
#define VIDEO_FORMAT V4L2_PIX_FMT_YUYV
#define BUFFER_COUNT 4typedef struct VideoBuffer {void   *start;size_t  length;
} VideoBuffer;VideoBuffer framebuf[10];int main()
{int i, ret;// 打开设备int fd;fd = open(CAMERA_DEVICE, O_RDWR, 0);if (fd < 0) {printf("Open %s failed\n", CAMERA_DEVICE);return -1;}// 获取驱动信息struct v4l2_capability cap;ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);if (ret < 0) {printf("VIDIOC_QUERYCAP failed (%d)\n", ret);return ret;}// Print capability infomationsprintf("Capability Informations:\n");printf(" driver: %s\n", cap.driver);printf(" card: %s\n", cap.card);printf(" bus_info: %s\n", cap.bus_info);printf(" version: %08X\n", cap.version);printf(" capabilities: %08X\n", cap.capabilities);// 设置视频格式struct v4l2_format fmt;memset(&fmt, 0, sizeof(fmt));fmt.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width       = VIDEO_WIDTH;fmt.fmt.pix.height      = VIDEO_HEIGHT;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED;ret = ioctl(fd, VIDIOC_S_FMT, &fmt);if (ret < 0) {printf("VIDIOC_S_FMT failed (%d)\n", ret);return ret;}// 获取视频格式ret = ioctl(fd, VIDIOC_G_FMT, &fmt);if (ret < 0) {printf("VIDIOC_G_FMT failed (%d)\n", ret);return ret;}// Print Stream Formatprintf("Stream Format Informations:\n");printf(" type: %d\n", fmt.type);printf(" width: %d\n", fmt.fmt.pix.width);printf(" height: %d\n", fmt.fmt.pix.height);char fmtstr[8];memset(fmtstr, 0, 8);memcpy(fmtstr, &fmt.fmt.pix.pixelformat, 4);printf(" pixelformat: %s\n", fmtstr);printf(" field: %d\n", fmt.fmt.pix.field);printf(" bytesperline: %d\n", fmt.fmt.pix.bytesperline);printf(" sizeimage: %d\n", fmt.fmt.pix.sizeimage);printf(" colorspace: %d\n", fmt.fmt.pix.colorspace);printf(" priv: %d\n", fmt.fmt.pix.priv);printf(" raw_date: %s\n", fmt.fmt.raw_data);// 请求分配内存struct v4l2_requestbuffers reqbuf;reqbuf.count = BUFFER_COUNT;reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;reqbuf.memory = V4L2_MEMORY_MMAP;ret = ioctl(fd , VIDIOC_REQBUFS, &reqbuf);if(ret < 0) {printf("VIDIOC_REQBUFS failed (%d)\n", ret);return ret;}// 获取空间VideoBuffer*  buffers = calloc( reqbuf.count, sizeof(*buffers) );struct v4l2_buffer buf;for (i = 0; i < reqbuf.count; i++) {buf.index = i;buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;ret = ioctl(fd , VIDIOC_QUERYBUF, &buf);if(ret < 0) {printf("VIDIOC_QUERYBUF (%d) failed (%d)\n", i, ret);return ret;}// mmap bufferframebuf[i].length = buf.length;framebuf[i].start = (char *) mmap(0, buf.length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, buf.m.offset);if (framebuf[i].start == MAP_FAILED) {printf("mmap (%d) failed: %s\n", i, strerror(errno));return -1;}// Queen bufferret = ioctl(fd , VIDIOC_QBUF, &buf);if (ret < 0) {printf("VIDIOC_QBUF (%d) failed (%d)\n", i, ret);return -1;}printf("Frame buffer %d: address=0x%x, length=%d\n", i, (unsigned int)framebuf[i].start, framebuf[i].length);}// 开始录制enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;ret = ioctl(fd, VIDIOC_STREAMON, &type);if (ret < 0) {printf("VIDIOC_STREAMON failed (%d)\n", ret);return ret;}// Process the frameFILE *fp = fopen(CAPTURE_FILE, "wb");if (fp < 0) {printf("open frame data file failed\n");return -1;}int cnt = 100;while(cnt--){// Get frameret = ioctl(fd, VIDIOC_DQBUF, &buf);if (ret < 0) {printf("VIDIOC_DQBUF failed (%d)\n", ret);return ret;}fwrite(framebuf[buf.index].start, 1, buf.length, fp);printf("Capture one frame saved in %s\n", CAPTURE_FILE);// Re-queen bufferret = ioctl(fd, VIDIOC_QBUF, &buf);if (ret < 0) {printf("VIDIOC_QBUF failed (%d)\n", ret);return ret;}}fclose(fp);// Release the resourcefor (i=0; i< 4; i++) {munmap(framebuf[i].start, framebuf[i].length);}close(fd);printf("Camera test Done.\n");return 0;
}

hi3536 uvc驱动配置相关推荐

  1. 罗技摄像头C270与嵌入式LINUX(linux UVC驱动分析)

    转载地址(原文地址):http://www.eefocus.com/marianna/blog/13-06/294567_a5fc8.html 现在,假如你的手上有一只摄像头,它是罗技高清网络摄像头w ...

  2. USB Camera摄像头 UVC 驱动

    UVC 驱动的代码在linux-3.7.2\drivers\media\usb\uvc 中 我的摄像头终于出现图像了! 李迟按:本文章不是教程,不是心得总结,而是记录我在做毕业设计过程中遇到的一些问题 ...

  3. hi3536 pcie驱动学习笔记

    Hi3536 PCIE学习笔记2(linux3.10.y) 一.PCI总线简单介绍 1.PCI总线配置 两类配置请求:Type00h配置请求,Type 01配置请求.Type 00h配置请求:访问与H ...

  4. eclipse新建项目有红叉_selenum+java+eclipse环境搭建和浏览器驱动配置

    一.环境搭建 准备:安装JDK.安装eclipse.下载selenium包(下面以selenium3.1为例) 1.高级--环境变量 1)创建一个变量名为:JAVA_HOME,变量值为:jdk的安装目 ...

  5. cyclone iv 器件手册_GaN器件的直接驱动配置

    受益于集成器件保护,直接驱动GaN器件可实现更高的开关电源效率和更佳的系统级可靠性. 高电压(600V)氮化镓(GaN)高电子迁移率晶体管(HEMT)的开关特性可实现提高开关模式电源效率和密度的新型拓 ...

  6. Linux摄像头UVC驱动第五篇--启动传输之设置摄像头参数

    本章主要实现 myuvc_vidioc_streamon()即启动传输 中的摄像头参数设置 向USB摄像头设置参数: 比如使用哪个format, 使用这个format下的哪个frame(分辨率),参考 ...

  7. 自己写的uvc驱动支持IP2977/ip2970

    /* 作者: 453411484@qq.com * 此驱动程序是基于linux2.6.31.14内核 * 上一篇自己写的uvc驱动程序是针对环宇飞扬6190来写的,有一些缺点,这些缺点在本次的驱动 * ...

  8. LittleVGL踩坑指南03:Arduino下显示和触摸驱动配置(TFT_eSPI)

    文章版本7.10,LVGL更新极快,不同版本配置方法可能存在差异 前言   触摸搞了好几天,坑太多了,好在总算飞过来了.顺便把显示驱动也写了:提前说一下,我的硬件是2.4寸ILI9341驱动屏幕+XP ...

  9. [学习开发板]iTOP-4412开发板AVIN驱动配置

    平台:iTOP-4412开发板[学习开发板] 本文学习开发板AVIN模块的驱动配置 在内核目录下执行命令"make menuconfig" ,如下图: 将会打开内核的配置界面,如下 ...

最新文章

  1. 教育学专硕考试科目计算机,2017考研:哪些专业的考试科目相同?
  2. 【转】HTTP Header 详解
  3. VTK:小部件之BoxWidget
  4. 【Linux】一步一步学Linux——pmap命令(145)
  5. SpringAop对struts2的Action设置切面织入时报错java.lang.NoSuchMethodException
  6. C++笔记121023
  7. iPhone 12系列又有新变化:免费的有线耳机可能不再有
  8. 可以分屏的软件_Screen分屏软件下载|Screen+专业分屏 免费版v1.4.25 下载
  9. 线程同步--关键代码段(一)
  10. 用html代码实现做题记分,html解析cricinfo记分卡
  11. 文华wh6如何修改服务器,文华财经 软件特色功能介绍修改
  12. html文件变成桌面背景,将HTML文档设置为Windows桌面背景
  13. 我在印尼工作的日子-基本环境
  14. 电脑打开html不显示图片,网页不显示图片,教您网页不显示图片怎么解决
  15. python 计算箱线图、中位数、上下四分位数等
  16. 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(上)
  17. Python学习初阶:Python基本介绍及常用数据类型
  18. VMware系统启动假死,一直处于“繁忙”状态
  19. AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(阅读笔记)
  20. PCA(Principal Component Analysis)数学分析

热门文章

  1. Android OTA 相关工具(四) 查看 payload 文件信息
  2. java流浪动物救助系统(毕业设计)
  3. 向军html视频教程
  4. acm-(模拟、暴力枚举)Codeforces Round #664 (Div. 1) A. Boboniu Chats with Du
  5. 【C++】经典项目控制台贪吃蛇小游戏详细教程
  6. 23考研截至目前,计算机/软件等专业调剂信息集合!
  7. 常见浏览器Agent代理信息
  8. 学校计算机有麦克风吗,电脑使用麦克风需要声卡吗?为什么有人说需要,有人说不需要呢?...
  9. **磁卡只读RFID智能卡管理读写器Z100-RF卡片初始化**
  10. php mmseg,coreseek+sphinx+mmseg中文分词安装