Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99521
  • 博文数量: 13
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 162
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-02 17:06
文章分类

全部博文(13)

文章存档

2017年(1)

2016年(12)

我的朋友

分类: Android平台

2016-10-21 18:22:54


目录
目录 2
上篇:camera系统架构 3
一.Camera硬件系统 3
1. 硬件要点 3
2. 硬件接口 3
3. 主要参数性能比较 3
二.Camera 软件系统 4
1. Camera Daemon 进程 5
2. Camera frontend 6
3. Hal 层和mm-camera-interface 7
4. Camera kernel 层 8
5. Imaging Server and Media Controller 9
6. Module Organization and Communication 9
7. 驱动代码组织架构 10
8. 最底层的Kernel 部分 11
下篇:移植基准流程 12
一. 如何添加camera 模组 12
1. Kernel部分 12
2. Verdor部分 12
二. 驱动调试 15
1. dts配置 15
2. sensor_lib_ptr 结构体 16


 
上篇:camera系统架构
一.Camera硬件系统
1. 硬件要点
a. AP 是一个Cortex-A53 
b. 专用的CCI(camera control interface)接口
c. 强劲的VFE(video front end)
双isp;
主摄支持21M (4Lane)
d. JPEG decode/encode ---HW
Hw encode,sw decode
e. 后端处理CPP(camera postprocesser)
支持翻转/旋转、降噪、光滑/锐化,作物和高级特性
全尺寸VFE输出帧
2. 硬件接口
最多支持3个mipi 接口的camera
支持双4lane(前后camera)或4/2/1lane(三个mipi camera)
3. 主要参数性能比较
 
表一 性能参数比较


二.Camera 软件系统
基于android系统的camera 软件架构如下:
 
                            图一 android camera 软件架构
高通对于camera的代码组织大体是遵循Android架构的,但对于最核心的sensor端底层设置、ISP效果参数等进行了单独的剥离,放在daemon进程中进行。
 
     图二 MSM8940 camera 架构
1. Camera Daemon 进程
daemon进程作为单一进程,在代码中就是mm-qcamera-daemon,其main 函数的 入口,位置如下:
/project/vendor/qcom/proprietary/mm-camera/mm-camera2/server-imaging/server.c
/project/vendor/qcom/proprietary/mm-camera/mm-camera2/server-imaging/server_process.c


在此函数中,主要做以下几件事情:
a . 找到服务节点名称并打开:
boolean get_server_node_name(char *node_name) 
b. 初始化模块
boolean server_process_module_init
….....temp = modules_list[i].init_mod(modules_list[i].name);....
此处加载MCT下的六大模块(树结构下的六大模块)。


2. Camera frontend
 
       图三 camera frontend 软件架构




3. Hal 层和mm-camera-interface 
 
      图四 camera hal 层和mm-camera-interface
4. Camera kernel 层
 
       图五 camera kernel 层架构
                            
5. Imaging Server and Media Controller
 
        图六 Imaging Server and Media Controller 架构
6. Module Organization and Communication


 
        图七 模块组织与关联


7. 驱动代码组织架构
camera deamon代码位于vendor/qcom/proprietary/mm-camera/mm-camera2目录下,在此目录下有media-controller,server-tuning,server-imaging,我们需要关注的是media-controller目录,整个树形结构如下:


|media-controller
|-mct camera的引擎部分,包括引擎,pipiline管理,bus,module,stream,event等定义和封装;
|-modules 这里面就是刚才进程中要加载的六大模块,功能如下:
|-sensors sensor的所有驱动集合
|-actuator 马达基本配置
|-sensor/libs,chromatix camera 模组基本配置以及效果参数,模 组这块最主要的两部分
|-eeprom/libs eeprom配置以及参数,现在基本不用
|- flash/libs    led flash 驱动
|-configs camera xml 配备文件
|-iface2 ISP interface模块
|-isp/isp2 ISP的处理
|-stats 统计算法模块的集合,如3A,AFD等的处理
|-imglib 图片的后端处理,如HDR,人脸识别等
|-pproc post process 处理,如flip,rotate等


 框图如下:
 
       图八  代码组织图


