Qualcomm平台camera调试移植入门

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1  camera基本代码架构

    高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略; 在kernel中实现sensor的底层驱动。但是,对于最核心的sensor端的底层设置、ISP效果相关等代码则是单独进行了抽离,放在了一个 daemon进程中进行管理:


图1 Qualcomm平台camera代码架构简图

    由于高通把大部分具体的设置及参数放到了daemon进程中,所以在kernel部分只是进行了V4L2的设备注册、IIC设备注册等简单的动作:


图2 kernel层camera主要代码简图

如上图,camera在kernel层的主文件为msm.c,负责设备的具体注册及相关方法的填 充;在msm_sensor.c文件中,主要维护高通自己的一个sensor相关结构体—msm_sensor_ctrl_t,同时把dts文件中的配置 信息读取出来;kernel层对于不同的sensor对应自己的一个驱动文件— xxsensor.c,主要是把power setting的设定填充到msm_sensor_ctrl_t中。    

    在vendor目录下,高通把各个sensor实质性的代码放置在此。一部分代码是高通自己实现的daemon进程和kernel层及HAL层进行通讯的 框架代码;另一部分则是和sensor相关的chromatix效果代码和sensor lib部分代码(init setting、lens info、output info)。


图3 vendor下主要camera代码简图

如上图,高通平台通过一个函数指针数组sub_module_init来管理sensor相关的 组件;其中重要的是sensor_sub_module_init和chromatix_sub_module_init模块,对于sensor模块需要 对应填充sensor_lib_t下的接口,对于chromatix模块则是通过高通的chromatix工具生成。

    从更高的层次来看,sensor部分的代码只是camera子系统的一部分。打开高通vendor下面关于camera的源码也可以看到,/mm- camera2/media-controller/modules目录下面,sensors只是modules文件下面其中的一个子目录。


图4  高通camera子系统模块草图

2  主要移植步骤

2.1  kernel层代码移植

    对于kernel层的代码移植,实际上对dts文件的移植。因为kernel层驱动代码基本已经被高通的框架以及vendor下代码架空,只剩下一个上电的列表。具体步骤为:

1.  在目录kernel/arch/arm/boot/dts/下的对应dtsi文件中新增camera节点,主要关注节点中的IIC地址、sensro的ID信息、电压设定信息:


图5 dtsi中camera中的节点信息截选

2.在目录kernel/drivers/media/platform/msm /camera_v2/sensor/目录新增xxsensor.c文件,主要填充msm_sensor_power_setting结构 体:sensor上电的包含的引脚设定和电压设定,具体格式可以参考同目录下的其他文件。

3.  kernel下面的相关mk文件:


图6 kernel目录下camera相关配置文件

其他:如果sensor中带有eeprom,需要在dts文件中增加eeprom的节点信息;同样,sensor带有对焦功能,需要在dts文件中增加actuator节点信息;对于带eeprom的sensor,还需要配置eeprom的时钟控制代码(有待研究)。

2.2  vendor下代码移植

    Vendor下面的代码主要是两部分,一个是sensor_libs目录下的sensor具体设定、配置文件,另一个是chromatix下面的ISP效果文件。具体为:

1. sensor_libs目录下文件:包括一个Android.mk文件和一个.c文件。其中Android.mk文件参考同目录下其他.mk文件修改和对应sensor有关设定即可;.c文件中需要填充的为一个sensor_lib_t类型的结构体:


图7 sensor_lib_t成员截选图

2.  chromatix目录下相关文件,在对应sensor目录下包含4个目录和一个Android文件,总共13个文件,这些文件都会由chromatix调试工具生成。下面为IMX179文件实例:


图8  vendor下chromatix相关文件示例图

3. vendor下还有eeprom文件,模组自带的eeprom数据处理相关;AF相关文件,调试工具生成的关于AF的效果文件;配置文件,把需要编译的模块填进配置文件中。


图9  vendor下其他camera文件

3  调试常见问题

3.1  kernel和vendor下命名匹配

    对于不是高通释放的标准驱动来说,在参考其他代码移植调试一个新sensor的过程中,要注意在对应的dts文件中给sensor配置节点信息的过程 中,“qcom,sensor-name”字段的配置要和vendor下面的sensor lib代码中的“xxx_open_lib”函数名以及对应的Android.mk中的“LOCAL_MODULE”名称匹配,否则相应sensor的 vendor下库文件无法调用,这时打开camera会出现闪退现象。具体可参考平台代码sensor.c中的 sensor_load_library()函数。


图10  camera name匹配详图

3.2  sensor lib中的sensor_lib_out_info_t填充

    一般来说,每个sensor可以配置输出不同大小的图像。此时,除了进行对应的sensor setting来改变sensor自身的输出及相关配置外;还需要将相关的输出大小、帧率等信息通知平台端,即填充struct sensor_lib_out_info_t结构体。


