嵌入式开发者社区

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

作者: aadcfh123    时间: 2016-1-26 14:44
标题: TL2640-COMS摄像头测试 问题
各位工程师,. b3 l5 k+ q% C1 x
    我在用TL138-EVM-A3开发板,摄像头为TL2640,在开发板快速体验中的 TL2640-COMS摄像头测试,不能实现,我用的Linux3.3内核,U-BOOT 环境变量也已经设置好了,在输入
2 s3 e: R/ |5 H, }% y! F"vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2" 命令后,出现如下错误提示:
& ^9 J* A! b! H) \2 {root@tl:/home/ip_camera# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2! j  X" `* v" x) E
CAMERA capture
2 [' |9 c% ?; V# @input_device /dev/video0" i( |% F& l" E2 \8 `' D
Camera-Camera8 a2 a& M  k/ H4 W. g
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)
, w) n' n5 l0 Y* \# _fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)
$ E7 ~5 f6 y2 I* |( m; o; s9 p3 {  k7 \fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)" ], H2 V9 [0 k3 k& I" f2 z
capture_buff_info[0].length = 4147200
1 F+ w/ n9 D9 Tcapture_buff_info[0].index = 0
' Z% D5 N3 m: S5 Q" f/ V( [capture_buff_info[0].start = 0xb6bec000& c+ N* l! M9 j
capture_buff_info[1].length = 4147200" H; C( J! p0 f# X& W6 `6 [' V* b
capture_buff_info[1].index = 1
5 w( K* G0 ]! xcapture_buff_info[1].start = 0xb67f7000+ p% ~. x2 X+ A2 E) b
[   19.078114] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed) Q! r1 \  k) P) L; d: F
Cannot mmap = 2 buffer7 _4 r  e7 R. P0 w3 N% c( E
Error in opening capture device for channel 0
, i" R+ V9 G) w
  N/ ?& E' j3 b6 H. Y5 J2 {
我是按照开发板快速体验手册操作的,请帮我看看是哪里出了问题,谢谢!
( q. K8 j3 n  U  t
作者: human    时间: 2016-1-30 10:46
您的还是默认的bufsize的,再检查一下配置吧
作者: aadcfh123    时间: 2016-1-30 11:15
human 发表于 2016-1-30 10:46
& s; t  j( K+ W! r! Q, v9 R您的还是默认的bufsize的,再检查一下配置吧
- b3 v5 S8 s$ C# ?! F
[attach]626[/attach]
" }; g$ Y+ T8 \* Z* e$ e$ M: t5 J3 F5 N  ^' c/ b
看一下,我把环境变量打印出来了,这样配置是对的吗?- P4 ^! Q# z' ]8 n- z

* i4 T2 P4 P1 z* s. j0 H. x
% J( |: F& a/ x8 D+ I# g6 w# troot@tl:/home# ./vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
  q" @. J' E, ]" p; B! HCAMERA capture& }, i" F) ?. c" t5 D, I2 q( x" v0 k- ?
input_device /dev/video0
: ?, x0 L/ z. i2 ACamera-Camera! e7 y1 u4 W# Y; Z( |: U1 K
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000)6 M. F6 Z# H# x# X; |( P# V
fmt->fmt.pix.pixelformat(50424752),V4L2_PIX_FMT_YUV422P(50323234),V4L2_PIX_FMT_RGB565(50424752)8 J5 D/ {" Y1 W. A2 r
fmt->fmt.pix.bytesperline(1600),fmt->fmt.pix.sizeimage(960000); k$ \4 l: U. O
capture_buff_info[0].length = 41472003 f( N" f( I4 T
capture_buff_info[0].index = 0
) i2 v8 o; q1 gcapture_buff_info[0].start = 0xb6b40000
% W, c# j4 X" a$ x: j: H+ p! V[   74.316779] vpif_mmap_loopb: page allocation failure: order:10, mode:0xd0. b5 m8 M; e  ]1 ]' b
[   74.323663] Backtrace:
8 W2 K: a: A4 l' z- h* k5 {+ \[   74.333553] [<c000c1a8>] (dump_backtrace+0x0/0x110) from [<c0408194>] (dump_stack+0x18/0x1c)
# ~# p8 e. W# H' j: l, {[   74.356223]  r6:00000000 r5:000000d0 r4:00000001 r3:20000093
. p! S0 [* n, K3 S# ~9 p* y[   74.362055] [<c040817c>] (dump_stack+0x0/0x1c) from [<c005dc50>] (warn_alloc_failed+0xf4/0x118)2 ?. |9 g/ C, A+ B2 t
[   74.386451] [<c005db5c>] (warn_alloc_failed+0x0/0x118) from [<c0060764>] (__alloc_pages_nodemask+0x578/0x5d8). C7 N: y3 }- n; |' H, P* ~
[   74.406178]  r3:c71fbd1c r2:00000000
# s# N0 X+ v8 P1 u[   74.409822]  r7:c05bd478 r6:c71fa000 r5:0000000a r4:000000d0
5 b4 n4 K& t3 y0 {4 v; C- v0 r9 \% N[   74.415828] [<c00601ec>] (__alloc_pages_nodemask+0x0/0x5d8) from [<c000df0c>] (__dma_alloc+0xd8/0x2ec)
+ F% f( ]# [& @! O+ r$ C% {[   74.447742] [<c000de34>] (__dma_alloc+0x0/0x2ec) from [<c000e1b0>] (dma_alloc_coherent+0x5c/0x68)1 ^5 a9 N6 o% ?$ B& {, }
[   74.467181] [<c000e154>] (dma_alloc_coherent+0x0/0x68) from [<c02d5a20>] (__videobuf_mmap_mapper+0xa8/0x180)% l1 _: ]8 ]7 S( X3 n. t- N1 c# o
[   74.496167]  r7:c7182920 r6:c7ba8d90 r5:c71feee4 r4:c72b69a0
+ p5 O3 `( W6 g5 ^[   74.502044] [<c02d5978>] (__videobuf_mmap_mapper+0x0/0x180) from [<c02d36c4>] (videobuf_mmap_mapper+0xc0/0x110)
' Q; d( s: `6 l! y4 a[   74.527223]  r8:c708d300 r7:b674b000 r6:c72b69a0 r5:c72b69a0 r4:c7ba8d90
, v2 }; `0 p- H[   74.534166] [<c02d3604>] (videobuf_mmap_mapper+0x0/0x110) from [<c02de0bc>] (vpif_mmap+0x40/0x50)
" s* `7 i0 X2 t' L[   74.556197]  r5:c7ba8c00 r4:c72b69a0; `! |6 m# n. j
[   74.559945] [<c02de07c>] (vpif_mmap+0x0/0x50) from [<c02c55f4>] (v4l2_mmap+0x70/0x90)( \# C6 l$ D5 P; ^$ i8 [4 \
[   74.587055]  r5:c71fe580 r4:c79c2e00
! Y$ b$ I# Y; j4 [[   74.590771] [<c02c5584>] (v4l2_mmap+0x0/0x90) from [<c007846c>] (mmap_region+0x268/0x4c0)
" X) \$ k' s! I# ?( H& k- D[   74.616153]  r6:c71fe580 r5:000000ff r4:c72b69a0 r3:c02c5584
8 Q' \$ F, d6 p0 @[   74.621976] [<c0078204>] (mmap_region+0x0/0x4c0) from [<c007897c>] (do_mmap_pgoff+0x2b8/0x318)" C7 x6 b( s9 H1 k& K
[   74.646297] [<c00786c4>] (do_mmap_pgoff+0x0/0x318) from [<c0078a74>] (sys_mmap_pgoff+0x98/0xd0). W9 k% y, q% Y4 z( X8 W) F
[   74.655109] [<c00789dc>] (sys_mmap_pgoff+0x0/0xd0) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)
; k5 ~. U5 D- b' J) h$ ?[   74.688020] Mem-info:2 Y4 m& [! u/ i
[   74.690383] DMA per-cpu:& m7 h$ E( O' O$ z' C) R2 u
[   74.692955] CPU    0: hi:   18, btch:   3 usd:  17* ^5 p4 T- q: H
[   74.700640] active_anon:3001 inactive_anon:46 isolated_anon:07 Z5 L3 F* B+ ~1 V
[   74.700664]  active_file:2684 inactive_file:6310 isolated_file:24
1 L9 R& g+ C) M% t[   74.700684]  unevictable:0 dirty:67 writeback:0 unstable:0
8 Q0 t5 Z& \7 r4 a[   74.700700]  free:7432 slab_reclaimable:505 slab_unreclaimable:739
7 K7 E8 H6 w, X# m' E: S[   74.700718]  mapped:2376 shmem:141 pagetables:143 bounce:0% N. L4 F  r% W& _
[   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
! }1 L# k) D/ ]& c1 A- M3 ~. Q; ~  e5 G+ y[   74.846179] lowmem_reserve[]: 0 0 0
" K8 K% p' t# X- D2 X' ^& 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- ?& r, S; K6 q' J$ R! t, F5 l
[   74.871095] 5393 total pagecache pages
/ b% m( i0 B& c, H$ y, F[   74.874878] 0 pages in swap cache
$ x3 _  W) w+ m[   74.896156] Swap cache stats: add 0, delete 0, find 0/0
% p' z( a5 Z% l6 c) Q[   74.901444] Free swap  = 0kB* r# d) `# y. {; J- `4 X; r$ |
[   74.904346] Total swap = 0kB2 k$ p2 w* j$ W5 t
[   74.946799] 49152 pages of RAM$ ^8 }6 d# W4 D- J
[   74.949901] 25326 free pages
3 G/ e# D- Y6 Z: z9 F- _% U8 ~' z+ R[   74.952803] 3366 reserved pages) Z$ \5 \1 }8 k, C/ x0 F9 h
[   74.966186] 2124 slab pages
, H. H7 W7 Q7 L: E- N9 b/ m6 |[   74.969063] 7387 pages shared
  U! p0 P& B6 u; Y[   74.972058] 0 pages swap cached4 ?5 K; u6 X" _9 L! K: r
[   74.975243] vpif_capture vpif_capture: dma_alloc_coherent size 4149248 failed6 n6 O( ]2 I! L2 o  N
Cannot mmap = 1 buffer7 U$ _/ ^, v3 E# ]3 O
Error in opening capture device for channel 0
8 Q/ L1 O6 t( \9 r$ H: i
+ x8 u" B& [5 x3 i- A; C3 j7 [

8 j4 z) C1 V* b% U/ p' Q8 z  u这上面是新的错误提示,请再帮我看看是哪里出了问题,谢谢。& p! ]3 J* ?. T. M: |7 Q; X

作者: human    时间: 2016-1-30 11:32
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的
作者: aadcfh123    时间: 2016-1-30 11:40
human 发表于 2016-1-30 11:32, \& A6 g$ B) s+ i! i) C
还是没对的,直接按手册的步骤仔细对一下吧,改后应该是960000,您的还是4147200的 ...
% t. c5 |" M$ A
我改了的,你看我的printenv 里面,那里设置就是960000,我是按照手册的步骤做的。第一步,先修改U-BOOT里的环境变量,setenv optargs ${optargs} 'vpif_capture_format=RAW vpif_capture.ch0_bufsize=960000' 保存:saveenv。7 k+ x2 {! F& ^1 y! C
第二步,执行vpif_mmap_loopback_sd -c 2 -d 0 -w 1 -m 2
% [) L7 m7 b/ @; i0 N" n
' C" H0 f" A" P我这应该没错吧,或者你给我说下正确的步骤,最好把所有要执行的命令也给我发一份过来,谢谢。
作者: teddy    时间: 2016-1-31 22:16
在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给内核。
作者: aadcfh123    时间: 2016-2-1 08:46
teddy 发表于 2016-1-31 22:16
. ?0 E/ X3 a1 e, b9 l, k  G在内核里面可以查看u-boot真正传递到内核的参数:使用cat /proc/cmdline,看看设置的参数是否有正常传递给 ...
& d5 e4 b7 v# a1 q
谢谢您的回复,我查看了,确实没有把vpif_capture的参数传递进去,以下是cmdline里的参数:
" W  C$ D0 e! @. S! Mroot@tl:~# cat /proc/cmdline
$ Z- C9 ]0 w2 v- imem=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

