分享

Android下的摄像头驱动开发

 dwlinux 2014-04-06

更多 0


http://www./2012/02/14/363.html

这几天拿到一个MINI210开发板,于是尝试着把ov7670移植到开发板上.仔细的观察了一下友善给的驱动发现友善提供了ov9650的驱动,因为ov7670和ov9650的驱动比较类似.于是想在ov9650的基础上改动一下. 但是进入/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android/drivers/media/video目录没有发现跟ov9650相关的源文件.看了一下Makefile 文件才知道友善竟然没有提供ov9650的源码(鄙视一下友善).

那只好自己动手了:

1.在”/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android/drivers/media/video”目录下增加两个文件”fpov7670.c”和”fpov7670.h”.

2.在”/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android/drivers/media/video”目录下找到”Makefile”这个文件.增加一行

1</p>
2 
3<p>“obj-$(CONFIG<em>VIDEO</em>FPOV7670)     += fpov7670.o”.</p>
4 
5<p>

3.在”/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android/drivers/media/video”目录下找到”Kconfig”

增加下面5行

1</p>
2 
3<p>config VIDEO<em>FPOV7670
4 tristate "FPOV7670 Camera Sensor"
5 depends on I2C && VIDEO</em>V4L2
6 ---help---
7 This driver supports FPOV7670 SoC camera module</p>
8 
9<p>

4.最重要的是修改代码了.参照”s5k4ba.c”和”s5k4ba.h” 把”fpov7670.c”和”fpov7670.h”修改了.主要吧IIC配置修改即可.然后找到/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android/arch/arm/mach-s5pv210/mach-mini210.c,加入fpov7670的配置.

01</p>
02 
03<h1>ifdef CONFIG<em>VIDEO</em>FPOV7670</h1>
04 
05<p>static int ov7670<em>power</em>en(int onoff)
06 {
07 printk("ov7670<em>power</em>en: power %s\n", onoff ? "ON" : "Off");
08 return 0;
09 }</p>
10 
11<p>static struct fpov7670<em>platform</em>data ov7670<em>plat = {
12 .default</em>width = 640,
13 .default<em>height = 480,
14 .pixelformat = V4L2</em>PIX<em>FMT</em>YUYV,
15 .freq = 40000000,
16 .is<em>mipi = 0,
17 };
18 static struct i2c</em>board<em>info  ov7670</em>i2c<em>info = {
19 I2C</em>BOARD<em>INFO("FPOV7670", (0x42>>1)),
20 .platform</em>data = &ov7670_plat,
21 };</p>
22 
23<p>static struct s3c<em>platform</em>camera ov7670 = {
24 .id        = CAMERA<em>PAR</em>A,
25 .type        = CAM<em>TYPE</em>ITU,
26 .fmt        = ITU<em>601</em>YCBCR422<em>8BIT,
27 .order422    = CAM</em>ORDER422<em>8BIT</em>CBYCRY,
28 .i2c<em>busnum    = 0,
29 .info        = &ov7670</em>i2c<em>info,
30 .pixelformat    = V4L2</em>PIX<em>FMT</em>YUYV,
31 .srclk<em>name    = "mout</em>mpll",
32 /* .srclk<em>name    = "xusbxti", */
33 .clk</em>name    = "sclk<em>cam1",
34 .clk</em>rate    = 40000000,
35 .line<em>length    = 640,
36 .width        = 640,
37 .height        = 480,
38 .window        = {
39 .left    = 0,
40 .top    = 0,
41 .width    = 640,
42 .height    = 480,
43 },
44 /* Polarity */
45 .inv</em>pclk    = 1,
46 .inv<em>vsync    = 1,
47 .inv</em>href    = 0,
48 .inv_hsync    = 0,</p>
49 
50<p>.initialized    = 0,
51 .cam<em>power    = ov7670</em>power_en,
52 };</p>
53 
54<h1>endif</h1>
55 
56<p>

在驱动列表中加入ov7670驱动

01</p>
02 
03<p>/* Interface setting */
04 static struct s3c_platform_fimc fimc_plat_lsi = {
05 .srclk_name    = "mout_mpll",
06 .clk_name    = "sclk_fimc",
07 .lclk_name    = "sclk_fimc_lclk",
08 .clk_rate    = 166750000,
09 #if defined(CONFIG_VIDEO_S5K4EA)
10 .default_cam    = CAMERA_CSI_C,
11 #else
12 #ifdef CAM_ITU_CH_A
13 .default_cam    = CAMERA_PAR_A,
14 #else
15 .default_cam    = CAMERA_PAR_B,
16 #endif
17 #endif
18 .camera        = {
19 #ifdef CONFIG_VIDEO_S5K4ECGX
20 &s5k4ecgx,
21 #endif
22 #ifdef CONFIG_VIDEO_S5KA3DFX
23 &s5ka3dfx,
24 #endif
25 #ifdef CONFIG_VIDEO_S5K4BA
26 &s5k4ba,
27 #endif
28 #ifdef CONFIG_VIDEO_S5K4EA
29 &s5k4ea,
30 #endif
31 #ifdef CONFIG_VIDEO_OV9650
32 &ov9650,
33 #endif
34 #ifdef CONFIG_VIDEO_FPOV7670//新加入
35 &ov7670,//新加入
36 #endif //新加入
37 },
38 .hw_ver        = 0x43,
39 };</p>
40 
41<p>

5.在”/opt/FriendlyARM/mini210/android/linux-2.6.35.7-android”目录下 输入”make menuconfig” 回车,选择FPOV7670之后,make之.成功后把zImage烧入开发板.打开摄像头测试,出图了.

注意,因为我们FPOV7670的驱动是用在指纹采集上并不需要”自动曝光””调节白平衡”等功能.如果是用在拍照上,就需要加入上述功能.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多