嵌入式开发者社区

标题: TL2640-COMS摄像头测试 问题 [打印本页]

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,% Z) f2 l- e( ~4 \. `* y; E9 m% O
    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入5 V6 `8 e6 G: M) R
"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:$ y* t1 L) |5 Z
root@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2$ ?. x$ r2 m. P0 H2 L: s
CAMERA capture) {$ V2 N' W: X+ H) f+ L
input_device /dev/video0
5 i) R8 W; F' e- i4 k: hCamera-Camera! B+ Y# N$ a6 Q7 ^( u
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)9 R2 U# g5 z! M( `7 [
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
* h/ C* [2 _9 i) ifmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)4 Y1 L" y4 K. h  T
capture_buff_info[0].length = 4147200
6 B& l' R5 X) C( d1 w: N1 o4 Ecapture_buff_info[0].index = 0; @; g+ b! n$ s; r; W
capture_buff_info[0].start = 0xb6bec000
: k/ B$ A0 w* n& L! @) g, mcapture_buff_info[1].length = 4147200
6 x1 z, H. n7 ncapture_buff_info[1].index = 1
* }/ p2 F7 k$ u* }) D8 l$ T* R! Qcapture_buff_info[1].start = 0xb67f7000" i: R# @" I9 S, f
[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed
* U" R" _3 v5 {/ }( TCannot mmap = 2 buffer: D- [6 n* l, }5 A0 v$ y* z7 S9 |
Error in opening capture device for channel 0
+ c% C! Z9 b% g: r( D9 T$ y/ y0 F
  h: l' l  \+ }4 a8 x& [+ s1 }' E
我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!
! t8 [( n& z' j* `* N
作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:466 B  {6 M$ v5 U) l: G. w
您的还是默认的bufsize的,再检查一下配置吧
" |* ~* z4 X* f# \
[attach]626[/attach]
! v7 y& O2 C7 K
* E- K+ }% ~& p& h- o* ]看一下,我把环境变量打印出来了,这样配置是对的吗?
' @( `/ k$ O, Z  p+ i$ }+ z- P5 _% c7 f
! P9 d8 c" f* H% ^" x5 m
root@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2- ]( G$ H! h4 e5 ^
CAMERA capture
. b' b& ^; T6 C8 p- h' x; i  Binput_device /dev/video09 C3 J+ l1 D  D. O' d- u4 c+ y: M
Camera-Camera' i5 a$ z# F! H# j; X
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000). z& c1 K" v$ y; ?6 a
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)8 b- s4 b$ V% c/ g7 q
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)8 }) ]# {+ d6 J& I1 j; Y4 `
capture_buff_info[0].length = 4147200# J) ^  r; y9 X/ L. x
capture_buff_info[0].index = 0
7 c) u3 n9 l5 V  Ycapture_buff_info[0].start = 0xb6b40000
: R7 O+ N1 ?7 n% L( I; y% }) C9 w[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd07 p: p5 a1 v! e& }! d+ N, ?
[   74.323663] Backtrace:
9 s: C/ q/ j9 R1 _) H[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)7 L, Q! p  `3 ^1 E6 P% {' w5 \" J
[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:200000930 {( T( c3 D$ A" d7 B# Q
[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)( @  ^2 \1 a: g3 \" z' ]: R
[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8)- Q: d3 u( D# Q! k: D& h+ o
[   74.406178]  r3:c71fbd1c r2:00000000$ S$ f# H9 E8 l9 u5 P3 K
[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0
+ a+ A7 M. C+ ?, Z  F% ^[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec)
- s( @4 h) l, a3 a5 Y8 q4 O/ ?[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)
8 T# j  c4 R/ ~+ p[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)3 y7 {8 z; @1 V
[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a0
4 S) O. V- x( ?4 F8 R+ }  i[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110)
. A: Z  ~# p0 E# f  @0 `[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d90
2 G5 C& w1 {& T- l: ^- a9 i[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)
. c4 M  C. _+ M1 z. _/ L! Q[   74.556197]  r5:c7ba8c00 r4:c72b69a0
" `( w1 z$ \  W, L. O" j/ G1 W0 N4 ][   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)
2 r4 D9 @4 a7 x7 Q4 N' S1 _) v' a7 d" O[   74.587055]  r5:c71fe580 r4:c79c2e00
2 F8 T1 U  n$ V[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0)) V( t2 p. G0 ]7 P" \4 P% V
[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584& [7 I0 S8 x) u0 H
[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)
" g& R" Q, [1 I. g. q) u. \[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0)& {6 x* Z: T6 L, J
[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)8 m* T& z9 J  ^9 B/ A0 {  Y
[   74.688020] Mem-info:" E/ H) [1 L: b5 \
[   74.690383] DMA per-cpu:  S7 r6 x/ @/ W1 L+ V; l
[   74.692955] CPU    0: hi:   18, btch:   3 usd:  174 t1 a) |8 D/ J% Y; ~3 |# B
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:0
: A" U) W$ {+ R% N# t" W[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:24: c  i7 O) O/ r. b% S% l- a8 C+ e
[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:04 Z8 ?7 D) j. @- V
[   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:739( K5 d) E+ A( q" Y  A8 t
[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:09 F. F% k2 J5 i8 @4 f! s& P
[   74.766255] DMA free:33856kB min:1244kB low:1552kB high:1864kB active_anon:12004kB inactive_anon:188kB active_file:10736kB inactive_file:21200kB unevictable:0kB isolated(anon):0kB isolated(file):20kB present:97280kB mlocked:0kB dirty:268kB writeback:0kB mapped:8372kB shmem:568kB slab_reclaimable:2020kB slab_unreclaimable:2956kB kernel_stack:576kB pagetables:572kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no$ F( O* K$ |  J) b# _
[   74.846179] lowmem_reserve[]: 0 0 0
0 D1 L4 s! C; Z5 X[   74.849759] DMA: 760*4kB 461*8kB 239*16kB 158*32kB 92*64kB 43*128kB 21*256kB 6*512kB 7*1024kB 0*2048kB 0*4096kB = 42616kB/ ?& _# A- |* r8 x
[   74.871095] 5393 total pagecache pages
5 e) I; [/ _' f' ^7 W7 z, S[   74.874878] 0 pages in swap cache) h/ }0 {/ Q; c& h/ i  t
[   74.896156] Swap cache stats: add 0, delete 0, find 0/0
" g( ^8 P( i" H[   74.901444] Free swap  = 0kB# m: o5 V9 i5 J& t
[   74.904346] Total swap = 0kB
/ j) Z9 k3 |9 m- T/ {+ C[   74.946799] 49152 pages of RAM* A0 b! F0 Y- Q8 q0 S
[   74.949901] 25326 free pages
8 J) }1 _% t! t  ~) a[   74.952803] 3366 reserved pages& i4 x, }$ Z, B$ j# h6 a- z0 k
[   74.966186] 2124 slab pages, w$ f( `; v: A" N2 P* E) i
[   74.969063] 7387 pages shared
. }+ \  n7 B# v. w[   74.972058] 0 pages swap cached
3 c2 w2 G) R' r6 [, C[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed
% V/ @. _+ J7 r) Q- A' M9 q2 f4 T1 m1 zCannot mmap = 1 buffer' C' J8 f7 W% L1 }* T
Error in opening capture device for channel 0
9 P* d6 D( v% J/ }, z
$ W( f2 H. |) {+ h
' e8 m/ W, c) s2 o
这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。  ]4 r7 G% F7 \$ w$ c3 L0 K

作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:32
* e" {) x$ k' A/ g还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...
. {3 M4 o# }- ^, o/ J* N
我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。
8 g, h7 Z- r1 p+ y$ e/ q3 [第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2. ^4 V" d5 f% a6 d) u
* e% a2 l: l2 Z
我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16
+ i% I5 H( h" K: T( B9 i在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...

0 w: a5 W8 N# T谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:4 ?7 }9 J) s# Y8 h& \
root@tl:~# cat /proc/cmdline
+ l8 J3 C. s$ w8 Cmem=32M@0xc0000000 mem=64M@0xc4000000 mem=32M@0xc0000000 mem=64M@0xc4000000 console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw ip=off eth=06:02:40:16:fa:b0 rootwait root=/dev/mmcblk0p2 rw rootwait
1 T+ a3 D. h& y3 D
1 w4 S5 ?7 X0 l/ }5 v1 B4 s
我是按照手册上设置的环境变量,为什么没有成功传递进去呢?
+ m* D0 f: F0 s4 [6 u6 m% d, A那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!; |. g1 s1 z/ s
7 C6 G3 J. H- q# j$ _: ~+ d
以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助
# V$ P* L" ^3 z, v$ f& uroot@tl:~# uname -a
# S4 k% F0 J  o( B' c+ R" b+ ?Linux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux
( h4 }1 ]! K/ m. I

8 U4 A* L5 D" ~/ y0 A : X8 c1 \. k6 a4 i6 x5 M7 \# E

; B7 B  @* W& {" u0 f& n7 j
作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;9 S8 {$ c! b" s8 ^2 N
第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;
. O. i. Y2 b+ U. \9 q, C/ @2 F第三步,重启板子,然后再setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。
作者: aadcfh123    时间: 2016-2-1 10:53
teddy 发表于 2016-2-1 10:12
+ H  B& I2 g* ^8 _1 x  L$ v/ g第一步,确认你的u-boot版本是不是v1.5或以上版本;
5 K0 ~1 K' _# f, g/ j8 J第二步,可以在u-boot里面执行:nand erase 0 20000; ...
7 O# z5 d! e9 a  I$ M, A$ U
您好,
- t8 j' l! ^- s! O/ ?/ x我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf
6 P+ i3 ^& Q! o请问这个是什么版本的?
" D* @* p& ?& \# @
! h6 f- V7 k8 E# X' x另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?& a) [- f2 ]: m5 y4 e: x) D0 ^
我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?9 `0 {1 [+ b$ W6 h
, L, O7 A7 l1 W0 y
还有就是想问一下这个vpif_mmap_loopback_sd是用什么编译的? 之前摄像头不通的时候,我改过vpif_mmap_loopback_sd.c,想用 ioctl(fd,VIDIOC_ENUM_FMT,&fmttest) 打印一下摄像头支持的视频格式,但是我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c(我现在只会这一个编译方法),编译一直出错,能不能写一个编译的指令给我,让我学习一下怎么编译这个vpif_mmap_loopback_sd 的?$ M/ H0 A4 f. n

. H; a# s! v+ |) z3 M) t9 J问题有点多,希望大神好人做到底,多教教我,谢谢您!! `- }1 C5 G2 f: ^2 c

9 M, D1 r# n8 T' m. [
作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
. A6 O6 O' M: H, c7 i) j. x
6 ~% a/ L1 `! H3 D' M) @可以根据环境的光线强度,修改摄像头的亮度参数: - k( l6 ^8 z, P3 B
root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode $ \" E+ X2 w: {9 C' q( b7 ^
root@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode 0 E' U" i8 v( p; }" a- q
Cloudy
" ~7 [" M" n0 I% K7 ~  K$ V# ?7 c2 E+ Y
参数说明:
6 l$ a7 _! R) b, E$ Slight mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home
! h4 f, P  V3 a+ W) ~
. Q' N/ o) v& Q* x4 i. t: W  a6 R如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c# _% \* Y  r- J: J3 c

  g* t; Y8 u$ I: }1 U* M1 x$ Evpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:02
: O' o# e+ i4 G( C  s: ]* FU-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
( m( D1 x% {5 M/ I: `+ m# B& z9 l
2 i: s) j% c# [* \) w可 ...

( ^. g8 F- Q- _; iteddy,$ k( c: f- }( y0 f
新年快乐!9 K5 q9 {" P7 l( a% d
我按照您提供的方法已经将摄像头调试清晰了。谢谢您。
9 J4 ~2 K5 x0 H% C" V9 A
- T9 e( I" W" [( j! u+ d现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:- k% x  x/ a$ K8 d- P
8 y/ k5 P- f$ e! V, W; m% j0 H
vpif_mmap_loopback_sd.c: In function ‘initCapture’:
) r1 g  n1 N# l& `4 Wvpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)
6 c$ l' f  z9 `1 O2 ]8 Yvpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in
, |; l2 |9 `" Y+ A5 z" t/ o+ Wvpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function)
; |9 ]/ a( b8 {* v5 ^3 Y: m9 fvpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)
! o5 M1 }2 F  {vpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)
7 T) P* x  X0 x# Tvpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)
" u$ L) l5 [; {6 Ivpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)
" j- [' o; f$ N+ S) J, Xvpif_mmap_loopback_sd.c: In function ‘initDisplay’:' k# g. B& ?5 W, r0 V! m
vpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer   o6 n' X4 F' }6 ^$ W9 B1 S

" T3 N* ~1 c* k4 [5 S红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?
* g3 t4 j4 c- N% U' a* r请您再帮我看一看,谢谢。% u1 ]6 V6 p6 Y) M$ E/ V. }

作者: teddy    时间: 2016-2-16 09:03
新年快乐!4 {9 B! w* z2 r% d9 J. m& U( f* }6 M
在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4