嵌入式开发者社区

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

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,
# b3 t# L. V0 {9 d    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入
  O' U  C4 `9 m"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:
/ e& J2 @# o7 R: y0 P6 Croot@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
7 c; f) ^8 u; f- p& A7 `- n5 pCAMERA capture
" O! G* `9 {- ~4 ]input_device /dev/video0& C4 z/ L! @& z! f0 k: O
Camera-Camera) J7 M1 E$ k) Y0 ]+ h
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
+ U1 o! |! H8 `fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
- G' F6 T  p  L  K5 }% v! c* ^fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
/ H' w6 a7 b* \capture_buff_info[0].length = 4147200* }1 [. s* l8 Y% {" [2 `
capture_buff_info[0].index = 0/ s2 S# Q! b/ [7 ?" c& w
capture_buff_info[0].start = 0xb6bec000
, X6 y* S( i( L; C9 h& F$ p  O  }capture_buff_info[1].length = 4147200" T$ L* |6 }8 X- t! s( b! ?
capture_buff_info[1].index = 1
% ~1 L- X( v8 K9 \% i' J4 Scapture_buff_info[1].start = 0xb67f7000
2 f5 ~# m; F0 {4 Q& m$ a: ]9 y& N[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed
; V" p1 s8 Y* J: T3 U  O5 MCannot mmap = 2 buffer# l6 N% g  g% L  D5 H
Error in opening capture device for channel 0
6 C/ {( f+ o3 @  I

  q* z( |$ m6 T0 p4 C0 U我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!4 Y/ D+ @, x5 `" B

作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:46
: M  v( P6 I5 v8 O( z! f3 m, B您的还是默认的bufsize的,再检查一下配置吧

  V6 w, y& r& @  ]" e. C[attach]626[/attach]3 o& d' z$ U9 ^8 L/ u, ~3 v, y4 }

$ W: S7 S! a4 t! e看一下,我把环境变量打印出来了,这样配置是对的吗?
% g2 W0 x% ]% Q( {+ Y- y+ f  H0 ^* q1 C; y( Y
2 c8 W! U6 W+ U' e) ?
root@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
* F. h8 s6 v6 P/ Q3 S9 OCAMERA capture
1 T7 y: t/ X( q; |  b( p! Dinput_device /dev/video0
3 r/ N% r4 m- XCamera-Camera
9 r$ P! g$ W" S  k$ X8 Y9 Xfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)0 U( @3 L, _; n. Z, A
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
1 j) A$ n. v4 |; k* ?7 Afmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
' m2 B: l. E5 }, v; lcapture_buff_info[0].length = 41472005 h0 t% o: r7 ]" g5 m
capture_buff_info[0].index = 07 U$ f6 B' P1 G- \" z1 ?
capture_buff_info[0].start = 0xb6b40000
3 ]- l& ]' L% w$ b* _+ q[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd0! }" Y0 B  s) }" @8 Y; Z
[   74.323663] Backtrace:
. m6 P' y0 A# m[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)/ T2 e5 v& `# E3 t( l
[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:20000093( n( b* d: i- w0 V6 D/ ^
[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)
6 x6 ]# P& U  ?) B  k[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8): ~/ G& |: p& f9 s0 ^/ p+ \; V
[   74.406178]  r3:c71fbd1c r2:00000000( s* r9 }3 I# }9 j6 S9 x# g
[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0
1 d' N6 }0 F1 k* Y( B2 u8 N[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec)$ \& f: Q1 m& j) z4 I5 C
[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)0 \0 W2 Z# Q7 w( e
[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)% f6 k$ \( b/ w/ `0 n9 F
[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a0
, X9 i5 W9 @- G! \; j4 z' `3 Q[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110)& X$ b, l2 T- [
[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d90
* c/ I3 i( b, F) I. p% b+ G1 a  ]7 F[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)
  L6 q, I0 O$ n% @1 R7 v; s[   74.556197]  r5:c7ba8c00 r4:c72b69a0
/ d, u; N: {% b) m9 s+ H[   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)& q& K& @) \5 r2 O
[   74.587055]  r5:c71fe580 r4:c79c2e00
9 ~' J7 h, n% {0 Q2 D[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0)% d. h* S( r1 @6 L; d$ b0 w
[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584
4 @% G2 h4 z8 y* P$ Q1 B( z1 `[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)
, i) M7 n. r1 l6 D) K[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0)
6 _+ I* G1 _( `4 H! U" e1 y  F[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)
0 S: D+ Q6 _6 f1 R4 w9 x0 ][   74.688020] Mem-info:. g$ x5 A4 k0 g* [' a0 k0 C
[   74.690383] DMA per-cpu:
* `. G% W) ^2 `2 W[   74.692955] CPU    0: hi:   18, btch:   3 usd:  17) \) \7 }+ n7 i' k9 t
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:0
" g% n  Y. A% U' [& u* Z[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:24
  L3 L2 F' o! J( b  k2 k, N, \[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:0
$ ]4 X& ~, E' r) J, ][   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:7393 {1 h) L8 u: Y' l: B
[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:0# v& O, D* b2 Y; ]
[   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& ]+ Z3 G; Z; x: l
[   74.846179] lowmem_reserve[]: 0 0 00 P4 Y5 s$ C& y6 N
[   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
+ w: J/ k5 Y" G" l  K[   74.871095] 5393 total pagecache pages1 S9 `/ G: i  m' h* v* o4 T
[   74.874878] 0 pages in swap cache
7 q, e5 ?' D& y8 \  M% i- q: C+ H[   74.896156] Swap cache stats: add 0, delete 0, find 0/0
3 r- N- x/ c2 X; f) n$ g[   74.901444] Free swap  = 0kB
, n0 R) }. t' c5 R7 y[   74.904346] Total swap = 0kB2 d+ K" h4 b6 w/ e& x' ?
[   74.946799] 49152 pages of RAM
" ^/ b$ ?4 ?6 ]' L  x, ^. ?[   74.949901] 25326 free pages
# ^+ j2 X2 [) n: @1 e$ X! B% ?[   74.952803] 3366 reserved pages
5 B" i- y  W# H5 D7 H6 a8 U[   74.966186] 2124 slab pages
) C+ [1 z$ a' M; w: T* ~  B  X[   74.969063] 7387 pages shared# }# n7 U$ H5 y5 o
[   74.972058] 0 pages swap cached9 C- L" ~" M8 U3 L) c6 v1 n
[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed
9 }) ~: E% Q& YCannot mmap = 1 buffer! M# O$ D8 i: M. j+ G2 \
Error in opening capture device for channel 0
: p$ u4 v  a) _  H

4 r& t' ?. j  D5 H0 R* W6 @ ) \, U7 K, a& C
这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。" B6 O  p9 r# F* x! i. S

作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:32
3 U, h/ S7 F/ V+ V. g6 B/ i0 M还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...
9 f  W" X  D$ p7 j2 O
我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。
1 ]. T5 A/ h+ F$ G& d第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
$ a1 u  s0 S9 T( c. P, z+ P
2 n9 b& c$ I5 L0 r+ ~我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16: Q$ r$ X6 K) T$ e3 _* i" e
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...
  E4 h3 K! ]8 ]2 O8 f4 V1 F
谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:
# j1 c8 e0 C) ~5 }$ X( q* `root@tl:~# cat /proc/cmdline
+ P: j- v1 {$ o7 @- c5 m8 O: Jmem=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
) K4 V# h# z+ Z& C9 `* a

( U  _; e* a  J- o3 i; }" k我是按照手册上设置的环境变量,为什么没有成功传递进去呢?
0 S" P6 \" y9 a" r那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!
9 @  {+ ~' Q# S1 ~7 q
6 o( c( S, \1 ?4 Z7 ^以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助0 @1 M) j2 V" L4 Z- R
root@tl:~# uname -a; J6 {9 B$ `, ~% I( q% X' C
Linux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux

7 B: ~7 T3 f$ M, W# y0 H: I   E* \+ m6 x: L# b$ _! \$ {
0 H5 f3 R  s; l) f. T5 }. |% [

+ a0 R) J7 [9 E1 |* q# R3 H
作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;
5 x! N9 z, Z( a第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;4 l4 ]" M" {' W* k
第三步,重启板子,然后再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! T7 w8 z( Q9 z2 q+ H4 b! D2 t
第一步,确认你的u-boot版本是不是v1.5或以上版本;
1 M5 `6 q$ v) b- U! D7 |, g第二步,可以在u-boot里面执行:nand erase 0 20000; ...

! s3 ]+ @) p  A您好,6 F1 O& g- I  k2 `- u( _0 [3 t1 [
我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf0 u: y# h+ W) q" t. ]
请问这个是什么版本的?) g6 m7 U. W. `5 h% ^0 {$ R7 v0 v

7 f4 h- m) P6 ^, z- {, ~另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?
4 R# p* v5 `, o% @% M( V我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?
8 D, F9 w% y) D8 ?' N
. G8 ^3 W3 H; Y, I1 |还有就是想问一下这个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 的?3 P. E  p, Q+ N9 c+ ]0 A1 z, n

2 m9 t/ i; G7 n2 u" @6 v* R( V问题有点多,希望大神好人做到底,多教教我,谢谢您!
7 |8 X- ~! F6 M- u8 P7 s " V- D) L* J+ c7 J

作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
  ^# s- @) r4 z# r; X2 o4 n6 X" ~  J* O# v
可以根据环境的光线强度,修改摄像头的亮度参数:
  q  N7 U6 m5 b: B  _& L2 |root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode / P. c+ _2 k$ [$ M, t$ ~
root@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode & k7 L0 O! E5 R. P5 w, L
Cloudy
  Z" F" a5 ~2 s
2 r9 K- h4 a' T7 e+ A参数说明:
( Q. b. W4 a" @2 `0 Klight mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home
& m+ Q- Y/ F) g- C2 `. f9 E
( g1 c9 c, Z1 n4 P/ K1 W如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c
0 Z) Y- N2 a- [, e$ l) c( {$ L, @% a! {
vpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:023 ?) T4 L; z# b# |" Q
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
) s* M* X  a6 ~* W: V+ d  V' s: g& e$ p8 M: V# _
可 ...

9 H( u7 W" q5 q. z! lteddy,
, Z' z! K: @+ m2 \- s0 G新年快乐!  j9 ^  g0 a. U# D; ?9 G- o
我按照您提供的方法已经将摄像头调试清晰了。谢谢您。$ |- O( r; a" p" b  Q9 v

5 G& _' {7 _$ }现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:& u* u, o; D5 w

5 P2 v8 P3 D+ t. f& Z# Avpif_mmap_loopback_sd.c: In function ‘initCapture’:$ w+ b7 w: ]5 o4 g
vpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)- b3 U+ K! o4 c/ n# ^* @
vpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in" h1 O0 f9 m9 L
vpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function)! z# b& T. z+ \0 Z9 M
vpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)
* n6 W# D$ f9 Mvpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)' S  Q5 D# @/ }" ]7 t
vpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)
; r' [/ d  a& C9 W; yvpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)
- {; u7 L/ S6 J0 e  [5 j8 }" s. ]vpif_mmap_loopback_sd.c: In function ‘initDisplay’:& W$ _' K" [. c
vpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer
' m( h- e! A) {; P" J4 k: j
' U$ R) H: ~9 z红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?8 K: ?/ w/ C' U8 D! K' t
请您再帮我看一看,谢谢。
" X, R# j- M) u" v0 v3 Z. I5 c
作者: teddy    时间: 2016-2-16 09:03
新年快乐!
& O1 z( b( a4 J0 b在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




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