RK3288opencv读取网络摄像头USB摄像头没有显示ttyUSB0,怎么解决

rk3288串口开发
rk3288串口开发
编辑:www.fx114.net
本篇文章主要介绍了"rk3288串口开发",主要涉及到rk3288串口开发方面的内容,对于rk3288串口开发感兴趣的同学可以参考一下。
CSW-RK3288 开发板内置 5 路 UART,分别为 uart0,uart1,uart2,uart3,uart4。
uart0 为 uart_bt,用于蓝牙传输。uart2 为 uart_dbg,用做调试串口。uart 1、uart3、uart4 可做外部串口使用,开发板已将其引脚连接至 J10 处,其中 uart4 和 SPI0 引脚复用。拥有 64 字节的 FIFO 收发缓冲区,支持 5 位、6 位、7 位、8 位数据收发和 DMA 操作。
以下以配置 uart3 为例。
文件 kernel/arch/arm/boot/dts/rk3288.dtsi 中已经有 uart 相关节点定义,如下所示:
compatible = &rockchip,serial&;
reg = &0xff1b0000 0x100&;
interrupts = &GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH&;
clock-frequency = &&;
clocks = &&clk_uart3&, &&clk_gates6 11&;
clock-names = &sclk_uart&, &pclk_uart&;
current-speed = &115200&;
reg-shift = &2&;
reg-io-width = &4&;
dmas = &&pdma1 7&, &&pdma1 8&;
#dma-cells = &2&;
pinctrl-names = &default&;
pinctrl-0 = &&uart3_xfer &uart3_cts &uart3_rts&;
status = &disabled&;
注:uart_gps 在该文件的 aliases 节点中被定义为:serial3 = &uart_
用户只需在 kernel/arch/arm/boot/dts/csw-rk3288.dts 文件中打开所要使用的节点即可,如下所示:
&uart_gps {
status = &okay&;
dma-names = &!tx&, &!rx&;
pinctrl-0 = &&uart3_xfer &uart3_cts&;
将串口驱动编译到内核中,在 kernel 目录下执行如下命令:
make csw-rk3288.img
把 kernel 目录下生成的 kernel.img 和 resource.img 烧录到开发板中即可。
配置好串口后,用户可以通过主机的 USB 转串口适配器向开发板的串口收发数据,步骤如下:
(1) 连接硬件
将开发板 uart3 的 TX、RX、GND 引脚分别和主机串口适配器的 RX、TX、GND 引脚相连。
(2) 打开主机的串口终端
在终端打开kermit,并设置波特率:
$ sudo kermit
C-Kermit& set line /dev/ttyUSB0
C-Kermit& set speed 115200
C-Kermit& set flow-control none
C-Kermit& connect
/dev/ttyUSB0 为 USB 转串口适配器的设备文件波特率与配置 DTS 节点中的 current-speed 属性相同
(3) 发送数据
uart3 的设备文件为 /dev/ttyS3。在设备上运行下列命令:
echo csw uart3 test... & /dev/ttyS3
主机中的串口终端即可接收到字符串“csw uart3 test...”
(4) 接收数据
首先在设备上运行下列命令:
cat /dev/ttyS3
然后在主机的串口终端输入字符串 “csw uart3 test...”,设备端即可见到相同的字符串。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:本文解决办法:
使用usb_cam读取mjpeg格式的usb摄像头时,如果提示类似下述的错误,是因为链接的ffmpeg解码库存在问题。
[mjpeg @ 0x223e460] overread 8
[mjpeg @ 0x223e460] overread 8
[mjpeg @ 0x223e460] error count: 68
[mjpeg @ 0x223e460] error y=38 x=1
[mjpeg @ 0x223e460] error count: 64
[mjpeg @ 0x223e460] error y=34 x=1
[mjpeg @ 0x223e460] error count: 68
[mjpeg @ 0x223e460] error y=40 x=4
[mjpeg @ 0x223e460] error count: 64
[mjpeg @ 0x223e460] error y=42 x=1
[mjpeg @ 0x223e460] error count: 64
[mjpeg @ 0x223e460] error y=31 x=0
[mjpeg @ 0x223e460] error count: 64
[mjpeg @ 0x223e460] error y=30 x=37
[mjpeg @ 0x223e460] overread 8
解决办法是安装新版本的ffmpeg,然后修改usb_cam的cmake依赖库链接设置
1.ffmpeg的安装
mkdir ~/ffmpeg_sources
cd ~/ffmpeg_sources
wget http:
tar xjvf ffmpeg-snapshot.tar.bz2
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
./configure
--prefix="$HOME/ffmpeg_build"
--pkg-config-flags="--static"
--extra-cflags="-I$HOME/ffmpeg_build/include"
--extra-ldflags="-L$HOME/ffmpeg_build/lib"
--bindir="$HOME/bin"
--enable-shared --enable-pic --extra-cflags="-fPIC"
make install
2. 现在ffmpeg开发库已经安装在home目录下的ffmpeg_build文件夹内,修改usb_cam的cmake文件
为了方便自己,这里有一份已经修改好的,git clone下来后,将CMakeLists.txt文件中对应下文部分的xiaoqiang替换成自己的用户名即可。ffmpeg库API一直在变化更新,上述修改好的usb_cam版本解决了这些匹配问题,因此推荐使用。
## pkg-config libraries
## find_package(PkgConfig REQUIRED)
## pkg_check_modules(avcodec libavcodec REQUIRED)
## pkg_check_modules(swscale libswscale REQUIRED)
set(avutil_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libavutil.so.55)
set(avcodec_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libavcodec.so.57)
set(swscale_LIBRARIES /home/xiaoqiang/ffmpeg_build/lib/libswscale.so.4)
set(ffmpeg_INCLUDE_DIRS
/home/xiaoqiang/ffmpeg_build/include/)
3.执行catkin_make,重新编译usb_cam,问题解决
cd ~/Documents/ros
catkin_make
4.对于蓝鲸智能的小强用户,现在使用下述命令可以正常以mjpeg方式获取小车的usb摄像头数据,修改launch文件中的分辨率为还能获取30fps的1080p图像。
roslaunch usb_cam ov2610mjpg.launch
本文已收录于以下专栏:
相关文章推荐
可能有很多人想在ROS下学习视觉,先用摄像头获取图像,再用opencv做相应算法处理,可是ROS下图像的采集可不像平常的read一下那么简单,需要借助外部package的使用。而摄像头即可以用笔记本自...
转眼间,V4L2已经搞了很长时间,从最开始的一窍不通,到后来的渐渐熟悉,从最开始照猫画虎的使用YUYV格式之间转换,到后来使用MJPEG格式读取,中间颇有周折。趁任务完成间隙,来简单总结下V4L2的使...
如题,在做香蕉派的图像处理时需要用到usb_cam这个ros node,在ubuntu上验证之后,打算移植到Banana Pi的Archlinux ARM的时候却发现了一个问题:不像ubuntu可以直...
最近想学学ORB_SLAM2,试试它的AR功能。安装的过程中遇到了一些问题,总结一下:
搭建ORB_SLAM2
ORB_SLAM2的搭建并不难,网上有很多教程,这个就不错点击打开链接 
一、FFmpeg解码流程:
1、注册所有容器格式和CODEC:avcodec_register_all();
2、查找对应的解码器:avcodec_find_decoder(AV_CODEC_ID...
[root@localhost input_uvc]# pwd
/opt/FriendlyArm/mini2440/WebCam/mjpg-streamer/mjpg-streamer/plugins...
环境:主机win7 64bit,虚拟机VMware8.0 - ubuntu12.10
问题:虚拟机Vmware无法识别USB设备(usb摄像头)
解决方法:
(1)将主机中”我的电脑...
转自:http://blog.csdn.net/yake827/article/details/
在上节已经实现了单张图片的ROS实现,而在现实中,我们一般是使用摄像头来获取...
ROS安装USB摄像头
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)14862人阅读
硬件编解码(14)
&13642人阅读&&&
android(18)&
多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。
V4L2_PIX_FMT_H264
帖子大意:
讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)
默认Android不提供访问外部摄像头的API,所以你要考虑写一个内核到Android应用层通信的中间件。
当你给设备接入了USB摄像头,首先要检查一下几点:
1)你的设备是否支持USB-OTG?
2)是否在/dev目录创建了设备?如果创建了就那么一切就很简单了。shell 执行 ls -l /dev/v*,你将会看到video0或者video1。
3)如果/dev没有创建设备,你需要写一个固件(UVC)跟硬件通信!
(帖子地址:&... android-application)
读到这里,再次给我的MK802接上USB摄像头,然后打开adb shell,执行ls -l /dev/v*,看到了 /dev/video0设备!
拔掉摄像头,再执行,video0消失,再连接,video0出现,这说明mk802支持我的摄像头!
到此,已经明确,下一步我需要写一个android应用层到内核通信的中间件,我对这个也不了解,于是在google狂搜“android usb camera”
终于功夫不负有心,找到了一个android usb摄像头的应用例子
从中找了一个SimpleWebCamra.apk,下载了赶紧装上,发现不能运行,logcat报一个错,提示没有权限访问video0设备。
这是为什么?我的系统已经root了呀!难道我的apk也要获得root权限?又在网上查资料,试了半天,还是不行。
后来忽然灵机一动,android也是linux呀,我能不能把video0设备设置成没权限?问了问朋友,执行了一个命令:
chmod 777 /dev/video0&
再次运行apk终于跑起来了!(后来经测试,设置成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含义。。)
但是问题又来了,程序进去以后,报错
VIDIOC_DQBUF error 22, Invalid argument
于是想,必须要活的SimpleWebCamea的源码了!经过苦苦搜索,很幸运的找到一个simplewebcam的源码:
下载一看,里边包含ndk的c源码和android源码,于是按照ndk教程,安装了cygwin
苦于c代码看不太懂,错误提示VIDIOC_DQBUF 调用参数错误,却无从下手。
于是看了n篇教程,偶然发现说打开摄像头设备的open方法的一些参数,然后试着把c代码中的一些参数去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
fd = open (dev_name, O_RDWR);
再次build,运行,天啊终于出来了,高兴死了!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2701752次
积分:24309
积分:24309
排名:第283名
原创:52篇
转载:755篇
评论:290条
(2)(1)(4)(6)(1)(1)(4)(9)(1)(4)(7)(2)(1)(5)(5)(7)(8)(7)(3)(5)(11)(4)(5)(9)(6)(4)(8)(8)(10)(13)(10)(21)(24)(6)(4)(29)(19)(12)(24)(12)(4)(6)(5)(16)(27)(23)(17)(5)(15)(23)(50)(6)(5)(19)(11)(9)(2)(13)(15)(19)(1)(2)(2)(11)(8)(2)(14)(1)(9)(6)(8)(2)(2)(29)(41)(24)(36)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'4445人阅读
RK3288(4)
c/c++(13)
曾经在全志平台上调试过UVC摄像头,当时调试过程比较流畅,丝毫没有碰上异常情况,这一次在RK上碰到较大的困难,下面介绍一下我的调试过程。
首先,不用说当然在内核配置中配置上UVC摄像头,重新编译内核,烧录。
然后查看内核信息,cat /proc/kmsg & &然后接上摄像头,会看到类似的设备信息,说明我们的摄像头已经可以正常使用了。
usb 1-1.1: new full speed USB device using address 3
usb 1-1.1: New USB device found, idVendor=0ac8, idProduct=3450
usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.1: Product: Deasy USB2.0 Camera
uvcvideo: Found UVC 1.00 device Deasy USB2.0 Camera (0ac8:3450)
接着我们可以在/dev 目录下看到 videoX 的节点。
然后,尝试一下用系统相机看看是否能点亮摄像头,这里提示我无法连接上摄像头。
E/SensorService(
471): Error activating sensor 0 (Operation not permitted)
V/CAM_PhotoModule( 1041): On resume.
V/CAM_PhotoModule( 1041): Executing onResumeTasks.
V/CAM_PhotoModule( 1041): Open camera device.
V/CameraHolder( 1041): open camera 0
E/CameraService(
163): CameraService::connect X (pid 1041) rejected (invalid cameraId 0).
这里只能看出来CameraService 连接相机0失败,invalid
cameraId 0 除此之外,不太明白为什么会有这样的信息。
抛开系统相机我们先自己写一个小应用来测试一下video是否正常工作。
linux下的摄像头驱动框架是V4L2,只要根据相关的API来写测试程序,然后封装成JNI函数,交给Android层调用即可。
这里我比较懒用了一下一个开源项目的相机demo来验证我的相机在当前环境下是工作正常的。
SimpleWebCam
https://bitbucket.org/neuralassembly/simplewebcam/src
附件也会提供这个项目稍微修改过的工程,因为涉及到Jni代码的编译,直接提供的工程就省去很多麻烦。
这里存在一个权限的问题,只是测试用,chmod 777 /dev/video* 防止因为权限打不开相机.
这里用的640x480 resolution with YUYV format 的可能有些摄像头不支持,就需要研究一下改一下JNI代码了,
然后确认了LINUX驱动层不存在问题,我们就开始考虑一下故障的地方在哪里了。
frameworks/av/services/camera/libcameraservice/CameraService.cpp 查看异常的日志是哪里打印出来,很快就发现
if (cameraId & 0 || cameraId &= mNumberOfCameras) {
ALOGE(&CameraService::connect X (pid %d) rejected (invalid cameraId %d).&,
callingPid, cameraId);
return -ENODEV;
然后 我们知道cameraId==0, 那么 Cameras的数量是0
为了验证相机的数量,我们在上一次启动相机的时候打印确认一下是不是真的是0
然后打印调试信息,发现确实是获取Camera的数量是0,这里相机的数量是直接调用HAL层相机的层层封装函数得到的。
那么很有可能uvc热插拔信息并没有在HAL层更新出来,从而导致并不知道存在这一个相机。
这个推理是通过我反复重启发现有事确实可以打开相机,但是死机了。
packages/apps/LegacyCamera/src/com/android/camera/CameraHolder.java
这个是相机程序的代码,可以看出是直接获取相机数量 。
android.hardware.Camera.getNumberOfCameras();
private CameraHolder() {
HandlerThread ht = new HandlerThread(&CameraHolder&);
ht.start();
mHandler = new MyHandler(ht.getLooper());
mNumberOfCameras = android.hardware.Camera.getNumberOfCameras();
mInfo = new CameraInfo[mNumberOfCameras];
for (int i = 0; i & mNumberOfC i++) {
mInfo[i] = new CameraInfo();
android.hardware.Camera.getCameraInfo(i, mInfo[i]);
if (mBackCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_BACK) {
mBackCameraId =
if (mFrontCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT) {
mFrontCameraId =
这里稍微增加cameraopne的时候去读相机的信息。
1.死机后的信息
D/CameraHolder( 1043): CameraHoler().go
D/CameraHolder( 1043): mMockCameraInfo ==null, getNumberOfCameras()
D/CameraHolder( 1043): return number === 1
2.提示打不开的信息
D/CameraHolder( 1043): CameraHoler().go
D/CameraHolder( 1043): mMockCameraInfo ==null, getNumberOfCameras()
D/CameraHolder( 1043): return number === 0
说明了一切问题的根源在于相机打开的过程中获取相机数量是不正确,这里又查看了CameraHal代码被加载的流程分析,发现
uvc摄像头是在CameraHal代码被加载后才发现的,非常关键的信息是存储在HAL层的一个数组中的。
那么,我们肯定了HAL层不支持热插拔,那么如何要支持热插拔呢,我们需要分析一下cameraService中的流程。
frameworks/av/services/camera/libcameraservice/CameraService.cpp
这个函数非常关键,我们发现这里加载的HAL的初始化代码,我们也通过上面的日志得出hal实际上能获取数量的,只是当时确实是没有相机。所以,我们修改了getNumberOfCameras函数,每次发现没有摄像头说明,就应该重新初始化一次这样就解决了热插拔的问题。 那么问题来了,当我有两个随意的摄像头时,随意热插拔还是有问题,那么改成&2 吧,最大只支持两个相机。
int32_t CameraService::getNumberOfCameras() {
if(mNumberOfCameras == 0) {
ALOGE(&no camera found before! check again...&);
onFirstRef();
return mNumberOfC
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:155356次
积分:2184
积分:2184
排名:第18407名
原创:81篇
评论:29条
(1)(2)(1)(1)(2)(3)(9)(2)(5)(1)(1)(1)(1)(2)(2)(1)(1)(2)(2)(8)(4)(10)(22)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 xuggle读取rtsp摄像头 的文章

 

随机推荐