ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Camera(TODO)

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比如IMX219IMX415OV5647OV5640然后不要满足于“厂家 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这时候你会发现非常有意思。RK3568Sensor ↓ MIPI ↓ V4L2 ↓ ISP ↓ Video NodeQualcommSensor ↓ CSIPHY ↓ CSID ↓ IFE ↓ BPS ↓ ICP ↓ CamX ↓ CHI ↓ HAL3 ↓ Android Framework ↓ Camera App这时候才开始真正进入你的目标领域。两块板子的定位我建议你这样项目RK3568魔方派3V4L2⭐⭐⭐⭐⭐⭐⭐⭐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周开始魔方派3Android 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 魔方派330 天路线第一阶段V4L2 基础 —— Day 15目标不碰 Android先把 Linux Camera pipeline 搞懂。天数实验Day 1v4l2-ctl、media-ctl、查看/dev/video*Day 2media-ctl -p搞懂 Entity / Pad / LinkDay 3v4l2-ctl --list-formats-ext理解 RAW/YUVDay 4用v4l2-ctl抓一帧/连续视频Day 5自己写最简单的v4l2_capture.c最终你应该能解释/dev/video0 │ ├── V4L2 │ └── Media Controller │ ┌─────┴─────┐ │ │ Sensor ISP第二阶段Media Controller MIPI —— Day 610这是非常重要的一阶段。Day 6研究 RK3568media-ctl -p把所有 Entity 画出来。你自己画一张Sensor │ │ MIPI CSI-2 ↓ CSI2 │ ↓ CIF │ ↓ ISP │ ↓ VideoDay 7研究media-ctl --links media-ctl --print-dot理解EntityPadSinkSourceLinkFormatDay 8研究 MIPI CSI-2Clock Lane Data Lane 0 Data Lane 1 ...搞懂lane 数量lane rateRAW10 / RAW12CSI-2 packetVCDTDay 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 1117这是你真正开始进入Camera BSP的地方。最好选一个常见 SensorIMX219 / OV5647如果你手头没有 MIPI Sensor我建议先买一个 IMX219。Day 11找到 Sensor driverfind drivers/media -iname *imx219*阅读probe() remove()搞清楚I2C GPIO Clock Regulator Reset PWDNDay 12研究 Sensor power sequenceVDD ↓ AVDD ↓ DVDD ↓ Clock ↓ RESET ↓ I2C然后对照 DTS。Day 13重点研究s_stream()搞清楚Camera 为什么执行STREAM ON后才真正开始输出 MIPIDay 14研究set_fmt() get_fmt() enum_mbus_code() enum_frame_size()理解Sensor format ↓ MEDIA_BUS_FMT_SRGGB10_1X10 ↓ CSI ↓ ISPDay 15自己增加一个 Sensor Mode。例如1920×1080 30fps RAW10Day 16修改曝光 gain frame length line length观察实际 FPS。Day 17自己写一个简单的 Sensor controlV4L2_CID_EXPOSURE V4L2_CID_ANALOGUE_GAIN做到用户空间修改参数 → Driver → I2C → Sensor register这一天结束你已经开始真正进入Camera Driver 开发。第四阶段ISP RAW 3A —— Day 1823这里开始进入 Camera 最有意思的部分。Day 18搞懂RAW ↓ Black Level ↓ Lens Shading ↓ Demosaic ↓ AWB ↓ Color Correction ↓ Gamma ↓ YUVDay 19抓 RAW。例如v4l2-ctl --stream-mmap然后把 RAW dump 出来。用 Python/OpenCV 分析。Day 20自己写一个最简单的RAW10 → RGB这样你会真正理解 BayerR G R G G B G B R G R G G B G BDay 21学习 AEBrightness ↓ AE ↓ Exposure Analog Gain ↓ Sensor重点搞懂为什么提高 gain 会增加噪声。Day 22学习 AWBR Gain G Gain B Gain理解为什么室内照片偏黄/偏蓝。Day 23学习 AFLens Position ↓ Sharpness ↓ AF Algorithm如果 Sensor 没有 AF就用理论模拟。第五阶段进入 Qualcomm —— Day 2430这时候再上你的魔方派3 / QCS6490。不要一上来就看 Camera HAL。先搞DTS ↓ Sensor ↓ CSIPHY ↓ CSID ↓ ISPDay 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 ↓ HAL3Day 28研究 QualcommCamX CHI重点不是马上看懂所有源码而是建立HAL3 ↓ CamX ↓ CHI ↓ Pipeline ↓ ISPDay 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-devicesmedia-ctl -pv4l2-ctl --list-formats-ext -d /dev/video0然后把这三个命令的输出贴给我。我可以直接根据你这块RK3568 当前实际 Camera pipeline带你做Day 1 实验而不是按照一套通用教程空讲。
返回列表