展锐平台的手机camera 系统开发过程

展锐公司有自己的isp 图像处理引擎,从2012 年底就开始在智能手机上部署应用。最初的时候就几个人做一款isp的从hal 到kernel 驱动的完整软件系统,分工不是很明确,基本是谁擅长哪些就搞哪些,除了架构和编码实现之外,另外还要解决各种客户问题,验证芯片等等,工作量非常之大。

后续随着分工的精细,部门的扩展,各种模块分层迭代和维护越来越明确和专业。本人最后在展锐的时候,基本上分成内核驱动,hal驱动,sensor 和mipi 驱动,tuning效果,3A 算法,效果算法,功耗带宽,isp工具,总体架构这样的团组划分。每一款手机芯片都是按照这样的分类来集体参与完成了。

每一款芯片从评估定案到最终的平台开发完成,都是一个比较耗时的过程。下面详细介绍下一款芯片项目camera系统的周期和阶段内容。

评估定案

评估定案基本上需要半年的时间,这期间asic 和总体架构部门会综合市场各家的手机特点需求,行业对isp的预期需求,camera团组内部基于前几款芯片使用实现上的痛点和优改需求,逐步迭代出一款比较准确的芯片规格出来。
芯片规格在定案后期,需要各个团队来参与讨论,设计是否满足需求,验证case需要哪些,工期如何安排,进行一系列的交流和宣导。这期间开发人员都能拿到最初的规格书,同步开始学习,预先安排后期的验证和集成了。

芯片验证

项目首先开展的是芯片的验证,asic 会在整体的芯片基础上,保留最基本的AP的CPU 子系统,加上最新的isp 子系统,扣出生成早期是在FPGA 44b0,后来是在稳定的HAPS 系统上来验证camera 的除了功耗,带宽性能的各项基本功能的bitfile出来。
验证的软件 是在没有os的小系统上展开,使用纯粹的小code,接入帧率降的足够低的sensor配置,验证各通路和各个通路模块依次打开,不同组合,在典型配置的情形下的图像输出状况。一般来说,首先是offline的验证,也就是从DDR 输入到DDR 输出,这个最容易比较和确认。然后是senor没打通情形下 使用test pattern 这类内部预定的格式图样进行验证,最后是真实的sensor 接入的online 验证。
小code 也有专门的分支管理,基本上沿用之前芯片项目上的小code,芯片变化部分做额外的修改处理,框架保持不变,而且寄存器操作的code 可以复制到安卓等的内核驱动中去,减少了后续额外的工作量,这样对后续的项目和人员的稳定非常友好,验证过一款芯片以后,基本上后续的芯片项目都能迅速上手。
完整的验证过程需要和sensor 厂商和asic 部门经常做交互沟通,在摄像头出帧和isp 输出不达预期的各种情形下反复的交互。这个小code 验证在早期的芯片项目上需要花费2人2个多月的时间,最新的项目上应该有3~4人,至少3月的投入,这部分工作由内核驱动驱动组来承担完成。

集成到安卓

