为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

andorid之摄像头驱动流程

2017-10-19 5页 doc 53KB 21阅读

用户头像

is_105949

暂无简介

举报
andorid之摄像头驱动流程andorid之摄像头驱动流程 andorid之摄像头驱动流程--MTK平台 2012-09-10 10:18:36 分类: LINUX camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过 数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU 处理。 由于摄像头满足总线、驱动、设备模型,那么看看andorid是怎么去实 现摄像头的流程。 1. 注册Camera的platform平台设备 点击(此处)折叠或打开 1. CAMERA_HW_i2C_...
andorid之摄像头驱动流程
andorid之摄像头驱动流程 andorid之摄像头驱动流程--MTK平台 2012-09-10 10:18:36 分类: LINUX 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. { struct i2c_adapter *adapter; 3. 4. struct i2c_driver *driver = data; 5. 6. if (dev->type != &i2c_adapter_type) 7. return 0; 8. adapter = to_i2c_adapter(dev); 9. 10. i2c_detect(adapter, driver); 11. 12. /* Legacy drivers scan i2c busses directly */ 13. if (driver->attach_adapter) 14. driver->attach_adapter(adapter); 15. 16. return 0; 17. } 这个函数最主要的是调用了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之摄像头驱动流程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索