3 \- W6 B, e/ T6 [8 K: S& U
6 ?& T: y% u2 Y' j: H我是按照手册上设置的环境变量,为什么没有成功传递进去呢?9 T2 x3 c. W) H5 c
那我现在怎么才能把这个环境变量参数传递进去呢?望大神多指教!' U! d6 ]$ ?) y$ S. k
; {1 J  i7 E5 F, P4 P
以下是我内核的参数,是按照手册里制作的SD卡系统,希望对解决这个问题有所帮助7 j( T0 i9 Y, {0 h* V6 i* r
root@tl:~# uname -a
( S. l; Z4 Y8 F  nLinux tl 3.3.0+ #1 g74e120f PREEMPT Fri Mar 13 00:15:15 HKT 2015 armv5tejl GNU/Linux
3 P8 h) }, F8 r2 L
7 Z2 d6 }& V5 Y' S7 [

$ ^" ~$ s! R/ Q: r# N6 N* k
! |" e& Q& f( o$ F$ g0 T' H$ G
作者: teddy    时间: 2016-2-1 10:12
第一步,确认你的u-boot版本是不是v1.5或以上版本;
$ `9 E$ a' g4 E1 g$ J1 F7 e第二步,可以在u-boot里面执行:nand erase 0 20000;擦除之前的环境变量;$ C5 O* _% T) I- ^" T3 e0 P0 M
第三步,重启板子,然后再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" r3 C' |+ ]/ a1 f) m" B/ E
第一步,确认你的u-boot版本是不是v1.5或以上版本;
' C' K( r2 T& f5 ^2 P9 r第二步,可以在u-boot里面执行:nand erase 0 20000; ...
. G5 r% u9 \$ o) B: H& ~  Q/ d
您好,4 n7 C( j7 t& B  A6 g
我不知道怎么查看uboot版本号,百度了一下也没找到方法,这下面是uboot 启动后打印了参数:U-Boot 2012.04.01-00059-g7363edf
; r" }, O" }9 V2 k& x" F请问这个是什么版本的?
3 l, S  {4 Q6 o/ G. Q- A- k6 ` * b7 G' |$ l6 f9 T3 o7 h
另外,为按照您说的把环境全部擦了,然后从新写了一下,现在已经有图像了,但是非常的模糊,我这里也有C6748的核心板,我之前用C6748的调过(修改了ov2640的配置寄存器),很清晰,那我现在想把TL138上面的画面也调清晰一点,请问怎么弄呢?
6 {0 m& o5 ^: D- Y% r+ G# ~6 V5 J我看了vpif_mmap_loopback_sd.c的源码,感觉里面是按v4l2的框架写的,没有找到调节摄像头参数的函数,请问为怎么才可以自己去配置TL2640的参数呢?
! d4 O/ w: O$ j
) N# R0 d) E' ]1 t0 C" V! t还有就是想问一下这个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 的?4 S7 B& g% I7 G# ]; j
/ f( d& u" F8 d/ Q/ m) `7 u( d& |
问题有点多,希望大神好人做到底,多教教我,谢谢您!& B0 Y/ m3 Z# e+ C/ I! s

$ j; l  Y3 c( H+ |: |) d
作者: teddy    时间: 2016-2-14 17:02
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;
3 X3 B% Z: w/ W) Q- ?# Z6 k- V2 ?% Q) L9 v3 v  U
可以根据环境的光线强度,修改摄像头的亮度参数: : ~% i6 X' _8 F3 e
root@am180x-evm:~# echo "Cloudy" > /sys/module/ov2640/parameters/lightmode
; ]1 L- W- Z2 Rroot@am180x-evm:~# cat /sys/module/ov2640/parameters/lightmode
2 q7 d+ O$ J  K7 {9 Z# v; m& ~Cloudy
* n7 Q* L+ s3 s7 e' u
/ g& U$ ^0 Y9 n4 s  p参数说明:
: _' ^  D& d0 S- v1 u7 F) ^2 _light mode (default:Cloudy): Auto,Sunny,Cloudy,Office,Home 9 A; E* h7 ?) _

" X- g. r  B" ?: s; w! L% f3 |如果要自己优化参数,需要修改ov2640的驱动程序:drivers/media/video/ov2640.c8 L" ~3 t) L8 Q+ \5 r

9 h, H- t( {3 `4 o* Svpif_mmap_loopback_sd.c可以像你那样编译,如果出错,可以通过错误提示判断具体是什么问题。
作者: aadcfh123    时间: 2016-2-15 10:43
teddy 发表于 2016-2-14 17:02+ Z8 }; I+ t, d' S% o' S6 B" [
U-Boot 2012.04.01-00059-g7363edf对应的版本是: v1.6,可以查看创龙提供的uboot-feture-support.xls;8 q7 i# N# N7 {3 v- u" n5 N

+ t; N% ?8 c7 D. O# w& U5 S0 ^可 ...

( G% `7 A# D: W, w/ x; w6 `teddy,
/ F0 {3 R( {$ r9 k9 ~0 I) s3 j- _新年快乐!
1 G$ @5 \9 _( u7 s# U; D我按照您提供的方法已经将摄像头调试清晰了。谢谢您。
2 g+ |+ L& [4 |: d* |) g1 k: p0 @* V6 J9 I  p3 C- m$ h
现在我用gcc -o vpif_mmap_loopback_sd vpif_mmap_loopback_sd.c 编译,出现了以下错误:) r( o' t. M4 }3 y, w& _1 e& r( d

+ K+ N' v8 ~. n! K; ]vpif_mmap_loopback_sd.c: In function ‘initCapture’:
: ]( D# n4 O3 i- Y2 B) }3 Svpif_mmap_loopback_sd.c:247:36: error: ‘V4L2_STD_BAYER_320’ undeclared (first use in this function)
4 S& `5 S6 T1 Q1 z+ P. b, }vpif_mmap_loopback_sd.c:247:36: note: each undeclared identifier is reported only once for each function it appears in
6 \5 }, N! l0 @, D$ y( j9 cvpif_mmap_loopback_sd.c:252:36: error: ‘V4L2_STD_BAYER_640’ undeclared (first use in this function)
% D+ H; b6 q) q/ \. a% U% lvpif_mmap_loopback_sd.c:257:36: error: ‘V4L2_STD_BAYER_800’ undeclared (first use in this function)( j0 `% K) T" A( [4 m- G9 h) _- ^! N
vpif_mmap_loopback_sd.c:262:36: error: ‘V4L2_STD_BAYER_1024’ undeclared (first use in this function)8 Z/ q% o7 R* s" H. D$ q$ E7 `
vpif_mmap_loopback_sd.c:267:36: error: ‘V4L2_STD_BAYER_1280’ undeclared (first use in this function)7 E$ o2 ^( j; w; y) i
vpif_mmap_loopback_sd.c:272:36: error: ‘V4L2_STD_BAYER_1600’ undeclared (first use in this function)/ @4 E, o* c! o& f* f
vpif_mmap_loopback_sd.c: In function ‘initDisplay’:0 C# c! C8 x: A9 C# U
vpif_mmap_loopback_sd.c:702:48: warning: comparison between pointer and integer * M" g4 E% q) F0 F8 T, P

) P: u. J7 H6 u( _% @( {/ O4 q红色字体的变量,我在vpif_mmap_loopback_sd.c中未找到相关定义,在网上也找了一下,也没有找到,请问我在编译的时候是不是要包含一些头文件,如果需要的话,我在哪可以找到这些头文件呢?
6 P" d, f! |' _  }, j请您再帮我看一看,谢谢。1 T3 b& S' @0 u4 W  z; a8 K' `

作者: teddy    时间: 2016-2-16 09:03
新年快乐!
' j. ^( X# C# P" O. `+ m6 q在内核include/linux/videodev2.h这个文件里面有定义,可以include这个文件,或者将这几个宏定义负责到你的代码里。




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