AM335X——USB摄像头

CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2019/06/23/AM335X——USB摄像头/#more

记录使用AM335X,在LCD和Web上显示USB摄像头图像。

之前在Tiny4412上学习了UVC,并在Tiny4412的LCD上显示了USB摄像头图像。
最近需要在AM335X上,实现USB摄像头图像在LCD和Web上显示,简单记录一下。

1.准备工作

1.1 修改UVC驱动

参考之前博客博客Linux摄像头驱动2——UVC_2.2移植内核摄像头驱动里,修改drivers/media/usb/uvc/uvc_driver.cdrivers/media/usb/uvc/uvc_video.c

1.2 添加UVC驱动

在内核里,添加UVC驱动

Device Drivers  ---> 
    <*> Multimedia support  --->
        [*]   Media USB Adapters  --->
            <*>   USB Video Class (UVC)

重新编译内核,烧写。

2.LCD显示

参考之前的博客Linux摄像头驱动3——LCD显示,直接使用代码,交叉编译得到LCD显示程序video2lcd

video2lcd拷贝到AM335X里运行,发现提示报错:

Wrong JPEG library version: library is 92, caller expects 62

video2lcd中的mjpeg2rgb.c会用到libjpeg库,程序里请求的是62版本的,而AM335x里比较新,为92版本,提示不兼容。
看了下LCD显示程序的源码,源码里没看到哪里对版本需求的定义,决定暂时先重新移植62版的libjpeg库。

先下载jpegsrc.v6b.tar.gz,编译该源码会用到libtool-1.5.22.tar.gz,也要下载。

  • 交叉编译libtool-1.5.22
    1、因为是交叉编译,需要先创建安装路径,让生成的文件保存在该目录,避免覆盖主机的相关文件,mkdir /work/out_libtool
    2、解压源码,tar xf libtool-1.5.22.tar.gz
    3、进入解压目录,设置配置文件,./configure --host=arm-linux-gnueabihf --prefix=/work/out_libtool CC=arm-linux-gnueabihf-gcc
    4、交叉编译、安装,make && make install

  • 交叉编译jpegsrc.v6b
    1、先创建安装路径,mkdir /work/out_jpeg
    2、解压源码,tar xf libtool-1.5.22.tar.gz
    3、进入解压目录,设置配置文件,./configure --host=arm-linux-gnueabihf --prefix=/work/out_jpeg CC=arm-linux-gnueabihf-gcc --enable-shared --enable-static
    4、该程序无法自动生成一些目录,手动创建以下四个目录:/work/out_jpeg/man/man1/work/out_jpeg/include/work/out_jpeg/lib/work/out_jpeg/bin
    5、将前面libtool-1.5.22生成的libtoollibtoolize复制到源码根目录,cp /work/libtool/libtool /work/jpeg-6b/cp work/libtool/libtoolize /work/jpeg-6b/
    6、交叉编译、安装,make && make install

/work/out_jpeg/lib会生成如下文件:

libjpeg.so  libjpeg.so.62  libjpeg.so.62.0.0

在AM335x里,执行rm /usr/lib/libjpeg*,删除AM335x的libjpeg*相关文件,复制前面生成的文件到该目录下,因为原来/usr/lib/下还有/usr/lib/libjpeg.so.8libjpeg.so.9,其它程序(后面Web)会用到,还需要执行ln -sf /usr/lib/libjpeg.so.62 libjpeg.so.8ln -sf /usr/lib/libjpeg.so.62 libjpeg.so.9,让libjpeg.so.8libjpeg.so.9软链接到libjpeg.so.62,此时/usr/lib/libjpeg*如下:
{% codeblock lang:shell %}

ls /usr/lib/libjpeg* -lh

-rwxr-xr-x 1 root root 134.3K Jan 1 1970 /usr/lib/libjpeg.so
-rwxr-xr-x 1 root root 134.3K Jan 1 1970 /usr/lib/libjpeg.so.62
-rwxr-xr-x 1 root root 134.3K Jan 1 1970 /usr/lib/libjpeg.so.62.0.0
lrwxrwxrwx 1 root root 22 Jan 1 00:06 /usr/lib/libjpeg.so.8 -> /usr/lib/libjpeg.so.62
lrwxrwxrwx 1 root root 22 Jan 1 00:07 /usr/lib/libjpeg.so.9 -> /usr/lib/libjpeg.so.62
{% endcodeblock %}

此时再执行video2lcd -v /dev/video0 -d /dev/fb0即可在LCD上看到USB摄像头图像。

3.Web显示

MJPG-streamer是一个优秀的开源项目,它可以通过HTTP的方式访问Linux上面的兼容摄像头,从而做到远程视频传输的效果。

Buildroot里添加mjpg-streamer:

Target packages  --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值