图11 高通平台获取sensor信息框图

填充的这个sensor_lib_out_info_t中的成员,最终会作为sensor基本信息的一部分被HAL层获取到,上图为高通平台获取sensor信息的一个简单框图。

    在调试过程中,需要注意的是这个结构体的成员max_fps需要填写至少大于等于30;否则会因为在获取capability时无法得到有效的 previewsize、video size而无法进入预览。具体可参考平台代码mct_pipeline.c中的 mct_pipeline_populate_query_cap_buffer()函数。

3.3  sensorlib中的exposure_table_size填写

    对于sensor端输出RAW数据,平台端进行ISP处理的情形来说,sensor端除了基本的init配置外,另外一个就是根据平台端AEC计算出来的 数据来对应调整sensor的曝光。在高通平台上将平台端的AEC和具体的sensor曝光设置联系起来的是chromatix文件中的一个 Exposure Table和sensor lib文件中的exposure对应接口。

    这里的exposure_table_size对应着sensor lib中sensor_fill_exposure_array()接口写入的sensor寄存器的个数,平台代码中需要根据这个 exposure_table_size来动态分配内存大小。如果这个值的填写和sensor_fill_exposure_array()中实际写入的 值大小不一致,就会造成内存方面的crash。具体可参考平台代码sensor.c中的sensor_apply_exposure()函数。

3.4  kernel 层非常规设定

    一般情况下,一个新sensor的移植和调试需要在kernel层进行的工作基本上没有问题。但是对于一些sensor来说,对于电压的设定或是MCLK的设定有非常规要求的时候,可能就需要修改平台上相关的默认设定。

    对于sensor的几路工作电压 (AVDD、DVDD、IOVDD),平台端一般都是通过PMIC的相应regulator供电,而硬件上regulator的输出能力一般都有限制,代 码上也会有体现。如果有sensor需要的电压超过代码上相应regulator的限制值,可以查看PMIC上的说明,如果代码上的限制值并不是硬件的真 正极限,可以修改平台代码解决。

    对于MCLK的设定,高通平台有一些常规的值设定。如果sensor有特殊要求,而这个MCLK不能被平台识别,这时候可以在平台的clock相关代码中,通过配置平台的PLL参数来生成特定的MCLK时钟给sensor使用。


图12 kernel非常规设定代码片段


转载于:https://my.oschina.net/u/994235/blog/342112

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blazor WebAssembly 应用程序中进行 HTTP 请求

翻译自 Waqas Anwar 2021年5月13日的文章 《Making HTTP Requests in Blazor WebAssembly Apps》 [1]在我的前篇文章《Blazor Server 应用程序中进行 HTTP 请求》中,我介绍了在 Blazor Server 应用程序中进行 HTTP 请求的相关技术,在 Blazor Server App …

AI如果耍起了心眼,人类就像个白痴......

耍小心眼已经不是人类专利了。之前,有一群研究者整理了一个场景的List,细数了AI为了完成任务,而耍的小心眼,或者说作弊。例如,在让AI玩俄罗斯方块的时候,发现最佳完成任务的方式是直接暂停游戏;…

【设计模式】—— 中介者模式Mediator

前言:【模式总览】——————————by xingoo 模式意图 使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。 这个中介者常常起着中间桥梁的作用,使其他的对象可以利用中介者完成某些行为活动&#…

mysql数据库主要用来做什么的_水晶头骨用来做什么的?

1927年一个小女孩在挖掘时,发现了一颗人头骨。这颗头骨是用水晶做成的,之后关于水晶头骨之谜一直被人津津乐道,人们一直在猜测水晶头骨用来做什么的?一共有多少个?在小女孩挖到这颗头骨之前,大英博物馆里就…

日本画风超级“诡异”毕业典礼上线,网友:有被吓到,谢谢!

转眼间又到了日本毕业季,四月份本来是日本毕业季。在日本,毕业季是非常仪式感的存在:学校里会满是穿着浴衣、盛装打扮的小哥哥小姐姐,拿着毕业证书,在樱花树下合照。图片来源:日剧《对不起,青春…

博客编辑工具ckeditor

在asp网站开发过程当中常常用到漂亮的编辑工具。 在这个网站有不少:http://ckeditor.com/ 而且下载下来就可以使用,是开源的。它不像asp里面的.dll控件拖进来就可以使用,而是通过调用的方式使用。 下载下来解压之后就可以直接包含在项目中&am…

记一次 .NET 某流媒体独角兽 API 句柄泄漏分析