芯片验证完成,这时候asic 这边在送样到台积电,中芯国际这些厂商之前,还有其他的工作量,基本上有2~3月这样的时间,这期间平台部门在综合可运行安卓大系统bit的FPGA或者HAPS 上跑安卓系统,在安卓系统起来之后各个部门可以运行自己的模块,比如camera 系统,也是在这时候完整的搭建起来。
在安卓系统在FPGA或者HAPS 上平台部门运行起来之后,camera 这边需要在以前最接近的芯片安卓项目的基础上做个移植,将完整的从HAL到kernel的code porting到安卓分支上,去除电源管理和clk等,这样才能在安卓系统上适配,但是安卓系统过于庞大,在FPGA或者HAPS 运行效率过于低下,一次开机运行到安卓界面至少需要2个小时,中间如果修改没有致命的宕机问题,可以使用adb 来反复装载调试,但是一旦宕机,这重启运行的时间成本比较高昂。
展锐在2013年后开始了minicamera 这种简易化开发,就是仅需要linux 在FPGA或者HAPS起来,在输出log的串口和关联sensor的i2c 驱动可用的情形下,就可以通过剪裁后的安卓camera系统,也就是minicamer 这种,来进行高效的大系统camera 集成,等到这种调试完毕,在安卓上只要切换下被开关屏蔽的部分,就能转入完整安卓系统的运行。这样minicamera 完成的同时,安卓系统也宣告基本搭建完成。
minicamera的构建原理起初是在HAL 层之上,增加一个main.c 文件,模仿cameraserver 调用HAL的打开关闭sensor后预览拍照录像流程,生成单独的elf 文件,来实现这些基本流程的运行,从而在简单的linux上来实现调式。后续是做在了sprd_oem之上,撇开了HAL的模块。具体可以参考 展锐平台手机camera 软硬件架构 这个框架图。
这里需要串口来输出kernel 和 hal 驱动运行中的log,有时还需要另外一个串口来建立gdb 链接来调试HAL 层这部分的流程code,还需要调试器等技能配合来查看isp 硬件系统的寄存器和iommu 页表等。
minicamera的搭建和集成一般花费kernel 驱动组 1个人1个多月的时间,基本上在安卓大系统上验证了整体的预览拍照录像,还有tuning需要的raw 拍照流程,这样搭建好了关于此款芯片安卓上实现架构。和小code验证一样,唯一没有用到的就是供电,clk 这类。这样验证完毕后,安卓大系统上asic 关于芯片的设计是完全基本可用,没有大的方向上的问题了。

芯片bringup

第一批芯片回来之后,在大系统上配置好clk,供电部分code,或者搞成clk 或者eb全开方式,使用上节**“ 集成到安卓”**同样的流程,一般花费不到1周,就能在安卓上去点亮sensor,预览到实时图像。证明完整的系统是能初步工作了,这个还是kernel 驱动组单个人能完成的事情。

芯片回片的同时,也会另外安排小code 验证的人员,加上最高的频率,正常的sensor帧率,可配置的供电,重新对在FPGA或则和HAPS 的验证case 进行验证。有时还需要对各种额外发现的case 进行验证,这部分在芯片上非常快,不会像在**“芯片验证”**这么拖沓冗长了。

基本功能走通

第一步告成之后,kernel 驱动组会增加投入人力,依次把基本的预览,拍照,录像,raw 拍照等基本功能快速都走通。这样后续的HAL,tuning效果,isp工具等也能参与进来,进行后续的全面展开。
一般这些HAL,tuning效果,isp工具的基本框架在** 集成到安卓**阶段都已经完成,在当前阶段都能快速的完成。
这个过程在内部被称为TR0 的过程。

芯片全部camera功能展开

内核驱动组只对基本功能的流程比较专业,对于各种新增或者修改的效果算法,支持流程等的模块需要其他的团队来一起配合展开实现了。把所有的功能和特征都完成需要涉及到的全部团队抽人来完成,这个阶段是整个camera 软件部门开始繁忙的时候,一般要花费整个camera 部门至少3个多月的时间。
这个过程在内部被称为TR1 的过程。

稳定

最后一步就是整个系统的功能稳定,达到量产交付的标准了,要过相应的各项认证等等。这些问题又要花费整个camera 部门至少有半年多的时间。
这个过程在内部被称为TR2 的过程。

在这里插入图片描述

一款芯片,总的这样算下来,至少需要1年8个多月的时间,如果加上中间的流片等待,比如芯片验证和集成到安卓之间的安卓bringup,集成到安卓到回片这段时间的等待, 一般是2年这样的周期,才能走完从预研评估到稳定量产这样的过程。这是一项非常耗人耗时的高技术高成本投入,非常考验研发公司整体的智慧决策和执行能力。

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

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

相关文章

软硬件项目运维方案(Doc原件完整版套用)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范…

【数据结构】排序算法---基数排序

文章目录 1. 定义2. 算法步骤2.1 MSD基数排序2.2 LSD基数排序 3. LSD 基数排序动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 ⚠本节要介绍的不是计数排序 1. 定义 基数排序(英语:Radix sort)是一种非比较型的排序算法&…

秋招常问的面试题:Cookie和Session的区别

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

