1.引言

本篇介绍USB摄像头的使用,实现的功能是通过摄像头进行拍照,生成jpg格式图片。

2.环境介绍

2.1.硬件

1) NUC972开发板

2) USB摄像头

2.2.软件

1) Uboot继续使用之前文章用的,无须改动。

2) Kernel在上一篇基础上,要做一定的修改,用来支持USB摄像头识别。

3) Rootfs在上一篇用Buildroot生成的基础上,无须改动。

3.内核配置

Linux 内核中已经包含了USB摄像头的驱动,只要勾选上相关配置即可。

Device Drivers -->

Multimedia support --->

[*] Cameras/video grabbers support

V4L2 int device (DEPRECATED)

[*] Media USB Adapters --->

USB Video Class (UVC)

[*] UVC input events device support (NEW)

GSPCA based webcams (NEW) --->

USB Philips Cameras

[ ] USB Philips Cameras verbose debug (NEW)

[*] USB Philips Cameras input events device support (NEW)

CPiA2 Video For Linux

USB ZR364XX Camera support

USB Syntek DC1125 Camera support

USB Sensoray 2255 video capture device

USB SN9C1xx PC Camera Controller support (DEPRECATED)

[*] V4L platform devices --->

配置完,保存,编译,之后下载到板子里。

插入USB摄像头,打印信息如下:

说明驱动已经OK了。

4.libjpeg库安装

之前buildroot编出来的根文件系统里是有jpeglib库的,版本是libjpeg.so.9.1.0,由于我们应用程序依赖的版本是8.0,所以单独编译了一个。

步骤如下:

1) 解压jpegsrc.v8b.tar.gz

2) 进入到解压后的jpeg-8b目录里,执行

./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr

其中:

–prefix参数是强制设定install之后生成文件的存放目录,这里将其放到了交叉编译工具链文件夹的/usr 目录下,放到这里的原因是因为后面编译应用程序时会在交叉工具链的目录下查找相关的库。

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ ./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr

3)make 编译

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make

4)最后make install

topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make install

在/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr/lib下生成相应的库。

注:之前buildroot生成的文件系统里其实已经有了libjpeg,在上面可以看到文件为libjpeg.so.9.1.0,或者我们登陆到板子上

find / -name "libjpeg*" 查找下,在/usr/lib目录下也可以看到

这三者的关系是:

使用ls -al 查看

其中libjpeg.so 和libjpeg.so.9是软连接文件,相当于windows下的快捷方式,如果我们在winscp下查看,可以看到他们的图标上有个箭头

真正使用的库文件是libjpeg.so.9.2.0

5)我们需要将新编译的libjpeg库放到板子上,方法是先把板子上原有的三个文件删掉,然后通过winscp拷贝libjpeg.so.8.0.2到板子的/usr/lib目录下,

最后使用ln -s 源文件 目标文件 命令,新建两个软连接

5.应用程序

应用程序的编译步骤如下:

1) 进入到v4l2_demo目录

2) make编译

3) 生成的可执行文件是bin目录下的mainapp

4) 将其放到板子里,运行结果如下:

# ./mainapp

----------- connected --------------

v4l2_open function open /dev/video0 success!

driver: uvcvideo

card: USB2.0 PC CAMERA

bus_info: usb-nuc970-ehci-2

version: 199276

capabilities: 84000001

Device /dev/video0: supports capture.

Device /dev/video0: supports streaming.

fmt.type: 1

pix.pixelformat: YUYV

pix.width: 640

pix.height: 480

pix.field: 1

Frame buffer 5: address = 0xb6c88000, length = 614400

Frame buffer 5: address = 0xb6bf2000, length = 614400

Frame buffer 5: address = 0xb6b5c000, length = 614400

Frame buffer 5: address = 0xb6ac6000, length = 614400

Frame buffer 5: address = 0xb6a30000, length = 614400

open /dev/video success!

------------- 0

call yuyv_to_rgb function

yuyv_to_rgb function excute OK!

2222222

333333

44444

555555

666666

777777

path3=./jpeg1.jpg 1

8888888

9999999

程序在不断的拍摄并保存图像,图像名称为jpegx.jpeg(x为1,2,3 依次增加)

6.结束语

本篇为大家介绍了Linux下USB摄像头的简单使用,欢迎大家多交流。

TopSemic 让芯片使用更简单

