camera成像原理:

景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理。  由于摄像头满足总线、驱动、设备模型,那么看看andorid是怎么去实现摄像头的流程。

1.  注册Camera的platform平台设备

点击(此处)折叠或打开

  1. CAMERA_HW_i2C_init
  2. platform_driver_register(&g_stCAMERA_HW_Driver)
  3. static struct platform_driver g_stCAMERA_HW_Driver = {
  4. .probe        = CAMERA_HW_probe,
  5. .remove     = CAMERA_HW_remove,
  6. .suspend    = CAMERA_HW_suspend,
  7. .resume     = CAMERA_HW_resume,
  8. .driver        = {
  9. .name    = "image_sensor",
  10. .owner    = THIS_MODULE,
  11. }
  12. };

2.  注册Camera的platform平台设备驱动

点击(此处)折叠或打开

  1. platform_device_register(&sensor_dev);
  2. static struct platform_device sensor_dev = {
  3. .name         = "image_sensor",
  4. .id         = -1,
  5. };

在    在mt6575_board_init这个函数中注册了很多平台设备,包括上面的平台设备。camera的平台设备与平台驱动匹配后,就会调用drv的probe函数,其probe函数主要完成的是i2c平台驱动的注册

点击(此处)折叠或打开

  1. static int CAMERA_HW_probe(struct platform_device *pdev)
  2. {
  3. return i2c_add_driver(&CAMERA_HW_i2c_driver);
  4. }
  5. struct i2c_driver CAMERA_HW_i2c_driver = {
  6. .probe = CAMERA_HW_i2c_probe,
  7. .remove = CAMERA_HW_i2c_remove,
  8. .detect = CAMERA_HW_i2c_detect,
  9. .driver.name = CAMERA_HW_DRVNAME,
  10. .id_table = CAMERA_HW_i2c_id,
  11. .address_data = &addr_data,
  12. };

怎么去做i2c驱动与设备的匹配呢?内核中对于这块有详细的讲解,文件为instantiating-devices,现在i2c的平台驱动已经注册了,下面来分析下是怎么注册平台设备的。应该使用内核的第3种方法,在内核注册i2c驱动的时候,最终会遍历总线设备的driver成员,调用__attach_adapter函数。

点击(此处)折叠或打开

  1. static int __attach_adapter(struct device *dev, void *data)
  2. {
  3. struct i2c_adapter *adapter;
  4. struct i2c_driver *driver = data;
  5. if (dev->type != &i2c_adapter_type)
  6. return 0;
  7. adapter = to_i2c_adapter(dev);
  8. i2c_detect(adapter, driver);
  9. /* Legacy drivers scan i2c busses directly */
  10. if (driver->attach_adapter)
  11. driver->attach_adapter(adapter);
  12. return 0;
  13. }

这个函数最主要的是调用了CAMERA_HW_i2c_driver的detect函数,完成设备与驱动的匹配,最终会调用CAMERA_HW_i2c_probe。

点击(此处)折叠或打开

  1. static int CAMERA_HW_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info*info)
  2. {
  3. strcpy(info->type, CAMERA_HW_DRVNAME);
  4. return 0;
  5. }

在probe函数中最只做了一件事件RegisterCAMERA_HWCharDrv,这个函数会注册字符设备,注册设备节点,并在设备节点下创建类,重点的东西出现了

点击(此处)折叠或打开

  1. static const struct file_operations g_stCAMERA_HW_fops =
  2. {
  3. .owner = THIS_MODULE,
  4. .open = CAMERA_HW_Open,
  5. .release = CAMERA_HW_Release,
  6. #ifdef USE_NEW_IOCTL
  7. .unlocked_ioctl = CAMERA_HW_Ioctl
  8. #else
  9. .ioctl = CAMERA_HW_Ioctl
  10. #endif
  11. };

Open只是初始化一个原子变量留给系统调用,ioctrl才是核心,CAMERA_HW_Ioctl是上层文件操作底层硬件的方法。以上是andorid上摄像头i2c设备的过程。

 

andorid之摄像头驱动流程--MTK平台的更多相关文章

  1. andriod之摄像头驱动流程

    camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理. 由于摄像头满足总线. ...

  2. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  3. Linux USB摄像头驱动【转】

    本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...

  4. Linux USB 摄像头驱动

    在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头.这一章主要是介绍 USB 摄像头的设备驱动程序.在我们印象中,驱动程序都是一个萝卜一个坑, ...

  5. s5k4ba摄像头驱动分析

    注释: 本驱动是基于S5PV310的,但是全天下的摄像头驱动都是采用V4L2,因此驱动框架流程基本差不多.其中fimc_init_camera()函数会回调.init函数,该函数主要就是通过IIC总线 ...

  6. Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析

    下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...

  7. 基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 FIMC这个名字应该是从S5PC1x0開始出现的.在s5pv210里面的定义是摄像头接口.可是它相 ...

  8. 关于MTK平台CC相关的Log查询

    关于MTK平台CC相关的Log查询 在外场问题中,经常会出现通话相关的故障.这里简单总结一下通话相关log的分析点: 主叫方:主叫方,是指主动发起通话的一方. 初步定位问题, 用户发起通话时,AP端的 ...

  9. 【Linux高级驱动】linux设备驱动模型之平台设备驱动机制

    [1:引言: linux字符设备驱动的基本编程流程] 1.实现模块加载函数  a.申请主设备号    register_chrdev(major,name,file_operations);  b.创 ...

随机推荐

  1. Oracle record 解锁

    Oracle修改表中记录时出现record is locked by another user的弹出框问题 是因为在操作表中数据时没有commit,导致表被锁. 执行下面两行语句: (1)查看被锁表的 ...

  2. Rar related CMD

    recursively add folder Document to archive: (with all the files) rar a *.rar Document recursively ad ...

  3. Element type "bean" must be followed by either attribute specifications, ">" or "/>".

    在这里其他内容就省了,错在,<bean id="bpcsU1gblDAO"class="dao.jk.bpcs.impl.BpcsU1gblDaoImpl" ...

  4. frame、bounds表示大小和位置的属性以及center、position、anchorPosition

    在iOS开发开发过程中经常会用到界面元素的frame.bounds表示大小和位置的属性以及center.position.anchorPosition等单纯表示位置的属性.这些属性究竟什么含义?彼此间 ...

  5. [转]intent 传递对象

    ---恢复内容开始--- Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[ ...

  6. AI 人工智能 探索 (二)

    完整被动技能代码 using UnityEngine; using System.Collections; public class AI : MonoBehaviour { private Hash ...

  7. apache-tomcat-7.0.70无法进入Manager管理App项目

    在tomcat文件夹找到conf文件夹中的tomcat-user.xml文件,用记事本打开,在最下面可以看到tomcat默认把用户注释掉了,也就是说打开tomcat主页是进不去管理页面的.方法如下:找 ...

  8. TM3、4波段GeoTiff数据计算NDVI

      源码: 1: PRO TIFF_NDVI,F1,F2,FOUT 2: F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ) 3: ...

  9. Dev之ChartControl控件(一)

    ChartControl控件主要包括Chart Title,Legend,Annotations,Diagram,Series五部分:如图: 1.  用RangeControl控件控制ChartCon ...

  10. 一个简单的基于HTTP协议的屏幕共享应用

    HTTP协议可以能是应用层协议里使用最广泛并且用途最多样的一个了.我们一般使用HTTP协议来浏览网页,但是HTTP协议还用来做很多其它用途.对开发人员来讲很常见的一种就是用HTTP协议作为各种版本控制 ...