热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MSM8940Camera架构以及移植手册superGood

comefrom:http:blog.chinaunix.netuid-7213935-id-5753785.html上篇:camera系统架构3一.

come from : http://blog.chinaunix.net/uid-7213935-id-5753785.html
 

上篇: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  成员截选图


推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
author-avatar
朱鹏飞0521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有