Zedboard-Linux-digilent3.6内核版本不支持USB摄像头问题的解决方案

在基本了解了XILINX的嵌入式开发流程之后,笔者开始着手做在Zedboard上进行视频的采集和图像的处理,参考了下网上的帖子,写了自己的图像采集程序,准备移植到Zedboard上,然后就把USB摄像头连接到USB-OTG上,并将编译好的程序通过FTP协议传递到SD卡上,并执行,竟然发现程序无法执行,但是在PC机上已经调试好的啊,程序应该没有问题,猜想可能是内核的问题吧!经过笔者的仔细分析,最终解决了这个问题,原来是3.6版的内核并没有配置支持V4L2和V4L,所以无法识别到UVC设备!现在将笔者的分析过程详细道来,当然,因为笔者水平有限,难免会有所差错和疏忽,请读者指出,谢谢!联系邮箱:jef199006@gmail.com
 
分析过程:
   在3.6内核中,笔者发现内核并不能识别出Camera,只是能发现USB设备,利用ls命令查看识别的设备,如下所示
zynq> ls /dev                                                                   
1-1                 ram3                tty37                                   
bus                 ram4                tty38                                   
card0               ram5                tty39                                   
console             ram6                tty4                                    
controlC0           ram7                tty40                                   
controlD64          ram8                tty41                                   
cpu_dma_latency     ram9                tty42                                   
dri                 random              tty43                                   
fb0                 root                tty44                                   
full                snd                 tty45                                   
i2c                 timer               tty46                                   
input               tty                 tty47                                   
kmsg                tty0                tty48                                   
loop-control        tty1                tty49                                   
loop0               tty10               tty5                                    
loop1               tty11               tty50                                   
loop2               tty12               tty51                                   
loop3               tty13               tty52                                   
loop4               tty14               tty53                                   
loop5               tty15               tty54                                   
loop6               tty16               tty55                                   
loop7               tty17               tty56                                   
mem                 tty18               tty57                                   
mice                tty19               tty58                                   
mmcblk0             tty2                tty59                                   
mmcblk0p1           tty20               tty6                                    
mmcblk0p2           tty21               tty60                                   
network_latency     tty22               tty61                                   
network_throughput  tty23               tty62                                   
null                tty24               tty63                                   
pcmC0D0p            tty25               tty7                                    
psaux               tty26               tty8                                    
ptmx                tty27               tty9                                    
pts                 tty28               ttyPS0                                  
ram0                tty29               urandom                                 
ram1                tty3                vcs                                     
ram10               tty30               vcs1                                    
ram11               tty31               vcsa                                    
ram12               tty32               vcsa1                                   
ram13               tty33               zed_oled                                
ram14               tty34               zero                                    
ram15               tty35                                                       
ram2                tty36                                                       
zynq> 
查看是否有video字段,无结果
zynq> ls /dev | grep video                                                      
zynq> 
接着查看USB设备,如下图所示,可以看出,已经识别出了USB摄像头的产品ID号---1e4e:0102
而使用dmesg &可以看出已经识别出了Camera了,但是不知的怎么回事就是没有像通常那样将其识别为video0.具体信息如下图所示。
然后运行发送给ZED的程序zed_cam,出错,具体信息如下图所示:
这是因为默认打开的设备是video0,而在dev中并没有这个设备,所以提示这个错误,那么我就假设其是挂载错误了,将其设备名称改为video0,然后再运行./zed_cam,结果还是出错。具体如下图
真心不懂啊!难道是内核编译的时候配置有问题吗?
然而我使用3.3内核却可以,但3.3支持,3.6不支持明显说不通啊,而且我在自己电脑的linux 3.5也可以支持啊?这是什么情况?求解释啊
   另外,3.3内核的情况如下图所示,插上Camera之后,内核就会自动识别
