andriod之摄像头驱动流程
camera成像原理:
点击(此处)折叠或打开
- CAMERA_HW_i2C_init
- platform_driver_register(&g_stCAMERA_HW_Driver)
- static struct platform_driver g_stCAMERA_HW_Driver = {
- .probe = CAMERA_HW_probe,
- .remove = CAMERA_HW_remove,
- .suspend = CAMERA_HW_suspend,
- .resume = CAMERA_HW_resume,
- .driver = {
- .name = "image_sensor",
- .owner = THIS_MODULE,
- }
- };
2. 注册Camera的platform平台设备驱动
点击(此处)折叠或打开
- platform_device_register(&sensor_dev);
- static struct platform_device sensor_dev = {
- .name = "image_sensor",
- .id = -1,
- };
在 在mt6575_board_init这个函数中注册了很多平台设备,包括上面的平台设备。camera的平台设备与平台驱动匹配后,就会调用drv的probe函数,其probe函数主要完成的是i2c平台驱动的注册
点击(此处)折叠或打开
- static int CAMERA_HW_probe(struct platform_device *pdev)
- {
- return i2c_add_driver(&CAMERA_HW_i2c_driver);
- }
- struct i2c_driver CAMERA_HW_i2c_driver = {
- .probe = CAMERA_HW_i2c_probe,
- .remove = CAMERA_HW_i2c_remove,
- .detect = CAMERA_HW_i2c_detect,
- .driver.name = CAMERA_HW_DRVNAME,
- .id_table = CAMERA_HW_i2c_id,
- .address_data = &addr_data,
- };
怎么去做i2c驱动与设备的匹配呢?内核中对于这块有详细的讲解,文件为instantiating-devices,现在i2c的平台驱动已经注册了,下面来分析下是怎么注册平台设备的。应该使用内核的第3种方法,在内核注册i2c驱动的时候,最终会遍历总线设备的driver成员,调用__attach_adapter函数。
点击(此处)折叠或打开
- static int __attach_adapter(struct device *dev, void *data)
- {
- struct i2c_adapter *adapter;
- struct i2c_driver *driver = data;
- if (dev->type != &i2c_adapter_type)
- return 0;
- adapter = to_i2c_adapter(dev);
- i2c_detect(adapter, driver);
- /* Legacy drivers scan i2c busses directly */
- if (driver->attach_adapter)
- driver->attach_adapter(adapter);
- return 0;
- }
这个函数最主要的是调用了CAMERA_HW_i2c_driver的detect函数,完成设备与驱动的匹配,最终会调用CAMERA_HW_i2c_probe。
点击(此处)折叠或打开
- static int CAMERA_HW_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info *info)
- {
- strcpy(info->type, CAMERA_HW_DRVNAME);
- return 0;
- }
在probe函数中最只做了一件事件RegisterCAMERA_HWCharDrv,这个函数会注册字符设备,注册设备节点,并在设备节点下创建类,重点的东西出现了
点击(此处)折叠或打开
- static const struct file_operations g_stCAMERA_HW_fops =
- {
- .owner = THIS_MODULE,
- .open = CAMERA_HW_Open,
- .release = CAMERA_HW_Release,
- #ifdef USE_NEW_IOCTL
- .unlocked_ioctl = CAMERA_HW_Ioctl
- #else
- .ioctl = CAMERA_HW_Ioctl
- #endif
- };
Open只是初始化一个原子变量留给系统调用,ioctrl才是核心,CAMERA_HW_Ioctl是上层文件操作底层硬件的方法。以上是andorid上摄像头i2c设备的过程。
andriod之摄像头驱动流程的更多相关文章
- andorid之摄像头驱动流程--MTK平台
原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...
- Linux USB摄像头驱动【转】
本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...
- Linux USB 摄像头驱动
在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头.这一章主要是介绍 USB 摄像头的设备驱动程序.在我们印象中,驱动程序都是一个萝卜一个坑, ...
- V4L2(二)虚拟摄像头驱动vivi深入分析【转】
转自:http://www.cnblogs.com/tureno/articles/6694463.html 转载于: http://blog.csdn.net/lizuobin2/article/d ...
- V4L2学习(五)VIVI虚拟摄像头驱动
概述 前面简单分析了内核中虚拟摄像头驱动 vivi 的框架与实现,本文参考 vivi 来写一个虚拟摄像头驱动,查询.设置视频格式相对简单,难点在于 vb2_buf 的处理过程. 数据采集流程分析 在我 ...
- s5k4ba摄像头驱动分析
注释: 本驱动是基于S5PV310的,但是全天下的摄像头驱动都是采用V4L2,因此驱动框架流程基本差不多.其中fimc_init_camera()函数会回调.init函数,该函数主要就是通过IIC总线 ...
- 摄像头驱动的使能配置、V4L2编程接口的设计应用
摄像头采集子系统 一.摄像头驱动的使能配置 摄像头软件驱动构架 摄像头采集系统由上图所示,硬件(摄像头) -> 驱动(Linux内核配置中,选择支持V4L2的驱动选项) -> V4L2接口 ...
- Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析
下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...
- 荣品RP4412开发板摄像头驱动调用及对焦控制
1.关于更换不同摄像头驱动调用问题. 问:RP4412开发板,我用的摄像头640*480图像预览时OK的,但是我调用1280*720的初始化预览,摄像头没有图像了,是不是camera程序也需要修改? ...
随机推荐
- 在discuz二次开发模板时,diy编辑显示我“抱歉,您没有权限添加此模块
<div id="diy_vk_portal_slide_top" class="area"><div id="frameCRxR0 ...
- Postgres-XL集群搭建
Postgres-XL 是一个完全满足ACID的.开源的.可方便进行水平扩展的.多租户安全的.支持share-nothing;支持海量数据并行处理-MPP(Massively Parallel Pro ...
- TCP数据流稳定性--TCP分片,重组及乱序
http://www.cnblogs.com/derekchen/archive/2009/07/15/1524415.html 1.IP分片的情况.IP软件包有一个[分片]和[重组]模块,一个IP数 ...
- Linux如何查看当前占用CPU或内存最多的K个进程
一.可以使用以下命令查使用内存最多的K个进程 方法1: ps -aux | sort -k4nr | head -K 如果是10个进程,K=10,如果是最高的三个,K=3 说明:ps -aux中(a指 ...
- thinkphp 实现无限极分类
thinkphp实现无限极分类,获得所有的子类 今天学习测试了一上午也没有整出来,一开始一直没有办法把所有的子分类拿出来. 最后找到原因: 每次调用的时候没有在最后return的位置我没有选择retu ...
- html介绍
Html的介绍 Html 是一种标记语言,主要的用处是开发网页 展示出文字,图片,视频,声音等等 是我们web开发的基础 做什么 所谓的静态页面,指的是能不能交互,而不是东西能不能动 网页设计师(ht ...
- linux 网络通信
网络命令 历史上最早的即时通信 1 write linzhiling (内容) ctrl+D结束 这样一封信就写出去了,注意:只有用户在线才可以发送 2 wall (write all) 给所有的用户 ...
- hdu 2258 优先队列
Continuous Same Game (1) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- Codeforces Round #373 (Div. 2) A
Description Every summer Vitya comes to visit his grandmother in the countryside. This summer, he go ...
- 2016年10月28日 星期五 --出埃及记 Exodus 19:13
2016年10月28日 星期五 --出埃及记 Exodus 19:13 He shall surely be stoned or shot with arrows; not a hand is to ...