嵌入式开发者社区

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

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,% c/ d' O; f2 b
    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入0 D' D5 @6 D4 h) T; t1 U' j; G
"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:
- p% g8 ^- r) n) E5 Rroot@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
7 w( u0 f$ ^9 p! Z" c7 [CAMERA capture
0 c0 i: N# Y6 winput_device /dev/video08 P5 P- \3 u1 J% u. C
Camera-Camera
! C2 @# P' f# Z. O$ n' F( A: Rfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000): \. ^6 z0 F7 j) D' b( t3 [3 i
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
$ h3 F8 M2 |( ?* @4 xfmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000), ?4 X& _& A. e2 r6 o
capture_buff_info[0].length = 4147200, A/ B0 ]6 m! g1 C- k
capture_buff_info[0].index = 0
0 `( i4 ^" j; y0 N- S5 ocapture_buff_info[0].start = 0xb6bec000
& Y( p+ D6 Q" kcapture_buff_info[1].length = 4147200. I! A! N( n2 i& Z) e
capture_buff_info[1].index = 1+ W6 Z. Y0 n- c2 {! M: O5 V
capture_buff_info[1].start = 0xb67f7000) \) X9 m9 ~& V. v6 ]
[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed
; W" S( r) Z) P8 s- FCannot mmap = 2 buffer
- v6 G8 Q( B8 o! uError in opening capture device for channel 0

2 l- d$ e; G0 @- q( O2 | : y$ [, B  i4 a# J) V
我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!1 q" I8 G: @& w1 x  @

作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:46
$ w. i7 r. Y4 o+ x- l/ o  {您的还是默认的bufsize的,再检查一下配置吧

, e: r9 B. m9 b[attach]626[/attach]
/ \! p& A; l7 W: p% w$ Q- `* o$ r- p" r0 @& B% A
看一下,我把环境变量打印出来了,这样配置是对的吗?+ L. c% j: P7 `9 ?" ?
+ L- r5 o0 t% P

0 ~0 t$ Q- X1 C4 Rroot@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
% ^$ I' Y2 d- I7 c7 S5 G$ O, J# a$ {CAMERA capture' X7 R  R' x# Y/ x) e' [
input_device /dev/video0& Q3 w8 V% M; _/ J) R7 E
Camera-Camera
4 Z: P  d- |* _" K, C6 r5 W% ufmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)( y+ ~6 }3 u5 Z; |" i9 d; }
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)1 T: @6 n; y, u3 Q$ y' [3 {
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
4 \5 r3 X+ N. E( @# y- o0 @capture_buff_info[0].length = 4147200
$ H) t* m. a4 t5 V: ]! Z, ^* f; fcapture_buff_info[0].index = 0
, _8 o1 W( C$ Y- Rcapture_buff_info[0].start = 0xb6b40000
" _; H6 S5 I. E9 L% U) @[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd0. H8 O) R9 j: i" [2 d; \
[   74.323663] Backtrace:
! w1 r) ?+ |+ p- w" X% Y[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)* M0 |7 c& A( K0 T2 b6 b1 J8 m
[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:20000093# I4 _' Q, f  i
[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)
0 _1 M: Y& B# ^0 `! ?[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8)- A  F% M( u* |  n
[   74.406178]  r3:c71fbd1c r2:000000008 f) s/ D7 R. h
[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0
; n0 ~6 V' x4 k( c$ W# \[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec). @) ?( l1 _2 h% g3 S
[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)9 N" s3 y  k% ^
[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)4 _* O, E6 p2 J
[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a0) t  D; @3 p, k6 c5 A* I; L
[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110)
  ~# _* e# y; E0 b9 [7 B7 H[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d904 f! N! _+ U& w' H$ F& i7 v
[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)
6 K9 l. l; X( t[   74.556197]  r5:c7ba8c00 r4:c72b69a0
5 A  W7 \7 m% n- j% t2 j1 v. ]" A[   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)
# I. W! {) p! w, m[   74.587055]  r5:c71fe580 r4:c79c2e00
$ F+ B. Y) @' V8 f2 T[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0)! X; V3 V; n0 s  ?# G5 B. o
[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584! _8 i' E! S* Z. o% G
[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)  w4 S- k) m* H& u
[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0)
5 Y% n8 K2 ?. `$ Y: _- ]7 c$ P[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c), f  k1 p! T7 V4 C( ~3 W
[   74.688020] Mem-info:& V5 k  \3 a  S) M
[   74.690383] DMA per-cpu:  q. w; P" O& L3 x4 d% N
[   74.692955] CPU    0: hi:   18, btch:   3 usd:  17  V. E% c' [4 P
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:0, @8 f2 a' m* s: _& x. E
[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:243 B! ?" {/ l5 C8 S
[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:0. ^! ?! ?  M( I) M+ z: Q9 V
[   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:739/ M  x7 X& Q% C) S4 [
[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:0
9 P2 ]4 ~3 g" t! M6 c, m2 G: i8 [[   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
8 d7 G; }% v6 D: }) n. e[   74.846179] lowmem_reserve[]: 0 0 08 ?# m# c4 m, I0 ~$ M- g, L: W) \
[   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. m, j: P9 L5 Z" H, L
[   74.871095] 5393 total pagecache pages
; L) q6 c' }6 \[   74.874878] 0 pages in swap cache) O; n* m0 @  Z2 S4 F2 l
[   74.896156] Swap cache stats: add 0, delete 0, find 0/0# N) I) c& R; X, _# P/ @+ _
[   74.901444] Free swap  = 0kB/ R0 N4 f* I- G5 R
[   74.904346] Total swap = 0kB
! t* \! F& L: ?& }7 I8 b8 Y' r[   74.946799] 49152 pages of RAM
* `% W8 d. {! N; h+ W2 ?[   74.949901] 25326 free pages4 [5 f* p/ W- s
[   74.952803] 3366 reserved pages
! ^% G; P" E/ R- n- V[   74.966186] 2124 slab pages! S3 F. H" ?. ]; E! Z
[   74.969063] 7387 pages shared
7 w. R9 D4 `9 B, Z* W[   74.972058] 0 pages swap cached. i( ?9 W$ @, N" d
[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed# j8 h3 @; I8 [  l6 m8 j  O5 |$ V
Cannot mmap = 1 buffer6 f: Y; h7 R7 v
Error in opening capture device for channel 0

1 w9 a' {1 h1 o3 P9 q* G2 n& i
/ s9 p1 ^$ t  _- D( J$ {1 a0 |
) t4 P8 A4 _8 m; m这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。
. e% D4 \' v0 y  k
作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:32
3 T5 T  Z2 W" M* k还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...
* E5 l; l% }' ]
我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。: r1 U, |4 V& z8 E3 R  y9 i9 e
第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 29 f, `. m+ m0 Y7 Y7 {" T
" \3 }( A6 [0 o8 {" c
我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16
) }! s2 {/ i& s: }- `$ [在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...

5 L) p2 f. X! O谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:
" l7 n- V9 {4 proot@tl:~# cat /proc/cmdline
1 |! ]- d  P% ]7 p" @. I7 v  v) Kmem=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

' W8 W& s+ ~; @; t 7 o/ r1 _1 i: i+ A4 d1 n& ~( V0 Z
我是按照手册上设置的环境变量,为什么没有成功传递进去呢?5 _9 V; h# t  n6 P; ]0 L
那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!; W9 M0 X' M9 Y) C1 c1 |$ X

3 \. W  F; C* |/ z- `3 H: E以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助! c5 K8 Y5 q' u9 Z' i/ _! z$ m
root@tl:~# uname -a
& ]& E2 F$ a6 G, HLinux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux
0 W! V; [; m- y3 h9 F$ P% i% H2 w

( L9 X- J' L( s
3 O! V2 r8 l8 F2 [& Z9 o
# ?: @4 Q$ Q" u+ B: B5 q; Y: C
作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;( [1 k) y9 V7 f- `$ S  g
第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;, i' M. k6 ]8 G; {( w5 d: x
第三步,重启板子,然后再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% \: i7 }1 c, R
第一步,确认你的u-boot版本是不是v1.5或以上版本;, G8 D2 U; D; }* T
第二步,可以在u-boot里面执行:nand erase 0 20000; ...
2 V; z& h6 E  Q2 }# j
您好,
5 I6 f) C. M- l0 Q9 \我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf
$ V, `: _0 e% W, s3 t0 `' p请问这个是什么版本的?
6 G: i# `2 T5 N' D9 c
6 a) Z/ C/ M- {' s# R. g1 l另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?
% K; X8 c6 a9 s, W9 r我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?
2 F2 `* g' D& d: b
. q2 `+ [' i3 d1 d! k& A6 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 的?
( g" V1 I; V3 d4 ]3 [
! D1 d! j  m8 z问题有点多,希望大神好人做到底,多教教我,谢谢您!
& I' w) s2 {2 ?8 H% o/ [+ u- x
8 P) h2 ?( G9 t, c  ^
作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;8 d% m5 [  F. W! C3 r
- x) b. ]' u, j& g
可以根据环境的光线强度,修改摄像头的亮度参数:   W1 _( M5 s8 Y/ ?
root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode
- _4 f" j4 O1 q& v  ~; ]root@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode
0 H2 f( k$ C9 |. R- O9 Y/ D5 hCloudy & Y* C+ ^6 {/ `& n4 |

6 ~- n" T/ k, k* c0 P6 R参数说明:
& l' O' D5 o6 l( Olight mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home % k& O; D4 F% }# B
" B3 H/ ^0 }, |  }4 {
如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c8 R( `( O4 Q% A! e2 S

3 f3 F! G( ?) ^( }vpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:02
6 c1 N9 q) f9 c  s- YU-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
1 E2 g1 ]6 b1 J) Q4 c5 ]! C' Q9 _1 s" k+ F
可 ...
% Y1 C# s- V, u+ p7 B8 d: N% I2 O
teddy,* w. C0 O) \9 |( Y
新年快乐!5 m* }5 y, d5 K4 m0 t
我按照您提供的方法已经将摄像头调试清晰了。谢谢您。
0 v% W% ]5 r4 h
: a2 v; x) E  M4 w# G( Z, A现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:
" |0 @( c( N: F# c1 a7 t4 Q! Q4 H$ `
vpif_mmap_loopback_sd.c: In function ‘initCapture’:1 g, P* v! N, h, K$ U
vpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)
9 h% C4 W  c6 h8 T7 |5 Cvpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in& `7 d5 f/ Z* o7 J$ U1 |9 Z% r6 T* j
vpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function)
/ k* L, @5 e9 R8 y5 ~* fvpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)
& N$ U' U6 d! S! v! Lvpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)+ }. A" _9 t% w
vpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)
$ Z. g2 C4 z3 `9 evpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)
! {0 b% ~/ y; E1 R: K, G$ y) cvpif_mmap_loopback_sd.c: In function ‘initDisplay’:
- ?8 O" Z' u, u9 d$ M, t* @; e7 S1 z6 Lvpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer   i+ z1 h  F0 \& I

- I. F- Q5 B  y+ S红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?
! u! Y2 ?6 x+ D& x9 y4 z请您再帮我看一看,谢谢。
) l: s; x3 O+ k- F6 Z
作者: teddy    时间: 2016-2-16 09:03
新年快乐!  T6 i% Z" `. v
在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




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