LeetCode[中等] 3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 思路:滑动窗口,设置左右指针left与right,maxLength存储长度 利用HashSet性质,存储滑动窗口中的字符 如果没有重复的,那么right继续向…

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

无人机企业合法运营必备运营合格证详解

无人机企业运营合格证,是由国家相关航空管理部门(如中国民用航空局或其授权机构)颁发的,用于确认无人机企业具备合法、安全、高效运营无人机能力的资质证书。该证书是无人机企业开展商业运营活动的必要条件,标志着企业…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

同为TVT设备主动注册协议接入SVMSPro平台

同为设备主动注册协议接入SVMSPro平台 步骤一&#xff1a;进设备网页或者NVR配置界面&#xff0c;进功能面板&#xff0c;网络&#xff0c;平台接入 接入类型&#xff1a;平台软件&#xff0c;勾选启用主动上报 服务器地址&#xff1a;平台服务IP 端口&#xff1a;12009 ID&…

高级算法设计与分析 学习笔记6 B树

B树定义 一个块里面存了1000个数和1001个指针&#xff0c;指针指向的那个块里面的数据大小介于指针旁边的两个数之间 标准定义&#xff1a; B树上的操作 查找B树 创建B树 分割节点 都是选择正中间的那个&#xff0c;以免一直分裂。 插入数字 在插入的路上就会检查节点需不需要…

RabbitMQ 高级特性——持久化

文章目录 前言持久化交换机持久化队列持久化消息持久化 前言 前面我们学习了 RabbitMQ 的高级特性——消息确认&#xff0c;消息确认可以保证消息传输过程的稳定性&#xff0c;但是在保证了消息传输过程的稳定性之后&#xff0c;还存在着其他的问题&#xff0c;我们都知道消息…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取

1. 创建基础的scrapy项目 1.1 基础项目 在pycharm中安装scrapy框架 pip install scrapy 创建项目 scrapy startproject 项目名称 我们现在可以看到整体文件的目录&#xff1a; firstBlood ├── firstBlood # 项目跟目录 │ ├── init.py │ ├── items.py # 封装数…

【网络】高级IO——select版本TCP服务器

目录 前言 一&#xff0c;select函数 1.1.参数一&#xff1a;nfds 1.2.参数二&#xff1a; readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…

数据结构之二叉树遍历

二叉树的遍历 先序遍历 先输入父节点&#xff0c;再遍历左子树和右子树&#xff1a;A、B、D、E、C、F、G 中序遍历 先遍历左子树&#xff0c;再输出父节点&#xff0c;再遍历右子树&#xff1a;D、B、E、A、F、C、G 后序遍历 先遍历左子树&#xff0c;再遍历右子树&#xff0c;…

SpringBoot设置mysql的ssl连接

因工作需要&#xff0c;mysql连接需要开启ssl认证&#xff0c;本文主要讲述客户端如何配置ssl连接。 开发环境信息&#xff1a; SpringBoot&#xff1a; 2.0.5.RELEASE mysql-connector-java&#xff1a; 8.0.18 mysql version&#xff1a;8.0.18 一、检查服务端是否开启ssl认…

微信公众号开发入门

微信公众号开发是指开发者基于微信公众平台&#xff08;WeChat Official Accounts Platform&#xff09;所提供的接口与功能&#xff0c;开发和构建自定义的功能与服务&#xff0c;以满足企业、组织或个人在微信生态中的应用需求。微信公众号开发主要围绕公众号消息处理、菜单管…

K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布

重要更新 1. 腾讯全球数字生态大会与9月5日-6日举行&#xff0c;发布“5T”战略&#xff0c;包括TDSQL、TencentOS、TCE&#xff08;专有云 &#xff09;、TBDS&#xff08;大数据&#xff09;、TI &#xff08;人工智能开发平台&#xff09;等 ( [2] ) ; 并正式向原子开源基金…

初始分布式系统和Redis特点(

&#xff08;一&#xff09;认识redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperlog…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)

十三、文章分类页面 - [element-plus 表格] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 基本架子 - PageContainer 功能需求说明&#xff1a; 基本架子-PageContainer封装文章分类渲染 & loading处理文章分类添加编辑[element-plus弹层]文章分类删除…