news 2026/6/19 17:31:26

Linux camera驱动开发(开篇)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux camera驱动开发(开篇)

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

我们要想看到这个世界,camera是最直接的方法。早前靠胶片相机、数码相机、单反,现在有了手机、运动相机之后,几乎可以很容易地通过camera感受到这个世界。另外,camera应用的地方也很多,比如工业、消费、汽车、医疗等等,它出现的地方远比大家想的要多得多。但是怎么驱动camera、怎么开发camera,很多人不了解,特别是在linux环境下面怎么开发camera。

1、usb camera和mipi camera

如果我们不想自己标定camera,那么使用usb camera是一个很好的选择。低一点分辨率的camera,用usb2就可以,如果是高分辨率的camera,就需要usb3了。用usb有一个好处,就是拿到的图像就是标定好的图像,因为关于isp所有的标定工作,usb mcu controller都帮我们完成了。但是如果想利用soc的isp,对输入图像进行处理,这个时候只能自己标定camera图像了。而且,很多的4k/30、4k/60、8k/30 sensor,几乎只有mipi这一条路了。

2、mipi vs dvp

mipi和dvp没有本质上的区别,前者是i2c+mipi总线的格式,后者是i2c+8位数据并行的格式。mipi总线一般采用差分的形式,比如1对clk+2对lane,或者是1对clk+4对lane。整体速度非常快,所以可以传递很高分辨率、很高帧率的数据,这是mipi的优势。而dvp呢,控制部分还是i2c总线,数据传输部分,则用并行数据的格式来完成,并没有使用差分总线。

3、带isp sensor和不带isp的sensor

较早的时候,很多sensor都是带isp的,比如大家所熟知的ov5640。不过,后期随着isp在soc上面越来越普及,sensor的isp功能就被拿掉了。这是因为sensor上面虽然可以做isp,但是都是基础的isp,由于成本和大小的限制,sensor上面的isp不可能做的很复杂。另外,不同的客户,对于isp要求差异很大,这些本就不是sensor厂擅长的内容。

4、sensor驱动

早期sensor,大部分都是国外的品牌居多,尤其是高端一点的sensor,一般都是三星、sony,或者是安森美。现在由于国产化的替代,ov、思特微、格科微,国产品牌的sensor越来越多,市场份额也越来越大。目前不管是手机消费,还是医疗、车载,国产sensor用的是越来越多,越来越普遍。所以,如果可能的话,大家最好多学习一下sensor驱动,大部分sensor驱动都是i2c驱动,所以这部分的代码其实没有大家想象的那么难。

5、mipi驱动

mipi驱动和sensor驱动不大相同。如果说不同的sensor,大家可能还需要自己编写驱动代码,或者说自己从类似的sensor拷贝驱动,修改驱动。那么mipi驱动,基本上就是以文件配置为主,比如说用了几条lane,10bit还是12bit,这些通常不需要自己写代码,就是纯配置,或者是在驱动代码里面找到对应的位置,把参数找到、修改一下即可。很多视频资料、或者是教学资料把mipi解释得很复杂,但是这部分在实际使用起来,往往是一带而过的。

6、isp标定

isp的输入是bayer图像,中间经过rgb图像,输出是yuv图像,这是一般的规律。就像usb camera输出是mjpeg,或者是yuyv一个道理。最初拿到的bayer图像,如果直接转换成rgb,或者是yuv,几乎是不能用的。这个时候就要通过isp,做一些blc、去马赛克、awb、ae、色彩校正、gamma矫正、sharp的操作,经过这些处理好了,基本上就是能用的图像了。

标定的时候,软件部分就是板子跑一个server程序,电脑跑一个上位机程序,通过一些道具,类似于棋盘格、色卡、灰度卡、灯箱、模特假人等等,来对图像进行标定处理。

7、v4l2驱动

linux上面camera处理的接口是v4l2,但是怎么把v4l2接口和不同的soc绑定在一起,这就是soc驱动的意义所在。所以这里面其实有三部分需要协调在一起,一个是sensor、一个是linux v4l2,还有一个就是soc,理解了这三部分,其实就可以慢慢了解了linux camera驱动开发的意义了。

