嵌入式Linux系列第13篇:USB摄像头拍照

简介: 嵌入式Linux系列第13篇:USB摄像头拍照

1.引言

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

2.环境介绍

2.1.硬件

1) 网上的一个第三方做的NUC972开发板:

有兴趣购买的朋友,可以去他们的淘宝店购买:

https://s.click.taobao.com/X8mza8w

2) USB摄像头


2.2.软件

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

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

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

3.内核配置

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

   

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

插入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!
call yuyv_to_rgb function
yuyv_to_rgb function excute OK!
path3=./jpeg1.jpg  1

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

     

6.结束语

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

目录
打赏
0
0
0
0
7
分享
相关文章
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
157 15
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
154 13
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
309 3
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
304 0
Linux平台x86_64(麒麟|统信UOS)|aarch64(飞腾)如何实现摄像头|屏幕和麦克风|扬声器采集推送RTMP服务或轻量级RTSP服务
国产化操作系统的发展,减少了外部依赖,更符合国家安全标准,并可提升自主研发能力,促进产业链发展,满足定制开发能力,减少了外部技术封锁的风险,提高了国际竞争力,推动了产业升级。目前大牛直播SDK针对Linux平台x86_64架构和aarch64架构的RTMP推送模块和轻量级RTSP服务模块
142 0
FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地
FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地
1539 0
FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地
|
2天前
|
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
45 19
|
17天前
|
Linux 常用文件查看命令
`cat` 命令用于连接文件并打印到标准输出,适用于快速查看和合并文本文件内容。常用示例包括:`cat file1.txt` 查看单个文件,`cat file1.txt file2.txt` 合并多个文件,`cat > filename` 创建新文件,`cat >> filename` 追加内容。`more` 和 `less` 命令用于分页查看文件,`tail` 命令则用于查看文件末尾内容,支持实时追踪日志更新,如 `tail -f file.log`。
45 5
Linux 常用文件查看命令
|
1月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
99 24
Linux系统之whereis命令的基本使用

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等