Linux camera驱动开发(点亮新camera sensor)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

这里的sensor,大部分情况下都是指mipi接口的camera sensor。如果说mcu平台,还有很多的dvp sensor,那么soc平台下面则主要都是mipi接口的sensor。另外和mcu平台不同,很多的soc平台都有isp,所以哪怕sensor本身不带有isp功能,这都没有关系的。这也是soc平台和mcu平台很大的一个区别。今天就谈一谈如何点亮一个新的sensor。

1、目前sensor的主要厂家

当前camera sensor,经常遇到的主要有这么几家。一个是sony,另外两个是思特微和格科微。较早的时候,sony用的居多,而现在越来越多的soc开始支持国产sensor品牌。

2、找到sensor的手册

**要点一个新的sensor,那么势必需要找到对应sensor的芯片手册。**这部分,从公开渠道不一定找得到,而要从代理商那里去获得。所以,要开始调试之前,一定要找到对应的sensor手册。

3、弄懂电路原理

csi接口的sensor本身并不复杂,主要是两部分接口。一个是i2c接口,这一点主要是对sensor进行配置使用的。也就是说,如果我们需要对sensor进行属性的设置,那么就需要配置这个i2c接口。另外一个接口是mipi接口,i2c本身的速率比较低,那么数据传输的部分,主要就是通过mipi来进行传输的。有几条lane,速率多少,这都是要提前想清楚的。

4、配置设备树和menuconfig

menuconfig这一部分,一般大家都不会忘记。毕竟只有把对应驱动代码打开了,才能在开机的时候,加载对应的驱动代码。**但是设备树这部分,往往很容易出现错误。**比如说i2c的pin脚选错了,lane的数量填错了,lane的引脚选错了等等,这些都是很容易出现的错误。

5、sensor驱动代码

sensor驱动代码一般有两个地方。一个地方是drivers/media/i2c这个地方,这是可以公开查找到的sensor驱动目录。还有一个地方是drivers/media/platform这里。按道理说,这里只应该存放soc平台侧相关的代码,不应该放置sensor端的代码。但是soc的sdk本身就是厂家自己提供的,有一些厂家习惯把sensor代码放到drivers/media/platform这里,这也是情有可原的事情。

6、怎么移植新的sensor代码

移植新的sensor代码,并不是如大家所想的那样,从0到1去一行、一行去写代码完成。大多数时候移植的过程是这样的,

1)找到类似的sensor驱动,修改它的函数名,添加适当打印;

2)把新sensor驱动代码,添加到kconfig和makefile里面,这样可以被kernel发现;

3)配置好dts文件,查看电路要求,保证基本的配置信息都是正确的;

4)配置好对应的mipi参数信息,这一点不同的soc平台有不同的配置方法;

5)编写sensor驱动代码,先保证编译驱动是ok的;

6)开始加载驱动,确认i2c访问是ok的,这样至少保证sensor是可以配置的;

7)保证soc mipi侧可以拿到数据,保证数据流是通畅的,查看/dev/video节点是否生成;

8)用同类型sensor的isp配置代替,这样就可以通过v4l2编程拿到新sensor图片信息;

9)调试过程中可能涉及故障分析,比如drivers/media/platform添加打印信息、i2c sensor添加打印信息、硬件端信号测量,这些都是比较花费时间的。调试的时候,不仅需要关注sensor端代码,还要关注硬件、关注driver/media/platform端代码,这样才能又快又好地去进行debug处理。

7、sensor和isp

sensor的基本接口是固定的,都是i2c+mipi,所以soc几乎可以支持所有厂家的sensor。**但是不同soc厂家的isp水平差异很大,一般认为国外soc厂家、国内某思的soc,它们的isp、ai-isp是做得最好的。**其他家的soc图像,相对来说,要逊色不少。

8、其他资料链接

复制代码
https://www.bilibili.com/video/BV1MtPvejErT/?
相关推荐
春日见1 天前
车载系统中的CPU与内存监管
java·开发语言·驱动开发·docker·计算机外设
黑不溜秋的1 天前
驱动开发系列82 – Mesa NIR 和 SPIRV 的Debug方法
驱动开发
_Emma_1 天前
【Raspberry PI】Raspberry PiSP摄像头前端(rpl-cfe)
linux·驱动开发
阿拉斯攀登1 天前
第 8 篇 RK 平台安卓驱动实战 1:GPIO 输入输出驱动,从内核到 App 全流程打通
android·驱动开发·rk3568·瑞芯微·rk安卓驱动
yzx9910132 天前
从命令行到认知时代:GitHub 指令使用与自动化工作流深度实践
驱动开发·自动化·github
凉、介2 天前
深入 LWIP:数据是如何被封装并发送出去的
网络·驱动开发·笔记·学习·嵌入式
阿拉斯攀登3 天前
第 7 篇 安卓驱动开发的灵魂:字符设备驱动框架,从原理到最简实战
android·驱动开发·rk3568·嵌入式驱动·安卓驱动
阿拉斯攀登3 天前
第 1 篇 入坑不亏!瑞芯微 RK 平台 + 安卓驱动开发,小白全维度扫盲
android·驱动开发·rk3568·嵌入式驱动
春日见4 天前
端到端大模型自动驾驶
java·开发语言·驱动开发·docker·自动驾驶·计算机外设
Lueeee.4 天前
Linux下的ULN2003驱动板与28BYJ-48步进电机驱动移植
linux·驱动开发