不仅如此,linux驱动还涉及到修改menuconfig、配置dts、ko驱动编译,本身用到什么学什么的立场,慢慢去学就好了。之前说的sensor驱动、mipi驱动只告知sensor属性如何配置、什么时候可以发送frame、格式是什么,而v4l2驱动的工作就多了,一方面要完成上层app的接口,一方面还要涉及到中断、dma、内存以及isp,把报文正确地拿到,并且放到queue里面。

8、soc sdk

很多工具,或者代码是没有办法通过开源代码拿到的。不同的soc,需要通过不同的代理商,或者是购买他们的开发板,才能拿到对应soc的sdk,不然是没有办法进行交叉编译开发的,很多内容也是开源代码根本没有的。并不是所有的代码都是以open source的形式发布出来的,这一点需要注意下。商业是商业,技术是技术,你觉得是技术的东西,别人眼里只有有利可图,才能和你进一步接洽和合作的。

再比如图像之后的编解码、图像处理、音频编解码,这部分的驱动代码都是不给的,都会以ko形式提供sdk。哪怕是上层的编解码库,很多时候也是不给源代码的,只有demo,没有sdk的源代码。这部分也需要适应一下。

这里说的sdk,是广义上的sdk,里面包含了芯片资料、demo板原理图、uboot、kernel、busybox、音视频ko驱动、音视频so库等等。不仅如此,很多sdk还报了很多调试工具、下载工具、交互工具,内容非常丰富。

9、屏幕驱动

很多应用除了camera之外,还需要实时显示,或者是低延时显示。所以如果有可能的话,最好把常用的几种screen接口一起学一下,比如说rgb屏幕、hdmi屏幕、mipi屏幕等等,相信学完之后,对自己的发展大有裨益。

屏幕的种类也非常多,有接口的不同,有形状的不同,还有分辨率、帧率的不同,这里面的学问也很大。所以它其实和sensor一样,本身也是一个巨大的市场。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:13:09

Keil5芯片包下载配置详解:小白指南(超详细版)

以下是对您提供的博文内容进行 深度润色与重构后的技术文章 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、专业、有“人味”——像一位在工业现场摸爬滚打十年的嵌入式老兵在和你聊天; ✅ 摒弃所有模板化标题&#xff0…

作者头像 李华
网站建设 2026/6/15 13:15:15

Z-Image-Turbo值得入手吗?真实用户反馈汇总

Z-Image-Turbo值得入手吗?真实用户反馈汇总 1. 开篇:不是测评,是37位真实用户的集体发言 你可能已经看过不少Z-Image-Turbo的参数介绍、技术解析甚至“秒出图”的炫酷演示。但真正决定要不要花时间部署、调参、存图的,从来不是那…

作者头像 李华
网站建设 2026/6/15 14:37:18

对比测试:单个vs批量处理,HeyGem哪种更快?

对比测试:单个vs批量处理,HeyGem哪种更快? 在数字人视频生成的实际工作中,一个看似简单的问题常常困扰着内容创作者和运营人员:当我有10段音频要配到20个数字人形象上,是该逐个点击“开始生成”&#xff0…

作者头像 李华
网站建设 2026/6/15 13:12:43

ChatGLM3-6B开源模型应用:政务公文智能起草与合规性初审助手

ChatGLM3-6B开源模型应用:政务公文智能起草与合规性初审助手 1. 为什么政务场景特别需要本地化大模型? 你有没有遇到过这样的情况:一份通知稿反复修改五遍,领导还是说“语气不够庄重”;一份请示文件写完才发现漏了政…

作者头像 李华
网站建设 2026/6/15 12:17:30

Swin2SR完整流程:从HTTP链接访问到文件保存全过程

Swin2SR完整流程:从HTTP链接访问到文件保存全过程 1. 什么是Swin2SR?——你的AI显微镜来了 你有没有遇到过这样的情况:一张刚生成的AI绘画只有512512,放大后全是马赛克;一张十年前的老照片发黄模糊,想打印…

作者头像 李华
网站建设 2026/6/15 14:10:39

Mac端AI开发新选择:Unsloth框架安装与初体验

Mac端AI开发新选择:Unsloth框架安装与初体验 在Mac上做大模型微调,曾经是件让人皱眉的事——要么依赖云GPU,要么在本地反复编译报错、显存告警、CUDA不兼容。直到最近,一个非官方但实测可用的苹果芯片适配分支悄然走热&#xff1…

作者头像 李华