8. 最底层的Kernel 部分
而在最底层的kernel部分只是进行了V4L2的设备注册,IIC设备注册等简单的动作,主文件是msm.c,负责设备的具体注册和相关方法的填充;在msm_sensor.c中,主要是维护一个sensor结构体msm_sensor_ctrl_t,同时吧dts文件中的配置信息读出来。


 
          图九 kernel 层camera 代码会意简图


下篇:移植基准流程
一. 如何添加camera 模组
    由上面的软件代码架构可知,Camera驱动代码的添加主要是两个部分,一个是kernel 目录下的驱动添加与配置,一个是vendor目录下代码的添加。
1. Kernel部分
主要是配置dts文件,供msm_sensor.c读取。
    a. 确认配置menuconfig
在qcom 平台上,已经弱化了menuconfig,但是有的也需要配置下,如各种传感器等等。对于camera 部分,主要检查以下配置既可:


CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEOBUF2_MSM_MEM=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_MSMB_CAMERA=y
b. dts 部分
      dts的配置,调试部分会有详细说明。
2.Verdor部分
而实质性的代码一般都放在vendor下,这部分是高通自己实现的daemon进程和kernel层以及hal层进行通讯的框架代码;另一部分是效果代码。


a. Xml 文件
① Xml文件接口
在MSM8909平台上,通过一个数组去初始化名称,把模组名称加载进去;MSM8940上第一次引入了xml这种格式,其实都是一样的,不过xml文件中还包含了很多其他的信息。
如,在sensor_init.c中,通过sensor_xml_util_load_file把xml 文件load进去,
#define CONFIG_XML "msm8937_camera.xml"
……
snprintf(config_xml_name, BUFF_SIZE_255, "%s%s",
        CONFIG_XML_SYSTEM_PATH, CONFIG_XML);
    }
……
  /* Get the Root pointer and Document pointer of XMl file */
  ret = sensor_xml_util_load_file(config_xml_name, &docPtr, &rootPtr,
    "CameraConfigurationRoot");
……
② Xml 文件解析
如果你要在代码中加载那个sensor,就需要配置xml文件中做相应的配置,xml文件代码片段如下:


 

    0

    ov8856                    /* 模组名称*/

    pmic                     /* flashing 类型*/

    dw9714               /*actuator 驱动IC名称*/

    ov8856_chromatix    /*chromatixname Name*/

    1

    BACK                            /*前后摄*/

    90                      /*角度*/

                                                /*cs&&mipi 配置*/

      0                         /*cs0*/

      0x7                       /*phdy config*/

      0x4320

      0

   

                                           /*lens config*/

      2.54



b. 配置vendor mak文件:
此处加载具体文件名称,路径如下:
vendor\qcom\proprietary\common\config\device-vendor.mk


配置如下:
 


      表二  vendor mak配置文件list


c. Lib 驱动
Lib驱动部分和MSM8909相比,做了很多简化,sensor部分中把mipi的配置放到了xml文件中,其余的都差不多;而actuator部分如故,如下表所示:

 
       表三 sensor lib 驱动
d. Chromatix para 文件列表
Chromatix tab para  和msm8909相比,可谓是千壤之别,文件列表如下,专就这部分的研究我会另写一个总结,这里不详述。
 
表四 chromatix para
二. 驱动调试
1. dts配置
   在msm.c 和 msm_sensor.c中,高通已经帮我们写好了软件架构,一般不用修改代码,主要是配置dts文件:msm8937-camera_sensor-skuc.dtsi。
 


          表五  dtsi中camera 设备节点截选


2. sensor_lib_ptr 结构体
在sensor lib中,有sensor基本驱动,主要是添加sensor_lib_t 结构体,这部分和MSM8909相比较,文件内容变化不大,形式变化较大,位于xx_lib.h 中:


 
      表六  sensor_lib_t  成员截选图

阅读(6196) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~