ov9650学习(1)

前言:对于ov9650的学习做一个记录,目标是在我的fl2440的板子上移植ov9650的驱动并实现在lcd上显示摄像头拍摄的内容,虽然最后还是花屏,但是还需要做一个记录,记下自己学习到的一点东西。希望发到网上然后得到广大网友的帮助,如果能对你们学习的过程中有帮助我也是荣幸。


内核:linux-3.0

开发板:fl2440

交叉编译器:arm-linux-gcc 2012.08

下篇地址:http://blog.csdn.net/liuzijiang1123/article/details/48247605

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

遇到的难题(从浅到深)

源码的寻找   

  我用的3.0的内核里面并不自带ov9650的驱动,飞凌公司自带的驱动是2.6.32内核。(由于内核版本差别比较大,所以内核自身的一些api也有变化,编译出现了很多问题)

ps:这个问题其实就是最大的一个问题,找不到合适的驱动嵌入合适的内核中,最后失败的原因我估计也是跟这个问题有一定联系的。


自己解决的办法:

a.首先肯定是重新编译它的驱动,由于版本差别过大很多api都不一样了,改了一些错误,后面出现的错误也越来越多,导致放弃,后面直接找了2.6.32的内核

经行编译,运行内核的时候总是卡在一个地方进不去,这个待解决。

b.网上查询关于ov9650的驱动源码,各个网站留言求代码,得都的一些代码( ov9650近几年才开源,所以网上相关文章并不是很多),可是平台不一样,有一些自己也看不懂,最后决定用天嵌公司的ov9650的源码,进行移植。


驱动的移植

对于驱动的移植有两种方法,一驱动集成到内核,二是生产.ko文件,在内核运行后再加载进去。经后面的对于花屏的测试的经验,还是第二种方法好,生产.ko文件,不用反复编译内核,一直擦出nand flash容易损坏。

ps:下面我就把内核移植的过程贴一下给新手看看。


一共6个文件:s3c2440camif.c    s3c2440camif.h     s3c2440_ov9650.c     sccb.c     sccb.h     Makefile


第一种方法不适合代码调试的阶段,但是也是有用的,所以得学会。

首先还是将这6个文件放在一起文件夹cmos130下

将这个文件夹放在    ./drivers/media/video/cmos130/


然后在video这个目录下的Kconfig文件中添加ov9650的选项,因为你make menuconfig进行配置的适合需要读取Kconfig

---------------------------------------------------------------------------------------------------------------------------------------------------------------

config VIDEO_OV9650

       tristate "OmniVision OV9650/OV9652 sensor support"    
       depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
       ---help---
         This is a V4L2 sensor-level driver for the Omnivision
         OV9650 and OV9652 camera sensors.
 source "drivers/media/video/cmos130/Kconfig"

--------------------------------------------------------------------------------------------------------------------------------------

ps:---tristate 代表三种状态:1.[ ]不选择,2.[*]选择直接编译进内核,加载驱动到内核里,3.[m]动态加载驱动;

     denpends on 后面的是它所依赖的,必须选上它们才能出现* 或者是出现个选项


在video下的Makefile中添加:

***********************************************************************************************************************

obj-$(CONFIG_S3C2440_CMOS_CAMERA130)  += cmos130/    (进去coms130这个文件中寻找.o文件)

***********************************************************************************************************************

进去cmos130,vim Kconfig

***********************************************************************************************************************

menu CMOS_Camera_syd168

  config  S3C2440_CMOS_CAMERA130

         tristate "OV9650 on the S3C2440 driver for SMDK2440"
         depends on VIDEO_DEV && SMDK2440_CPU2440
           default y if (VIDEO_DEV && SMDK2440_CPU2440)
endmenu

************************************************************************************************************************

然后你就可以make menuconfig,选上ov9650的驱动了。

下面是图解:








下面是Makefile 中的内容:

  

 s3c2440camera-objs    :=  s3c2440_ov9650.o sccb.o s3c2440camif.o
 obj-$(CONFIG_S3C2440_CMOS_CAMERA130) += s3c2440camera.o




第二种方法:

这个方法只需要改变Makefile中的内容即可


 

ARCH=arm920t
   CROSS_COMPILE ?=/opt/buildroot-2011.11/${ARCH}/usr/bin/arm-linux-
   PWD := $(shell pwd)
   KERNELDIR ?= ${PWD}/../fl2440/kernel/linux-3.0/
   
   
   obj-m := s3c2440camera.o
   s3c2440camera-objs :=s3c2440_ov9650.o sccb.o s3c2440camif.o
   
  default:
      $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
      @make clear
 
  clear:
      @rm -f *.o *.cmd *.mod.c
      @rm -rf  *~ core .depend  .tmp_versions Module.symvers modules.order -f 
      @rm -f .*ko.*  *ko.*  .*.o.cmd 
           
  clean:         
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值