嵌入式开发者社区

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

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,# |. E) _% }3 d5 C! L. L
    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入" P+ g( p( J6 A) N) q# R
"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:0 C& x4 E: B  R+ s. \9 r+ A
root@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2. C: w7 ~7 B& \7 a
CAMERA capture
* k4 J, J* m( _6 winput_device /dev/video0- z* m# w* U: y# ^3 n. O3 G4 w
Camera-Camera, {& S* P. L/ X) J
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
9 I% E0 Q8 N& I( G1 Y2 ]/ Y. Afmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
9 |# N' y4 F9 B: W  zfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)! @7 @0 Z; I+ E/ o" G7 O! o
capture_buff_info[0].length = 4147200
. }$ Q- ?! {) r! R8 t$ ?# }6 acapture_buff_info[0].index = 0
- n9 X0 H. e4 s& P. O) gcapture_buff_info[0].start = 0xb6bec000& p/ x$ q* d  d8 _' a: u
capture_buff_info[1].length = 4147200- W% `4 R  e2 y; q
capture_buff_info[1].index = 1
. A( B4 b# K6 x  gcapture_buff_info[1].start = 0xb67f7000/ Z) \" e" o; p- [
[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed, z" Y( ?2 m- d7 E8 C: i
Cannot mmap = 2 buffer  W6 v! W+ ^: w, D2 B
Error in opening capture device for channel 0
  _5 ?2 `: J# Z# h

' l; K8 y9 |+ P. t我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!
5 a1 s2 q' O$ m2 E+ p& a' A: b6 l/ K+ l
作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:46. j( a" N5 {3 y' [8 V  L- e" F
您的还是默认的bufsize的,再检查一下配置吧

9 m" h3 }7 _' X% Q[attach]626[/attach]
* |' v" c, L/ L' z8 W" B* X% [; S$ ]3 X
看一下,我把环境变量打印出来了,这样配置是对的吗?
# g( S) L: |7 @, t* [0 p4 d5 |% G% H  W5 c

0 z- {) T0 N; U/ kroot@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
& k& O. ]' o, |* ZCAMERA capture( Q( K/ x) \# E' }9 H6 }
input_device /dev/video0
: {; Z% k& V) g; zCamera-Camera  n" X, D) V7 B4 @9 ?) }/ V
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)  R# B( `: |5 {6 P
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
# {0 r) d6 C9 {% mfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
  M5 I/ o' F- C) Rcapture_buff_info[0].length = 4147200
