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/?
相关推荐
charlie1145141912 天前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
XD7429716362 天前
科技早报晚报|2026年5月2日:Spec 驱动开发、空口隔离交付与时序预测 Copilot,今天最值得跟进的 3 个机会
驱动开发·科技·copilot·开源项目·科技新闻·开发者工具
神一样的老师2 天前
【兆易创新GD32VW553开发板试用】红外遥控接入天气时钟实战
驱动开发·单片机·嵌入式硬件
charlie1145141913 天前
嵌入式Linux驱动开发——新字符设备驱动 API 概览
linux·运维·驱动开发
莎士比亚的文学花园3 天前
Linux驱动开发(4)——总线驱动
驱动开发
智者知已应修善业3 天前
【用一片74LS139和一片74Ls00,设计带高电平有效使能输入端的3线-8线译码器】2023-10-16
驱动开发·经验分享·笔记·硬件架构·硬件工程
Ghost Face...4 天前
LS2K PCIe驱动开发全链路解析
驱动开发
Joseph Cooper4 天前
Linux Power Management 子系统:从 suspend/resume 到 Runtime PM、PM QoS
linux·驱动开发·linux kernel·嵌入式linux·电源管理
d111111111d4 天前
移植MQTT到STM32
驱动开发
码踏樱花4 天前
navicat17安装包和破解
驱动开发