-
Interact Methods (open/close, ioctls, mmap)
-
DMABUF (V4L2 Streaming I/O)
-
Image Formats
- v4l2_pix_format vs drm_format (V4L2_PIX_FMT_ in videodev2.h vs DRM_FORMAT_ in drm_fourcc.h)
- FourCC (Four Character Codes)
- ColorSpaces
- Depth Format (V4L2_PIX_FMT_Z16 vs DRM 没有 Depth Format)
- Popular Data Formats
- RGB565
-
Platform-specific Device Support
- 对于那些 Embedded SoC 场景下,它们的驱动模型都是 Platform device
-
Kernel Mode Driver Framework
- V4L2
layer data structure description 2/3 CSIPHY struct csiphy_device CSIPHY 的主要功能是连接和处理来自 camera sensor 的数据流,一个CSIPHY 可以连接一个独立 camera sensor 2/4 CSID struct csid_device Decoder 2/4 ISPIF struct ispif_device ISP Interface 4/8 VFE struct vfe_device Video Front End - for example drivers/media/platform/qcom/camss
Kconfig Makefile camss-csid-4-1.c camss-csid-4-7.c camss-csid-gen1.h camss-csid-gen2.c camss-csid-gen2.h camss-csid.c camss-csid.h camss-csiphy-2ph-1-0.c camss-csiphy-3ph-1-0.c camss-csiphy.c camss-csiphy.h camss-format.c camss-format.h camss-ispif.c camss-ispif.h camss-vfe-17x.c camss-vfe-4-1.c camss-vfe-4-7.c camss-vfe-4-8.c camss-vfe-480.c camss-vfe-gen1.c camss-vfe-gen1.h camss-vfe.c camss-vfe.h camss-video.c camss-video.h camss.c camss.h
- KMS
layer data structure description 1~n Framebuffer struct drm_framebuffer FB 1~n Plane struct drm_plane Where pixels come from 1 CRTC struct drm_crtc Overall Display Pipeline (blending & display timings ) 1~n Encoder struct drm_encoder Where pixels go to 1~n Connector struct drm_connector Display sinks - 为什么前者是 Decoder, 而后者是 Encoder?
- 首先 camera sensor (CMOS/CCD) 将光信号,转换成电信号再经过ADC 输出 digital value (0/1),CSIPHY 起的作用是连接和处理来自 sensor 的0/1数据以及通道管理 lane management,功耗控制 LP,传输速率 Gbps 等, 接下来由 CSI Decoder 将 MIPI CSI-2 串行数据流解码成并行数据流(图像帧格式)并输出给 ISP 芯片。不管是 CSIPHY 还是 CSI Decoder 都是 CSI-2 协议里的一个实体。
- 后者则是将 framebuffer 里的并行 RGB 数据转换成另一种数据格式(如HDMI 的 TMDS),这个过程是一种数据格式到另一种数据格式的 Encoder 编码。
- V4L2
-
Mode Setting vs Set Control (V4L2_CID_)
- KMS
- 显示分辨率, Fresh Hz, hblank(hsync), vblank(vsync)
- framebuffer size
- V4L2 set control
- hblank, vblank
- KMS
-
片上互连 (SoC 内部 IP 互连)
- Qualcomm CAMSS 使用 On-Chip Interconnect 框架 (ICC), Inter-Integrated Circuit (I2C,双向,串行)
- 龙芯 LSDC 驱动使用Component 框架
-
Vertical Blanking Interval (垂直同步)
-
Libraries
- libv4l
- libv4lconvert
- libv4l1
- libv4l2
- libkms (deprecated)
- libv4l
-
Utilities
-
Pipeline
- Camera pipeline of image processing vs GPU pipeline of triangle rendering vs Display pipeline of framebuffer presenting
-
Interface vs Infrastructure
- CSI/2/3 (Camera Serial Interface) vs DRI/2/3 (Direct Rendering Infrastructure) (仅仅字面上的共同点,它俩一个是图像数据传输协议,一个是驱动框架,但它们都有 3 个版本,目前 CSI2 使用应该最多,DRI2/DRI3 都有在使用)
-
Standards
- MIPI (Mobile Industry Processor Interface 联盟)
- MIPI CSI (Camera Serial Interface, 包括 Camera Control Interface (CCI) 实现 v4l2-cci.c)
- MIPI DSI (Display Serial Interface, 实现 drm_mipi_dsi.c)
- MIPI DBI (Display Bus Interface, 实现 drm_mipi_dbi.c)
- MIPI CCS (Camera Command Set)
- MIPI DCS (Display Command Set)
- SMIA (Standard Mobile Imaging Architecture)
- SMIA++
- VESA (Video Electronic Standards Association 视频电子标准协会)
- FDMI (Flat Display Mounting Interface)
- DisplayPort
- DisplayHDR
- MIPI (Mobile Industry Processor Interface 联盟)
-
Specifications
-
Ecosystem (Open-Sourced drivers)
-
驱动知识点
- camera
- DT
- I2C
- V4L2
- MIPI_D-PHY, MIPI_CSI-2
- ISP 驱动
- gpu
- DT (Linux 嵌入式应该都会涉及到)
- PCIe
- DRM
- ??? (五花八门,似乎没有一个统一的标准规定 gpu 应该如何如何)
- GPU 驱动
- camera
-
相似的数据结构
struct v4l2_rect
vsstruct drm_rect
V4L2_PIX_FMT_
宏 vsDRM_FORMAT_
宏 (都使用 fourcc)
-
都使用到的数据结构
struct fb_info
-
Data Struct
- media_device
- media_pipeline
- media_entity
- media_link
- media_interface
-
Subdevice Operations
- v4l2_subdev_video_ops
- v4l2_subdev_vbi_ops
- v4l2_subdev_sensor_ops
-
Media Bus
- V4L2_MBUS_PARALLEL
- V4L2_MBUS_BT656
- V4L2_MBUS_CSI1
- V4L2_MBUS_CCP2 (Compact Camera Port 2)
- V4L2_MBUS_CSI2_DPHY
- D-PHY 将每个字节串行化,并以最低有效位(LSB) 优先的顺序进行传输,速率 2.5Gbps, 低速低功耗
- V4L2_MBUS_CSI2_CPHY
- C-PHY 将每 16 位字组成 7 个符号,并以最低有效符号(LSS) 优先的顺序进行传输,速率 17.1Gbps, 高速高带宽
- V4L2_MBUS_DPI (MIPI VIDEO DPI 接口)
-
- LP-11
- 指数据通道和时钟通道同时处于高电平状态,多数设备在数据传输完成后会返回此状态,所以它相当于是一个 Stop State
- LP-111
- 是扩展的低功能状态,通常用于更复杂的控制信号序列
- LP-11
Last active
September 13, 2024 04:30
-
-
Save lucmann/bc2a970e0d5700b0e4da3bde7a8cf4f8 to your computer and use it in GitHub Desktop.
similarities between media and DRM subsystems
- MIPI CSI vs MIPI DSI
- CSI
- Camera Serial Interface (Application Processor <-> Image Sensor)
- CCS
- Camera Command Set
- DSI
- Display Serial Interface (Application Processor <-> Display module)
- DCS
- Display Command Set
- CSI
- Advanced Configuration Power Interface vs OpenFirmware
- ACPI
- 桌面,服务器
- OF (DeviceTree based)
- 移动,嵌入式
- ACPI
- CSI2
- transmitter (发射器)
- receiver (接收器
v4l2_subdev_video_ops
- pre_streamon: 在 streaming 开始前,设置 CSI2 发射器为 LP-11 或 LP-111 模式
- 一个 ISP 芯片包括哪些核心模块?
- A/D converter (如果 Sensor 有 ADC 功能,可能就需要在 ISP 芯片里了)
- Digital Signal Processor
- Memory Unit
- 数据流
- image senor -> bayer CFA -> raw image data -> analog signal -> A/D converter -> digital value -> CSI transmitter -> CSI receiver -> ISP
- CSI 是一个数据传输协议,它的 transmitter 应该实现在 Sensor 芯片侧,它 receiver 应该实现在 ISP 芯片侧
- OOC: Bayer 的滤波片阵列中 R, G, B 滤片的数量是 1:2:1, G 通道分为 Gr, Gb
- image senor -> bayer CFA -> raw image data -> analog signal -> A/D converter -> digital value -> CSI transmitter -> CSI receiver -> ISP
- image sensors
- CCD (Charge-Coupled Device) - 电荷耦合器件
- CMOS (Complementary Metal-Oxide-Semiconductor) - 互补金属氧化物半导体 (氧化物一般是二氧化硅)
- OOC: 这里的金属氧化物是要分开断句的,金属-氧化物-半导体, 分别是 MOSFET 晶体管结构中栅极-绝缘层-基底的材料
- ISP 主要功能
- AE (Automatic Exposure) - 自动曝光
- AF (Automatic Focus) - 自动对焦
- AWB (Automatic White Balance) - 自动白平衡
- BLC (Black Level Correction) - 黑电平校正
- BPC (Bad Point Correction) - 坏点校正
- CCM (Color Correction Matrix) - 颜色校正
- Demosaic - 去除马赛克 (也叫颜色差值)
- Denoise - 去除噪声
- Gamma Correction - Gamma 校正
- GB (Green Balance) - 绿平衡
- LSC (Lens Shade Correction) - 镜头阴影校正
- RGB2YUV
- Sharp - 锐化
- TestPattern 测试图像 (内核实现 media/common/v4l2-tpg/v4l2-tpg-core.c)
- WDR (Wide Dynamic Range) - 宽动态
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
对于不支持 CONFIG_PM 的内核,camera sensor 驱动都是使用 Runtime PM, 即在设备 probe 阶段上电,一直到设备 remove 阶段下电,这样会导致功耗上升
CONFIG_PM
的?CONFIG_PM_RUNTIME
被完全移除,而CONFIG_PM
也变成了 user-selectable