一:背景 1. 讲故事上上周有位朋友找到我,说他的程序CPU和句柄都在不断的增长,无回头趋势,查了好些天也没什么进展,特加wx寻求帮助,截图如下:看的出来这位朋友也是非常郁闷,出问题还出…

iphone最新款手机_苹果罕见“跌停”!遭遇6年来最惨淡一夜,2019年全球股市第一颗雷引爆...

2019年全球股市的第一颗大雷引爆了。受苹果下调营收预期影响,周四盘中,苹果股价一度跌至142.08美元,创逾一年半新低,日内跌幅超过10%,市值缩水750亿美元。最终,苹果收跌9.96%,创出自2013年1月以…

MVC学习之分页 【转】

分页如果dinners列表记录过多,为了让用户更方便浏览,我们需要实现分页显示,而不是一次显示大量的记录列表。Index() Action方法更新DinnersController类的Index() action方法代码如下://// GET: /Dinners/public ActionResult Ind…

构件图

构件图 目录 构件图概要... 1 构件图中的事物及解释... 1 构件图中的关系及解释... 1 我的构件图... 1 构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。构件图通过对构件间依赖关系的描述来估计对系统构件的修改给系统可能带来的影响…

不小心把硬盘摔了一下,结果电脑变成这样了......

1 会主动要求换尿裤的小宇航员▼2 其实赚钱这个事儿我也不太会▼3 春困、夏倦、秋乏、冬眠一年四季都好适合睡觉啊!▼4 这是硬盘摔了,结果把显示器心疼坏了吧?▼5 柯基:弱小、可怜▼6 朋友相册里的你▼7 人类迷惑行为之放生…

win10前置耳机插孔没声音_音频服务未运行怎么办?win7和win10电脑没声音了恢复方法...

很多人可能都会问电脑没声音了,如何恢复?其实造成这种情况的原因有很多,一般需要一个一个排查。这次,小编跟大家分享其中的一个原因,以及具体的解决方法。个别小伙伴的笔记本电脑,每次开机总会提示音频服务…

开源 java CMS - FreeCMS2.2 系统配置

2019独角兽企业重金招聘Python工程师标准>>> 项目地址:http://www.freeteam.cn/ 系统配置 管理系统使用的配置项。 从左侧管理菜单点击系统配置进入。 从FreeCMS 1.7开始支持 数据变更后栏目页面静态化间隔时间(单位为分):修改栏目、更新…

EF Core使用Simple Logging输出日志

在使用EF Core的时候,很多时候需要知道EF Core实际执行的SQL语句是什么。Simple Logging是EF Core提供的一项功能,可用于在开发和调试应用程序时轻松获取日志。这种形式的日志记录需要最少的配置,而不需要其他NuGet包。功能一瞥配置起来非常简…

如何用全球顶级名画,成为全行业最令人羡慕的人?

▲ 点击查看马克思曾说:“如果你想得到艺术的享受,那你就必须是一个有艺术修养的人。”假如现在有下面两幅画,站在艺术的角度上,你会选择哪个呢?或者我们可以换一个问法:哪一种猫才是最符合你心中标准的猫&…

电脑启动后黑屏只有鼠标_电脑加装固态硬盘后出现黑屏或蓝屏解决方案

以下内容以本人遇到的真实问题为例,从找到加装固态硬盘后出现黑屏及蓝屏的原因,到成功解决问题,请各位看官听我娓娓道来,也希望为遇到同样问题的广大网友拨云见日,废话不多说,走起……一、问题描述:1. 背景…

2021编程语言排行:C#飙升,Python蝉联榜首

文 | 白开水不加糖出品 | OSC开源社区(ID:oschina2013)IEEE Spectrum 2021 年度编程语言排行榜现已发布。该榜单一年发布一次,今年是其发布的第八年。今年的排行榜包含 55 种语言,其排序综合 8 个重要线上数据源的 11 …

GitHub中教程资源 | 共21个图形绘制教程

一边学习,一边总结,一边分享! 写在前面 今天分享在GitHub中找到的教程资源,此教程是来自iMeta期刊及“农心生信工作室”的作品。发表在GitHub中,大家可以自行下载。 包含了21个图形的绘制,我大体看了一下…

盘点那些欺骗我感情的数学定理

全世界只有3.14 % 的人关注了爆炸吧知识一直以来,关于定理、公式的命名,人们都倾向于用数学家的名字命名,不仅简单方便,还可以达到纪念创立人的效果。不过,也不是每一次都这么好的,超模君发现,有…

linux启动mysql_Linux服务器安装Mysql教程

最开始用服务器的时候,也是对这些环境的安装操作极其陌生,找了很多方式,写这边文章就是为了让更少的童鞋走弯路,下面我们看看具体的操作流程。1、首先关闭linux的防火墙,执行命令chkconfig iptables off2、从mysql官网…