arm linux 识别新硬盘_嵌入式Linux系列第13篇:USB摄像头拍照相关推荐

  1. arm linux 识别新硬盘_嵌入式Linux 的NTFS移动硬盘支持

    本文大部分参考了 我的两个学生移植工作 大部分是重做一遍. 测试环境S3C6410开发板 内核 linux 2.6.28.6 编译器 arm-linux-gcc 4.4.1 一.内核配置 高版本的Li ...

  2. linux系统无法识别固态硬盘_重装Linux操作系统为什么识别不了硬盘

    近日朋友拿了台联想小新本子,靓丽的外观,轻薄的机体,价格也很有吸引力.无奈只有Win10系统,朋友欲采用普华Linux桌面系统来提供业务支撑,而因常规方法无法识别SSD固态硬盘,未能加载Linux系统 ...

  3. 嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植

    嵌入式linux项目开发(一)--BOA移植 项目目标:使用BOA.CGIC.SQLite搭建嵌入式web服务器 一.嵌入式web服务器BOA简介 在嵌入式设备的管理与交互中,基于Web方式的应用成为 ...

  4. arm linux 识别新硬盘_Arm发布首款64位实时处理器CortexR82

    EETOP专注芯片.微电子,点击上方蓝字关注我们 Arm以其在移动设备中的Cortex系列处理器而闻名,然而主流Cortex-A系列CPU并不是该公司唯一提供的CPU,Arm还提供了用于高性能实时应用 ...

  5. linux pwm 调屏_嵌入式Linux系统基于PWM机制的液晶屏背光Backlight功能配置

    在研发嵌入式产品时,往往会用到LCD(液晶屏)来显示图形界面,而液晶屏的显示亮度则需要背光系统去调节. 调光方法: 1.数字调光,又称波宽控制调光(Pulse Width Modulation,简称P ...

  6. linux挂载新硬盘,开机自动挂载

    http://blog.chinaunix.net/uid-7411781-id-2056205.html linux挂载新硬盘,开机自动挂载 Linux的硬盘识别: 2.6 kernel以后,lin ...

  7. linux加新的硬盘,linux添加新硬盘

    1.添加新磁盘 2.fdisk -l查看磁盘被识别的名称 3.如果输入fdisk -l命令没有找到新的磁盘,按下面步骤操作 1)进入到cd /sys/class/scsi_host/ 2)echo & ...

  8. Linux添加新硬盘和扩容已有硬盘

    Linux添加新硬盘 用 fdisk -l 查看下: 图中可以看出 /dev/sdb 是500G,新加的硬盘. 接下来我用命令 fdisk sdb 进行分区,输入 p 查看新硬盘分区,如图: 可以用m ...

  9. linux如何挂载swap分区,Linux挂载新硬盘和创建Swap分区的方法

    Liunx添加新硬盘其实和Windows的操作一样,但一个是图形化操作,另一个是命令行操作,不过步骤是一样,下面就动手演示和讲解 Linux挂载新硬盘 1.查看硬盘信息 命令:fdisk -l [ro ...

最新文章

  1. C linux 深入学习 errorfunction的创建
  2. Nginx禁止通过IP,未绑定域名访问服务器
  3. python 处理url 参数_Python 优雅的处理网页URL参数
  4. spark 提交任务到集群
  5. Java设计模式(一) -- 工厂方法模式
  6. Codeforces - 961E Tufurama
  7. 华为云DevCloud重金悬赏,开发者大赛等你来战!
  8. 设置文字多行显示溢出显示省略号
  9. 认识事件冒泡和事件捕获
  10. 聊一聊数据团队的职责是什么?
  11. ntp子母钟(gps子母钟系统)时钟系统在智能交通系统中的重要性
  12. 我所知道查找算法之斐波拉契(黄金分割法)查找
  13. ReentrantReadWriteLock、StampedLock
  14. 程序人生-哈工大计算机系统大作业2022春
  15. anaconda环境配置pytorch总结,GPU调用失败方法总结
  16. 创业者必学的六种植物[转]
  17. fread函数和fwrite函数的用法
  18. openstack基准测试项目Rally介绍
  19. IOS开发—— 获取AppDelegate的属性或字段
  20. 知识星球《玩转股票量化交易》精华内容概览-2023扬帆起航

热门文章

  1. K8S部署工具:KubeOperator集群规划-自动模式
  2. 【收藏】Win10:路径长度超过260个字符
  3. k8s:Service的四种类型和三种代理模式
  4. jdk8 List集合 Stream distinct() 去重代码示例
  5. 前端动态菜单权限、按钮权限实现思路
  6. 26个LinkedList用法示例大全以及与ArrayList/数组的相互转换
  7. JTextPane设置颜色出现的问题
  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
  9. 将String转换成Int数组-Java
  10. 微信小程序自带地图_【小程序】微信小程序之地图功能