而同3.6内核类似,使用ls /dev | grep video查看是否有这个设备
可以看到,内核已经成功识别设备了,然后我又使用ls /dev查看下是否有3.6内核中的1-1设备。具体如下所示
zynq> uname -r                                                                  
3.3.0-digilent-12.07-zed-beta                                                   
zynq> ls /dev                                                                   
1-1                 ram5                tty4                                    
card0               ram6                tty40                                   
console             ram7                tty41                                   
controlC0           ram8                tty42                                   
controlD64          ram9                tty43                                   
cpu_dma_latency     random              tty44                                   
event0              root                tty45                                   
fb0                 timer               tty46                                   
full                tty                 tty47                                   
i2c                 tty0                tty48                                   
kmsg                tty1                tty49                                   
loop-control        tty10               tty5                                    
loop0               tty11               tty50                                   
loop1               tty12               tty51                                   
loop2               tty13               tty52                                   
loop3               tty14               tty53                                   
loop4               tty15               tty54                                   
loop5               tty16               tty55                                   
loop6               tty17               tty56                                   
loop7               tty18               tty57                                   
mem                 tty19               tty58                                   
mice                tty2                tty59                                   
mmcblk0             tty20               tty6                                    
mmcblk0p1           tty21               tty60                                   
mmcblk0p2           tty22               tty61                                   
network_latency     tty23               tty62                                   
network_throughput  tty24               tty63                                   
null                tty25               tty7                                    
pcmC0D0p            tty26               tty8                                    
psaux               tty27               tty9                                    
ptmx                tty28               ttyPS0                                  
pts                 tty29               urandom                                 
ram0                tty3                usbdev1.1                               
ram1                tty30               usbdev1.3                               
ram10               tty31               vcs                                     
ram11               tty32               vcs1                                    
ram12               tty33               vcsa                                    
ram13               tty34               vcsa1                                   
ram14               tty35               video0                                  
ram15               tty36               watchdog                                
ram2                tty37               zed_oled                                
ram3                tty38               zero                                    
ram4                tty39                                                       
zynq> 
 
看到蓝色部分了吗?这个就是同3.6内核一样识别出来的设备,但是与3.6内核不同的地方是它在识别出1-1设备的同时,又识别出了uvcvideo0,那么它到底能不能正确采集数据呢,带着这个疑问,我使用ftp协议将编译好的elf文件通过网络发送给了zed,并增加了可执行的权限,然后运行,结果如下图所示:
可以看出,已经正确采集了,再将其拷贝的数据发送回主机,查看如下图所示。
到这一步的时候,笔者猜想应该是内核3.6没有开启那个UVC支持吧,那么就先去网站上查找了下该如何配置使内核支持UVC设备,然后将其写入到digilent_zed_config,但是网上也没说,没办法,我就只好自己查看3.3版的digilent_zed_config和3.6版本的digilent_zed_config,对比两者之间具体有什么差别,还真的是给我发现了,3.6版本的digilent_zed_config并没有配置支持V4L、V4L2驱动,然后就按照自己的理解把该设置的参数都设置好了,接着将其拷贝到3.6的源码处,最后make ARCH=arm CROSS-COMPILE=arm-xilinx-gnueabi- digilent_zed_config,接着make,将生成的zImage拷贝到SD卡上测试,打开minicom,然后配置串口参数,接着查看这次是否能够发现video*设备,具体如下图所示:
可以看出现在跟原来的内核比已经能够发现video设备了,另外使用dmesg 查看发现设备信息,如下图所示:
可以看出已经能够发现UVC设备了,好了,现在心里已经有底了,估计会成功的吧,接着下一步,使用ftp将编译好的elf文件发送到zed的SD卡上,并添加执行权限,如下图所示:
完成后,执行该程序,具体执行情况如下图所示:
好了,现在已经知道应该是生成正确的bmp图像了,将其拷贝到U盘上,并在PC机上打开,具体如下图所示。
内核配置成功了!现在就可以继续接着做视频采集和开发了!加油!
另外,笔者将修改后的配置文件上传到百度网盘上了,下面是这个的链接地址,希望对大家有用!解压缩之后,digilent-zed-config_3.6_correct即为正确的默认配置文件。
http://pan.baidu.com/share/link?shareid=482753&uk=438936279
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值