前言
camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera。我这里主要讨论前者,也就是与soc直连的。我认为凡是涉及到usb的,都不是一两句话可以说明白的!如有错误,欢迎指正,谢谢!!!
环境说明
涉及到的基础知识点:
字符设备驱动
设备模型
平台设备驱动
v4l2框架
i2c驱动框架
涉及到的术语:
camera : 指的是整个camera,包括它本身的硬件连接方式及支持i2c控制的i2c设备
sensor : 指的是支持i2c控制的i2c设备,它属于camera的一部分,在内核实现里也能体现出来
camera host: 指的是与camera相连接的,一般内嵌在soc里面的控制器
涉及到的文件夹:
drivers/media/platform/soc_camera/ 主要存放camera host驱动,通用的camera驱动也存放在此
drivers/media/i2c/soc_camera/ 主要存放sensor驱动
分析所采用的内核版本:
VERSION = 3
PATCHLEVEL = 15
SUBLEVEL = 0
EXTRAVERSION =
NAME = Shuffling Zombie Juror
camera的驱动包括通用camera的驱动、camera host的驱动以及sensor的驱动,下面一个个来分析
这里先插一张图,来自:http://blog.csdn.net/kickxxx/article/details/8484498(该图片及图片后的文字是在我写完这篇博文后发现的,我认为对理解camera驱动会有帮助,所以就摘抄了^_^)
Soc camera sub-system对应着drivers/media/video/下的soc_camera.c soc_camera_platform.c
Soc camera host 是host端实现,是由平台厂商实现的,向上实现soc_camera_host_ops接口,向下操作Camera host硬件以及通过平台特定的接口操作Soc camera device
Soc camera device 是平台的camera device(同时也是subdev),由驱动开发者来实现v4l2_subdev_call调用的subdev 接口,同时还要为soc camera host实现平台特定的操作接口;向下操作camera sensor或者video AD芯片。
Camera host hardware是平台硬件相关的,不同的平台有不同的host硬件,比如imx51的ipu,三星s5pv210的fimc控制器等。
soc_camera_host,soc_camera_device,v4l2_device,v4l2_subdev关系如下:
理论上系统内可以有多个soc_camera_host,物理上soc_camera_host就是系统的camera处理模块驱动
一个soc_camera_host可以对应多个soc_camera_device,物理上soc_camera_device是一个camera接口,每个soc_camera_host对应一个v4l2_dev
每个soc_camera_device,系统会为他们创建设备节点/dev/videoX。
每个soc_camera_device有多个v4l2_subdev,物理上v4l2_subdev可以是sensor,video AD芯片
v4l2_subdev可以通过i2c挂接到v4l2_device,也可以通过soc_camera_link提供的add_device来增加,这依赖于sensor和video

本文深入探讨了SOC相机驱动的电源配置,分析了与SOC直接连接的相机驱动框架,涉及字符设备驱动、设备模型、平台设备驱动、V4L2框架和I2C驱动等内容。文章通过环境说明、术语解释和内核版本,阐述了相机主机、传感器和SOC相机设备之间的关系,并展示了驱动结构和设备节点的创建过程。
最低0.47元/天 解锁文章
1483

被折叠的 条评论
为什么被折叠?



