嵌入式开发者社区

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

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,' ^. M+ g2 p3 X+ _
    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入' }( g; J0 E1 z1 S2 v
"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:
/ i, @* x/ ]- O$ yroot@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
. C& H  D8 G2 S$ P( Y9 RCAMERA capture6 f! }2 L' D' |) s: C8 f0 c6 F
input_device /dev/video0
5 U$ G; ^4 c, I, P3 c) ICamera-Camera: R  o0 ?6 `8 B
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
1 W# s) {+ b; G+ v9 q+ {fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
) q9 ]; Y( b' y+ \+ ]0 C5 yfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)* n6 y# l$ d; S$ _2 O! M1 a  q8 v1 U
capture_buff_info[0].length = 4147200
6 l! m; q0 c' z3 D& n; F2 tcapture_buff_info[0].index = 0
. @0 s. w# \' h! K) Mcapture_buff_info[0].start = 0xb6bec0000 B, t! {( P6 c7 ]
capture_buff_info[1].length = 4147200
  l) d, i3 K' J4 Hcapture_buff_info[1].index = 10 X8 U2 h* s2 T* T$ S
capture_buff_info[1].start = 0xb67f70003 A- x6 T3 u+ q- B
[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed7 ~& d$ H/ m- k0 ^8 V$ t
Cannot mmap = 2 buffer  H5 g9 Z7 ?) q% j; L
Error in opening capture device for channel 0
& \0 y+ ]. ?  }& u* o- n

4 t  e; n1 ^! h3 ?" a' _我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!6 J5 A# x: \% s! b

作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:46  i! H1 X1 t) _+ p6 ^
您的还是默认的bufsize的,再检查一下配置吧

4 ]( k  b! [3 P- g[attach]626[/attach]+ x9 e$ h2 D% j' T( i0 X
8 `; d" U+ e3 Y3 }- s$ H
看一下,我把环境变量打印出来了,这样配置是对的吗?
: C$ d; ~" U, c  }6 a5 y  `8 M( h6 }! P& k" Y. k' \9 o

