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/?
相关推荐
阿拉斯攀登11 小时前
SPI 设备驱动开发
linux·驱动开发·嵌入式硬件·linux内核·嵌入式·linux驱动·spi
阿拉斯攀登14 小时前
I2C 设备驱动开发
linux·驱动开发·嵌入式硬件·嵌入式·linux驱动·i2c·字符设备驱动
johnny2331 天前
规范驱动开发SDD:Spec Kit、OpenSpec、BMAD-METHOD、Kiro Spec
驱动开发
智者知已应修善业2 天前
【利用proteus设计微型CPU,完成寻址相加数据的过程。】2025-2-26
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
大卡片3 天前
linux内核驱动开发
linux·运维·驱动开发
小此方4 天前
Re:Linux系统篇(四十二)通信篇·七:SystemV标准三部曲其之三:信号量与并发编程初步认识
linux·运维·驱动开发
编程圈子5 天前
电机驱动开发学习18. SVPWM空间矢量调制算法详解与实现
驱动开发·学习·算法
智者知已应修善业5 天前
【 LM358AD方波】2024-12-31
驱动开发·经验分享·笔记·硬件架构·硬件工程
枳实-叶5 天前
【Linux驱动开发】第23天:spi_driver 的 probe / remove 函数实现规范
linux·驱动开发·c#
枳实-叶6 天前
【Linux驱动开发】第24天:SPI 数据收发机制
linux·运维·驱动开发