s5p4418摄像头程序使用教程
本次我采用的硬件设备是nanopiM2,摄像头模块是CAM500B,软件上使用的linux3.4.39内核, 这里nanopi2系列也是适用的,并且对于运行环境也是linux3.4.39的其他s5p4418的开发板也是同样适用的,比如迅为的itop4418等等。
一.本次硬件设备图如下:
注: CAM500B其实就是 OV5640模组,分辨率是500万像素。
二.软件程序 nanocams 介绍
nanocams 是三星官方编写的一套摄像头的测试demo程序,用C++程序的方式编写的程序比较简单,有兴趣的老哥可以研究下其源代码。
github链接地址: https://github.com/friendlyarm/nexell_linux_platform.git
克隆方式:git clone https://github.com/friendlyarm/nexell_linux_platform.git
仓库图示:
克隆下来的源码目录是: nexell_linux_platform 具体文件如下图:
注:从Makefile 可以看到这个源码的编译必须要版本为 4.9.3 的交叉编译工具链编译,否则拒绝编译。
三.编译源码
生成库文件的目录有:
libnxv4l2 、libnxmalloc 、prebuilt 、libnxvpu
生成可执行文件的目录:
nanocams
大概用到的库文件如下拷贝到开发板的/lib 目录下面:
拷贝 nanocams/nanocams 的可执行文件到开发板的 /bin 目录下面即可。
四.nanocams运行测试
由上图可知:
-p 预览图片尺寸
-n 预览帧数
-c 拍照的图片尺寸
-o 保存文件名
0 - 640x480
1 - 800x600
2 - 1280x720
3 - 1600x1200
4 - 2592x1944
那么 -p 1 表示预览图片的尺寸是 800 x 600 , -p 2 预览的图片是 1280 x 700 如此类推,毕竟ov5640支持最大的分辨率是2592 x 1944 详情查看ov5640的数据手册。
以800 x 600 的方式预览,预览40帧后,以 2592 x 1944 的格式抓拍一帧保存为 IMG001.jpg 的运行命令如下:
nanocams -p 1 -n 40 -c 4 -o IMG001.jpg
运行的时候可以发现显示屏能看到摄像头预览的图像,但是最后拍照的时候运行出错了这是为何???
答: 因为拍照的时候最后要用到 s5p4418的硬件编码器去生成 jgp图像,因此需要打开设备文件节点 /dev/nv_vpu 。
五.补充s5p4418的硬件vpu驱动模块 nx_vpu.ko 文件。
三星并无把vpu驱动加入到3.4.39的内核里面只提供了源代码,我们以模块方式编译,源码目录如下:
vim Makefile
编译过驱动模块的老哥都知道模块编译依赖内核源码目录,我们下面修改一下Makefile依赖的内核源码目录开始编译!!
编译过程如下:
最后我们拷贝 nx_vpu.ko 到开发板并加载模块并查看是否生成设备文件节点
/dev/nx_vpu !!
可以发现运行没有再报错了,把生成的 IMG001.jpg 文件发到Windows系统下双击打开即可,拍出来的照有点模糊献丑了: