news 2026/10/2 3:52:55

Camera(TODO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Camera(TODO)

可以,而且我反而建议你现在就开始学 Camera。你手上的这两个板子,其实非常适合形成一条路线:

RK3568 → 学 Linux Camera / V4L2 / Media Controller / Sensor / MIPI CSI → 魔方派3 → 学 Qualcomm Camera / Android Camera HAL3 / ISP / 3A

如果你的最终目标还是之前说的高通 Camera BSP 岗位,那么我会明确建议:RK3568 用来打基础,高通魔方派3用来学真正的 Qualcomm Camera。不要二选一。

为什么 RK3568 很适合现在开始

RK3568 的 Camera 硬件链路相对容易观察和理解。它有 VICAP、MIPI CSI-2、ISP 等模块;目前 Linux 社区的rkcif驱动也已经把 RK3568 的 MIPI CSI-2 receiver 和 VICAP 暴露成 V4L2/Media Controller 体系。(Infradead Lists)

你可以直接从这条链路学:

Sensor │ │ MIPI CSI-2 ↓ MIPI D-PHY │ ↓ CSI-2 RX │ ↓ VICAP / CIF │ ↓ ISP │ ↓ DMA │ ↓ DDR │ ↓ V4L2

然后用:

media-ctl -p v4l2-ctl --all v4l2-ctl --list-formats-ext

去观察整个 pipeline。

Rockchip 的rkisp1本身就是基于V4L2 + Media Controller的典型 ISP 驱动,这一套概念非常值得你掌握。(Rockchip 开源社区)


但真正重点是:你的魔方派3

你说的高通魔方派3应该就是RUBIK Pi 3。

它采用Qualcomm QCS6490,有Spectra ISP,而且板子提供2×4-lane MIPI CSI,官方还支持 Android 13。(GitHub)

这对你来说价值更大,因为你未来真正想吃透的是:

Qualcomm Camera BSP │ ├── Sensor Driver ├── CSIPHY ├── CSID ├── ISP ├── IFE ├── BPS ├── ICP ├── 3A │ ├── AE │ ├── AWB │ └── AF │ ├── Camera HAL3 ├── CamX ├── Chi └── Android Camera Framework

这才是你以后去面高通 Camera BSP时真正值钱的东西。

Qualcomm 的 Android Camera 架构本身就是围绕Camera HAL3和底层 Camera hardware/software stack 来构建的。(高通)


所以我给你一个非常明确的学习顺序

第一阶段:RK3568

先不要碰 Android Camera Framework。

纯 Linux Camera。

① V4L2

先搞懂:

/dev/videoX VIDIOC_QUERYCAP VIDIOC_ENUM_FMT VIDIOC_S_FMT VIDIOC_REQBUFS VIDIOC_QBUF VIDIOC_DQBUF VIDIOC_STREAMON VIDIOC_STREAMOFF

你必须能够自己写一个:

v4l2_capture.c

把 Camera RAW/YUV 抓到文件。


② Media Controller

然后重点学习:

media-ctl -p

搞懂:

Media Device ├── Entity ├── Pad ├── Link └── Pipeline

例如:

imx219 ↓ CSI2 ↓ rkcif ↓ rkisp ↓ /dev/videoX

这个东西非常重要。

因为以后到 Qualcomm,你会发现虽然名字变了,但是:

Sensor → CSI → ISP → output

这个基本思想完全一样。


第二阶段:Sensor Driver

这个阶段我建议你亲自写。

找一个便宜的 MIPI Camera,比如:

  • IMX219

  • IMX415

  • OV5647

  • OV5640

然后不要满足于:

“厂家 SDK 能拍照。”

而是自己研究:

sensor driver ↓ I2C ↓ regmap ↓ power sequence ↓ clock ↓ reset ↓ pwdn ↓ MIPI CSI

然后研究:

probe() remove() s_stream() set_fmt() get_fmt() enum_mbus_code() enum_frame_size() set_ctrl()

这一步对你以后转 Qualcomm Camera非常重要。


第三阶段:3A

然后再学:

AE AWB AF

以及:

Exposure Analog Gain Digital Gain Frame Length Line Length VBlank HBlank Pixel Rate FPS

这时候你会真正理解:

为什么 Camera Driver 里面有那么多奇怪的寄存器。

比如:

30 FPS ↓ Frame Length ↓ Exposure ↓ Analog Gain ↓ Sensor RAW ↓ ISP

这部分学通以后,再进入 Qualcomm 会轻松很多。


第四阶段:直接切到魔方派3

然后开始:

Qualcomm Camera BSP

这时候你会发现非常有意思。

RK3568:

Sensor ↓ MIPI ↓ V4L2 ↓ ISP ↓ Video Node

Qualcomm:

Sensor ↓ CSIPHY ↓ CSID ↓ IFE ↓ BPS ↓ ICP ↓ CamX ↓ CHI ↓ HAL3 ↓ Android Framework ↓ Camera App

这时候才开始真正进入你的目标领域。


两块板子的定位,我建议你这样

项目RK3568魔方派3
V4L2⭐⭐⭐⭐⭐⭐⭐⭐
Media Controller⭐⭐⭐⭐⭐⭐⭐⭐
Sensor Driver⭐⭐⭐⭐⭐⭐⭐⭐⭐
MIPI CSI⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
ISP原理⭐⭐⭐⭐⭐⭐⭐⭐⭐
3A⭐⭐⭐⭐⭐⭐⭐⭐⭐
Linux Camera⭐⭐⭐⭐⭐⭐⭐⭐⭐
Android Camera⭐⭐⭐⭐⭐⭐⭐⭐
HAL3⭐⭐⭐⭐⭐⭐⭐
Qualcomm Camera BSP⭐⭐⭐⭐⭐⭐
适合你当前阶段★★★★★★★★★☆
最终目标价值★★★★★★★★★

我甚至建议你现在就这样安排

第1周

RK3568

只做:

Sensor → MIPI → V4L2 → Media Controller → capture


第2周

研究:

Sensor Driver

自己改:

分辨率 FPS RAW10 RAW12 曝光 gain

第3周

研究:

ISP / 3A / RAW → YUV


第4周

开始魔方派3:

Android Camera HAL3

然后一路往下:

Camera App ↓ CameraService ↓ CameraProvider ↓ HAL3 ↓ CamX ↓ CHI ↓ ISP ↓ CSID ↓ CSIPHY ↓ Sensor

最终你要达到的水平

不是:

“我会调 Camera。”

而是看到一张照片以后,你能够从:

Android Camera App ↓ HAL3 ↓ CamX/CHI ↓ IFE ↓ CSID ↓ CSI PHY ↓ MIPI ↓ Sensor

一路追到硬件寄存器和 DTS。

这才是 Qualcomm Camera BSP 真正有竞争力的能力。

而且你现在RK3568 已经跑通了,这其实是非常好的起点。我建议不要再折腾别的平台了,就用 RK3568 正式开始 Camera;等 V4L2/Media Controller/Sensor 这一套吃透,马上切魔方派3。

如果你愿意,我下一步可以直接给你安排一套“RK3568 Camera 30天实战学习路线”,每天一个实验,最终做到自己写 Sensor Driver → MIPI → ISP → 抓 RAW → 分析 3A → 再迁移到 Qualcomm。

=======================

可以。考虑到你的目标不是单纯“会调用 Camera”,而是以后要做Qualcomm Camera BSP / Driver / HAL,我建议这 30 天不要走纯理论路线,而是采用:

RK3568 实机实验 → 看源码 → 改驱动/DTS → 抓数据 → 出问题自己定位 → 最后迁移到 Qualcomm 魔方派3

30 天路线

第一阶段:V4L2 基础 —— Day 1~5

目标:不碰 Android,先把 Linux Camera pipeline 搞懂。

天数实验
Day 1v4l2-ctl、media-ctl、查看/dev/video*
Day 2media-ctl -p,搞懂 Entity / Pad / Link
Day 3v4l2-ctl --list-formats-ext,理解 RAW/YUV
Day 4用v4l2-ctl抓一帧/连续视频
Day 5自己写最简单的v4l2_capture.c

最终你应该能解释:

/dev/video0 │ ├── V4L2 │ └── Media Controller │ ┌─────┴─────┐ │ │ Sensor ISP

第二阶段:Media Controller + MIPI —— Day 6~10

这是非常重要的一阶段。

Day 6

研究 RK3568:

media-ctl -p

把所有 Entity 画出来。

你自己画一张:

Sensor │ │ MIPI CSI-2 ↓ CSI2 │ ↓ CIF │ ↓ ISP │ ↓ Video

Day 7

研究:

media-ctl --links media-ctl --print-dot

理解:

  • Entity

  • Pad

  • Sink

  • Source

  • Link

  • Format

Day 8

研究 MIPI CSI-2:

Clock Lane Data Lane 0 Data Lane 1 ...

搞懂:

  • lane 数量

  • lane rate

  • RAW10 / RAW12

  • CSI-2 packet

  • VC

  • DT

Day 9

用逻辑分析/示波器不一定能直接看懂 MIPI,但重点研究:

Sensor register ↓ MIPI output ↓ CSI receiver

然后看 kernel log。

Day 10

故意制造错误。

例如修改:

lane number pixel format resolution link frequency

然后观察:

为什么没有 frame? 为什么 CRC error? 为什么 timeout? 为什么 format 不匹配?

这一阶段非常重要。


第三阶段:Sensor Driver —— Day 11~17

这是你真正开始进入Camera BSP的地方。

最好选一个常见 Sensor:

IMX219 / OV5647

如果你手头没有 MIPI Sensor,我建议先买一个 IMX219。


Day 11

找到 Sensor driver:

find drivers/media -iname '*imx219*'

阅读:

probe() remove()

搞清楚:

I2C GPIO Clock Regulator Reset PWDN

Day 12

研究 Sensor power sequence:

VDD ↓ AVDD ↓ DVDD ↓ Clock ↓ RESET ↓ I2C

然后对照 DTS。


Day 13

重点研究:

s_stream()

搞清楚:

Camera 为什么执行STREAM ON后才真正开始输出 MIPI?


Day 14

研究:

set_fmt() get_fmt() enum_mbus_code() enum_frame_size()

理解:

Sensor format ↓ MEDIA_BUS_FMT_SRGGB10_1X10 ↓ CSI ↓ ISP

Day 15

自己增加一个 Sensor Mode。

例如:

1920×1080 30fps RAW10

Day 16

修改:

曝光 gain frame length line length

观察实际 FPS。


Day 17

自己写一个简单的 Sensor control:

V4L2_CID_EXPOSURE V4L2_CID_ANALOGUE_GAIN

做到:

用户空间修改参数 → Driver → I2C → Sensor register

这一天结束,你已经开始真正进入Camera Driver 开发。


第四阶段:ISP + RAW + 3A —— Day 18~23

这里开始进入 Camera 最有意思的部分。

Day 18

搞懂:

RAW ↓ Black Level ↓ Lens Shading ↓ Demosaic ↓ AWB ↓ Color Correction ↓ Gamma ↓ YUV

Day 19

抓 RAW。

例如:

v4l2-ctl --stream-mmap

然后把 RAW dump 出来。

用 Python/OpenCV 分析。


Day 20

自己写一个最简单的:

RAW10 → RGB

这样你会真正理解 Bayer:

R G R G G B G B R G R G G B G B

Day 21

学习 AE:

Brightness ↓ AE ↓ Exposure + Analog Gain ↓ Sensor

重点搞懂:

为什么提高 gain 会增加噪声。


Day 22

学习 AWB:

R Gain G Gain B Gain

理解:

为什么室内照片偏黄/偏蓝。


Day 23

学习 AF:

Lens Position ↓ Sharpness ↓ AF Algorithm

如果 Sensor 没有 AF,就用理论模拟。


第五阶段:进入 Qualcomm —— Day 24~30

这时候再上你的魔方派3 / QCS6490。

不要一上来就看 Camera HAL。

先搞:

DTS ↓ Sensor ↓ CSIPHY ↓ CSID ↓ ISP

Day 24

确认 Camera 硬件:

adb shell dmesg | grep -i camera dmesg | grep -i csi dmesg | grep -i isp

然后:

adb shell ls /dev/video* adb shell ls /dev/media*

Day 25

研究 Qualcomm DTS。

重点找:

camera camss csiphy csid ife sensor cci

建立对应关系。


Day 26

研究:

CCI / I2C

你会发现这和 RK3568 Sensor Driver 的 I2C 本质是一样的。


Day 27

开始研究:

Camera HAL3

理解:

Application ↓ Camera2 API ↓ CameraService ↓ Camera Provider ↓ HAL3

Day 28

研究 Qualcomm:

CamX CHI

重点不是马上看懂所有源码,而是建立:

HAL3 ↓ CamX ↓ CHI ↓ Pipeline ↓ ISP

Day 29

拿一个 Camera request 跟踪:

Camera2 request ↓ HAL3 ↓ CamX ↓ ISP ↓ Sensor exposure ↓ Frame ↓ HAL ↓ Application

这是以后面试非常有价值的能力。


Day 30:做一个完整实验

最终做:

修改 Sensor 参数 → Camera 拍摄 → 修改曝光 → 修改 FPS → 抓 RAW → 分析 ISP → 从 Android Camera2 一路追到 Sensor

然后你自己画这张图:

Android │ Camera2 API │ CameraService │ HAL3 │ CamX │ CHI │ IFE │ CSID │ CSIPHY │ MIPI CSI │ Sensor │ I2C │ Sensor

这套路线有一个非常大的好处

你不会变成那种:

“我做过 Qualcomm Camera,但只是会改几个 XML / tuning 文件。”

而是会建立:

Sensor → MIPI → CSI → ISP → V4L2 → HAL3 → Android

整个体系。

这对于你之前准备的Qualcomm Camera BSP 面试也非常对路。


我建议你现在就从 Day 1 开始

先不要买任何东西,也不要急着上魔方派3。

你现在的 RK3568 已经跑通,第一步直接在板子上执行:

v4l2-ctl --list-devices
media-ctl -p
v4l2-ctl --list-formats-ext -d /dev/video0

然后把这三个命令的输出贴给我。

我可以直接根据你这块RK3568 当前实际 Camera pipeline,带你做Day 1 实验,而不是按照一套通用教程空讲。

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

SpringBoot+Vue协同过滤算法体育商品推荐系统毕设全解析

每年到这个时间点,后台总会收到很多类似的私信:毕设题目下来很久了,系统做了一半卡住了,导师催着要中期检查,网上找的源码跑不通,代码下载下来一打开全是报错。尤其是“电商系统”“推荐系统”这类毕业设计…

作者头像 李华
网站建设 2026/10/2 3:52:40

告别手动群发:用邮件合并与家校工具批量发送学生成绩单

当了好几年班主任,我最大的感受是:每次月考、期中、期末结束,最耗心力的不是改卷,而是“把几十份成绩发到家长手里”这一步。手动复制粘贴、一张张截图、挨个私聊,不仅慢,还特别容易把张三的分数发到李四的…

作者头像 李华
网站建设 2026/10/2 3:51:48

苹果20W充电头真伪辨别指南:从PD快充协议到序列号与纹波实测

1. 假冒充电头的市场现状:为什么非要在这件事上较真先说个我自己的经历。去年帮朋友收拾工位,发现他抽屉里躺着三个"苹果原装20W充电头",我随手拿起来掂了一下,重量明显不对,再看了一眼序列号印刷&#xff0…

作者头像 李华
网站建设 2026/10/2 3:48:01

相场法模拟定向凝固枝晶生长:Matlab实现与ParaView可视化全解析

1. 项目定位:从Kobayashi模型到定向凝固枝晶形貌做相场模拟的人大概都经历过一个阶段:看了好几遍Kobayashi的经典论文,觉得方程也不复杂,但自己动手一写,不是相场消失,就是枝晶长得跟土豆一样。这个项目就是…

作者头像 李华
网站建设 2026/10/2 3:47:37

C语言数据类型、常量和const限定符详解:从内存原理到实战避坑

很多人学C语言,学到“基本数据类型、常量、const限定符”这一块,心里其实是发虚的。printf能跑了,scanf也会用了,结果一看const int *p和int *const p直接愣住;搞不清#define和const到底该用哪个;更别说编译…

作者头像 李华
网站建设 2026/10/2 3:47:25

本地免费知识库搭建:Ollama+FAISS+MoreLogic RAG实战

1. 为什么我要自己搭一个知识库1.1 从“收藏夹吃灰”说起我电脑里有个文件夹叫“待读”,里面塞了大概四百多个网页存档、PDF 和 Markdown 笔记。每次想找某个技术细节,比如“FAISS 的 IndexIVFFlat 怎么调 nprobe”,我得先回忆这东西是去年几…

作者头像 李华