% ^3 l- p, p/ Ecapture_buff_info[0].index = 0' O/ }, Q$ z& ?- a
capture_buff_info[0].start = 0xb6b40000
- w% J0 e4 [2 U  c; D[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd0- H/ {; i& ?8 c2 q0 Z) K
[   74.323663] Backtrace: + F2 s0 Q: X- _/ z% J& B# c
[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)3 z" O& E( T/ Q4 O; n0 q+ q( [1 n
[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:200000939 A1 Y' K+ W' b4 B
[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)
& x( z8 {2 N/ L9 M' V1 q[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8)
/ h7 ~+ v* X6 d! E[   74.406178]  r3:c71fbd1c r2:00000000
" w/ h/ U6 ~+ r/ @7 H[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0$ k% K8 m  s- }: G, j2 w! s+ W
[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec)
) O* {' r/ s) _: g9 q& r4 B[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)
4 w5 c, C- Y5 C3 Z- g, I[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)
2 i: M& O2 q! H; E! L* n[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a06 M2 `* j& R* E, d' H
[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110)0 k, b) H! |/ B, `3 p
[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d90
6 e. i' O! J$ k# E[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)3 U& D1 S; _: }6 X- f" {2 z
[   74.556197]  r5:c7ba8c00 r4:c72b69a0
9 x( G1 B7 E. G' o+ \' p[   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)" ]; e% V: C3 H" b. _* j' Y, Y
[   74.587055]  r5:c71fe580 r4:c79c2e00
  ^9 s4 W* h, z. c3 D[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0)
! q5 }. q' a- k: H4 W# M+ M[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584
% M# Y$ A) J# g5 g/ a[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)
, f4 ?  P' M  h: A[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0)
2 ~" w9 t5 N8 u: [! h[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)/ {5 [9 i! G3 d0 x4 P3 N
[   74.688020] Mem-info:' x8 c* H4 x( r; G  q
[   74.690383] DMA per-cpu:
- j7 v( M0 Z/ |/ L[   74.692955] CPU    0: hi:   18, btch:   3 usd:  170 G; K! {$ ?& x; K  Z/ V) ~: X
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:0
+ [: R. U: R( I[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:24
9 E7 L7 N* o% E' r' K[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:0; P+ L4 v+ y& z- s
[   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:739
  A5 C* R; m; a- G[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:0
- ?4 G6 q9 k8 G, Z' o6 m[   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
3 P# z. r4 b0 d  x[   74.846179] lowmem_reserve[]: 0 0 04 a0 T3 y. t, j
[   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$ ]$ F% p  E& W1 y' Z! B8 W6 i2 y
[   74.871095] 5393 total pagecache pages
' x1 U/ C+ L1 z' |2 b% G& `/ r[   74.874878] 0 pages in swap cache
% ~3 d/ T0 p' G, V' p[   74.896156] Swap cache stats: add 0, delete 0, find 0/0
' [( g0 Y# _' Z8 P: X, W[   74.901444] Free swap  = 0kB" V* w5 S5 I6 m
[   74.904346] Total swap = 0kB- T; N* i7 E* m- U8 \
[   74.946799] 49152 pages of RAM8 b1 Y& g5 N$ d2 ~. Q+ B/ R
[   74.949901] 25326 free pages
) d- {' M) V: R# h' d6 C[   74.952803] 3366 reserved pages
" J# j& Q& W& y- q6 G[   74.966186] 2124 slab pages
. ?/ Z- S( M  C4 g% A) ~- O[   74.969063] 7387 pages shared1 {5 G0 r1 u2 B" t
[   74.972058] 0 pages swap cached, d' ~- h1 Y9 t9 x$ b
[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed* V$ w1 j3 r$ {2 E5 T. d
Cannot mmap = 1 buffer
4 ]  W5 I5 K+ V; B% qError in opening capture device for channel 0

$ ?. N& F: w/ [! _1 c
+ }# b$ B9 ~7 R. a # V+ b, C: n, Z3 T& W4 k& V6 F
这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。% u% g& [' K6 f) b- u# S# B5 _8 p

作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:327 P0 e: [* _9 M
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...

" v1 q; f4 G1 [1 \我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。/ k) S. w' V% Q- E# X# y( V" I
第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
6 ]  G; P2 c9 h, q' o5 Q
5 a7 c2 q. Z1 v7 ]9 @- x我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16
" @. l+ l8 L7 L5 S9 @% Z在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...

9 n( c  r& h7 e9 ]% e8 Y谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:
: J: d# [& U+ @8 O+ Troot@tl:~# cat /proc/cmdline & w: M# \2 y) `: a( M& i9 n6 E
mem=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

% g  ?8 g& G. ]2 p
5 I, [% m! |, E2 q8 h& j2 p2 |2 D1 Q我是按照手册上设置的环境变量,为什么没有成功传递进去呢?
! R* T4 t) y& m6 ?( F; r$ G6 k那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!
' O+ a# G! d  y; }5 ~) G# @+ ^
/ u" a* ^( `3 l以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助5 B0 w5 O: E0 ]  a% y0 C; m
root@tl:~# uname -a
0 c1 u3 b8 m) g3 ?; r) T8 @Linux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux

8 f5 l. x+ ]9 l3 G * D6 O( H3 I- ?
8 v$ k) N' j/ Z! f6 Z7 F# j: {8 I
/ a2 s1 O9 @% x  H! ~

作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;
% q, r4 L$ i# x. S9 ^! c第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;% z9 O. z: R7 ?5 \" B, j
第三步,重启板子,然后再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
9 j. ~: y& o) `; o1 Y8 n: q( |第一步,确认你的u-boot版本是不是v1.5或以上版本;' [( F. }. P. [0 l# ?! p# A
第二步,可以在u-boot里面执行:nand erase 0 20000; ...
2 \6 B  Y! J2 s; C7 B3 @
您好,! `5 g5 C2 @9 S2 ^$ A' ^
我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf
! h+ k' A( L+ x6 G$ V请问这个是什么版本的?! t" Q) n' S* Y/ u9 M

2 {) C' I! o9 T  `另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?
: d! j, }8 k# S0 z/ M/ ~* D% {  F我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?
: c# i6 p( @! h: ~" m
+ o! ~* h- Z8 D2 ~$ Z5 Y6 \5 ]8 e还有就是想问一下这个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 的?+ H1 r% D0 M& u5 r

7 L/ X. x9 H. G/ l3 b8 {3 J问题有点多,希望大神好人做到底,多教教我,谢谢您!
; l3 g! O6 o2 k9 l, E( R ( _$ [( O3 @. P$ e1 w

作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
2 ?5 a, N. z( t8 P4 G; T$ k3 V- C1 `( u7 |0 W
可以根据环境的光线强度,修改摄像头的亮度参数: " w/ C1 ~+ |: M: l1 r" a- l$ G9 m
root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode # M/ Q0 T% @) h# @+ l' G1 ?
root@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode
$ Z& ?0 E; K3 U' ]$ Q& `0 Z. U! ACloudy
& }4 O3 @; x8 F5 R  j: J- ]% I: L- @. x6 G5 B* [8 }
参数说明: + A6 ?. J" k& B% B
light mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home
* Y+ C4 B+ F. I, I9 M, a5 E
5 S- k4 A6 _2 m, s  E如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c; z9 J: D- u4 r. v# U$ Q7 C$ }
/ H3 [. q. Q3 f( X
vpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:02
" c. P2 \2 s0 k7 r! g( h; _. UU-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
6 D+ I2 M- Y! h) q3 K/ r7 ]. M2 C- C& M* F8 S, i, M
可 ...
, Z$ G  N( g3 \! A2 Y# Q3 K$ d  E
teddy,! E/ G6 W' c2 J1 T. w/ i4 z
新年快乐!0 h0 _+ |) I# A; F
我按照您提供的方法已经将摄像头调试清晰了。谢谢您。
" ?) ]/ c" u+ g: C2 J! m" y- c& S3 b, @0 Q6 X. Z, u
现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:
' |+ O! g/ |8 }) z! G3 o; I$ E1 {, ?* b- e) l) ^0 A4 {
vpif_mmap_loopback_sd.c: In function ‘initCapture’:5 X6 }* W7 o, k8 a' w" S, Z3 ^7 Q, o4 C
vpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)
7 P& w3 _6 S  [  F: fvpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in2 s& @1 a3 ]1 R! K
vpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function); `, v% ?) s* Z" Z0 J
vpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)" d' W3 u2 o1 \( [( q  \! R  R1 w
vpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)) s) q% C+ [  L3 i
vpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)1 F" W; U9 P( Z! k" w
vpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)
- l2 J# q& s6 o, }1 ^5 Q7 Z: e) G6 \vpif_mmap_loopback_sd.c: In function ‘initDisplay’:
" Q* t& Y4 F# jvpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer 7 `8 a# g" w. Q; u0 [4 E" p# G$ Q

  @8 B3 x; ~6 j2 z2 ]' T红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?
% _- D4 \6 J5 L5 g请您再帮我看一看,谢谢。
1 G5 Z" m3 {, I9 Y* \  K
作者: teddy    时间: 2016-2-16 09:03
新年快乐!
, b) L( F; V0 o4 ~- G在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




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