5 @% W2 J  X2 B+ {6 mroot@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2  F% w, P  I5 J$ K& Q0 E" m
CAMERA capture, W7 u. x; e# z& j" n4 S# o: @) e/ K# F
input_device /dev/video0) G! Q+ g& A& x
Camera-Camera4 v. U: M9 q9 A9 X  Z
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
8 R; E1 [6 R8 s$ G* j% O* T( w- \fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)8 Q. t8 D, {, b$ V4 k
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
7 {  R0 W, X/ V0 t' f- u, }& dcapture_buff_info[0].length = 4147200
) w1 a- @3 O4 |. z+ Mcapture_buff_info[0].index = 0  @" m2 C' P- w& z2 f
capture_buff_info[0].start = 0xb6b40000+ y9 V3 a% @. H! V% R0 y* f! O; D
[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd0  N- `& _+ [( S9 B3 g6 z, P
[   74.323663] Backtrace:
1 e( Q; y* l. B4 l: Z+ C, D[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)
% e% B) T3 g0 f7 E8 M) C[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:20000093. m+ ^# F# K/ s0 n
[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)) T9 \8 R3 Y3 F$ P0 ^
[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8)) O* ]1 d! p% p
[   74.406178]  r3:c71fbd1c r2:000000001 ]  v7 G9 ?  F0 u# \
[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0
6 V+ z- h" U! E# ]% w[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec). D. `1 \( v+ n3 f  P
[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)( _* ^. P" I7 t; y3 F8 Q
[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)- C1 ]/ Y. }* n0 Z4 h
[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a0' B$ W& N( ]9 p  I8 p( {7 j8 u
[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110); B' \7 G. p. u. A7 f3 t- J
[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d90
& b2 J/ M8 J: x' ^& q; g% m[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)
$ c  d$ N. \* k# ^8 a2 ^[   74.556197]  r5:c7ba8c00 r4:c72b69a0
0 }5 }9 }2 o& B3 s[   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)
* e- i, P: Y8 M) L% X& [2 G- z[   74.587055]  r5:c71fe580 r4:c79c2e00
* v4 C! Q) [( A! U[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0): }/ y" c# m# o2 I7 O
[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584
& \, l% u) O7 [[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)0 `. o8 [, K6 {! a
[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0)
, f1 m% a9 G  Y+ l& O  P3 [[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)
, T% W3 Q, w$ l' n0 ]" ]$ ~3 P' h[   74.688020] Mem-info:
3 S! w9 P5 M( X/ D: T[   74.690383] DMA per-cpu:3 s8 q9 G% ?% y2 \! H! B
[   74.692955] CPU    0: hi:   18, btch:   3 usd:  17' Q9 l1 F8 C0 n! J
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:01 C: @& ?% I. [5 o$ Z, q/ g7 j
[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:24, m) b6 T- {3 t' a2 u8 _, H
[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:0! |& {% K6 ?7 b1 g) {! ^
[   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:739
2 q4 ~  u; ?7 a) ]6 E, X/ i, K[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:04 ?! m4 t) ^3 f/ K( h& [$ G
[   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: Z* }2 ]9 W' |
[   74.846179] lowmem_reserve[]: 0 0 01 F, `7 c  |. T& e: i( ]) F6 e/ k
[   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 = 42616kB0 |8 j6 N1 ]4 ^0 z. x/ k
[   74.871095] 5393 total pagecache pages& t/ h" c5 S. f$ X* z
[   74.874878] 0 pages in swap cache
  Q, U* N; m( X. a* p[   74.896156] Swap cache stats: add 0, delete 0, find 0/0+ w7 O4 ^, e  p$ J
[   74.901444] Free swap  = 0kB! b/ h$ F; K" Q, p2 B5 F4 B
[   74.904346] Total swap = 0kB; }# V2 q$ m. a2 c9 B
[   74.946799] 49152 pages of RAM
1 C6 x# w6 D8 z, Q0 X5 p[   74.949901] 25326 free pages
) ]4 ?* Q( o% u- y9 ?( s. o[   74.952803] 3366 reserved pages2 W  Z3 _% B$ s7 m
[   74.966186] 2124 slab pages
; O" u7 |, {7 O' Z' Y[   74.969063] 7387 pages shared- H$ ^( P$ `# Y- }* N- @
[   74.972058] 0 pages swap cached
  j" G# Z' h7 d1 S/ t# w4 |6 D[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed- o8 I2 Q( C0 I9 M" }
Cannot mmap = 1 buffer5 }2 K/ |2 T8 F8 b& g" r
Error in opening capture device for channel 0
- D/ p& V, ~& f% |8 O1 B1 h

$ n! ~+ [* w: }8 |
4 ~; o" w* L5 J这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。
/ l  f5 y" N  n( ]0 ]. b/ s$ ]
作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:32# {% j4 n+ _3 J  @4 T) \" t+ x
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...

5 L+ O; Z& \% y; y( t1 s& G我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。
& ]- p( k2 @0 n% n. ?9 i第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2! H5 z0 [# e8 Q4 @( l  G

# {; ~' a5 M. Q+ L: U我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16
' I) d. V8 [* p' s% z% q, d1 E, w; d8 E在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...

, ]# Q( M6 l8 i5 X谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:! x3 B8 N4 Z) \
root@tl:~# cat /proc/cmdline
9 X# B5 }; V& T2 k3 p  lmem=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
9 @* T/ e3 t# q) t' ^5 E+ |
9 M, T% x1 \) Z" \2 S
我是按照手册上设置的环境变量,为什么没有成功传递进去呢?
7 {) `9 q1 U. f+ A& N+ I9 y7 A那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!+ v3 R4 ^8 k; H& V
- B7 t1 X- x3 y7 E3 E# |
以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助, w4 R8 L. k) |
root@tl:~# uname -a
; D2 d- Q0 M6 t. `: fLinux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux
" Q- g' O8 C3 m$ _7 P0 I6 H, i

. _; x% D& I1 a, l% Y
+ S- c! R3 N6 H5 J 0 y6 R2 c4 }1 x7 m) [

作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;4 p  d- U9 n2 J! B& e# A+ k
第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;8 Q& A9 Y( \- E1 x1 v: ~# 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
. H  }- A. c3 A: c第一步,确认你的u-boot版本是不是v1.5或以上版本;
0 b6 E( E4 C! x' Q$ i7 I5 O% i第二步,可以在u-boot里面执行:nand erase 0 20000; ...

5 w+ R% A" \/ c8 q4 w! M您好,6 ]0 m% w* x6 i
我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf  L" l+ Y( `4 C0 L
请问这个是什么版本的?
3 H* j3 N; b" L0 U9 E
# e# H9 V  ~4 S& r  ^- l另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?
) o6 R- H; k( E4 B8 ^我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?
+ d3 c- s1 N2 ]( F- t
# D* U4 H, @# R还有就是想问一下这个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 的?
  c3 @4 ?$ _3 }, f6 @  o - b& a; o9 A' g8 ~( }  a8 a: I
问题有点多,希望大神好人做到底,多教教我,谢谢您!
3 j4 a" Y) q% y% a& D 6 ~9 x) s/ E4 j; J7 Z, p

作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
6 n+ U) H# ~* I- E# Y& F; p0 G/ t$ g4 E, N
可以根据环境的光线强度,修改摄像头的亮度参数: # |7 |: a* l8 G) q3 P" ^; J
root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode   l! _- `; S9 w' p2 u4 m  J. y
root@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode 6 ]8 \" Z$ h# G/ q! D
Cloudy
5 T. e% `0 I5 z6 K3 g
# H1 |/ N9 Z% u: @参数说明: ' P3 J! X0 l- b& ]' C& N% t
light mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home
3 d* A# W0 ~$ a) p) C  X/ t/ N! k( R: |. a0 M
如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c
$ q+ d3 e; b9 O" h
( U, n* k( ^7 O1 I/ Avpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:02
; w6 F9 K$ [6 B( k+ Q% QU-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
4 I8 Q5 C7 c$ a4 S- c7 b
$ O6 x, X! S7 J0 v可 ...

5 }' z# B: h! ?) ?6 V, ~teddy,6 t" }6 z3 p4 f) H7 |
新年快乐!) \; y7 p) ~0 N) B, Y+ H# g2 f
我按照您提供的方法已经将摄像头调试清晰了。谢谢您。
9 ^' y* t1 \) Y( \+ [5 ~
. \! i4 [4 |9 e现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:
( P7 c& e# V1 t/ k$ U6 }5 X& ~0 u2 B
2 c  t8 ~0 \+ K6 m# R4 e. c: @vpif_mmap_loopback_sd.c: In function ‘initCapture’:, h: w" K4 ]% O" A9 {
vpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)
# @0 E% I4 a5 @$ Pvpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in
" N5 L# Q$ @; ^8 {9 w. ^vpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function)
3 u  {+ n: Y% K, f& ~& {' Ivpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)
7 `1 p  k2 |5 p$ _4 `, `3 x! D" @vpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)
% X* M% r. ~- D6 \/ r1 hvpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)6 }* e6 _, z3 @0 y" ^3 v
vpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)1 M( k4 o% J% A
vpif_mmap_loopback_sd.c: In function ‘initDisplay’:& O! s+ b0 Y! x
vpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer
- g  d7 `6 b7 g4 n0 g3 a
3 w5 `7 v6 N( a8 Q/ D0 Z8 q* W红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?6 Y% B6 y- q$ A9 n# t% I8 a* o" k
请您再帮我看一看,谢谢。
9 ^8 l# G' ~8 A% X1 w
作者: teddy    时间: 2016-2-16 09:03
新年快乐!
6 q, v$ v; y0 \: Q6 R在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




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