linux的DRM之mipi应用程序,LCD之MIPI接口
LCD之MIPI接口
(因本人之局限性,內容僅供參考。錯誤之處,敬請指出。謝謝!)linux
說到mipi接口,它不僅是一個簡簡單單的一個接口。而是一個兩層概念的疊加:物理傳輸系統結構(物理層面) 和 MIPI DSI 驅動框架(軟件層面)。
注意:“物理傳輸系統結構(物理層面) 和 MIPI DSI 驅動框架(軟件層面)” 這兩個名詞,是本人本身定義的。感受可以表達我心里的想法。web
首先講述一下 “物理傳輸系統結構(物理層面)”,它是一種什么概念。如圖:緩存
這幅圖描述的正是“物理傳輸系統結構(物理層面)”。
該物理層面大體分為三層:
->1.PHY Layer 物理層,通常使用 C-PHY,D-PHY,M-PHY。它們被設計的傳輸速率為:100Mbits/s,500Mbits/s,1000Mbits/s。(像RK3399-firefly使用的是D-PHY)
->2.中間層,該層涉及到兩個協議:DSI-2(LCD) 和CSI(camera)。 MIPI DSI 驅動就和這層有著莫大的關系。
->3.應用層。框架
那“MIPI DSI 驅動框架(軟件層面)”又是怎么回事呢?這涉及到linux內核如何實現 該MIPI接口的LCD驅動。
該驅動較為復雜,這里不進行詳細講解。
MIPI DSI 之 LCD 驅動 使用的是 DSI/DRM驅動框架。
DRM 由如下 4部分組成:
->1.KMS (kernel mode setting) : 改變分辨率 和 位深。
->2.DRI (direct rendering infrastructure) : 直接訪問硬件接口。
->3.GEM (graphics execution manager) : 內存管理。
->4.DRM (driver in kernel side) : 訪問硬件。
其中KMS模塊又由如下幾部分組成:
–>1.framebuffer (畫布)
–>2.CRTC (將plane 和 framebuffer數據進行配,畫畫)
–>3.Encoder
–>4.Connector
–>5.Plane
–>6.Drm device
KMS模塊的工做原理以下:
咱們以RK3399的內核對KMS模塊作簡單的分析:
(1)Framebuffer 畫布(圖像數據緩存區)相關的三個文件以下:
1.Drivers/gpu/drm/drm_fb_helper.c 內核開發者封裝的 DRM fb 標準接口。
2.Drivers/gpu/drm/rockchip/rockchip_drm_fb.c rockchiop根據上面的內核接口,封裝的專門針對本身芯片的 DRM fb 接口。
3.Drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c rockchip 根據上面的本身封裝的DRM fb接口 實現 rockchip本身的framebuffer 配置 函數。不過它也是給別人提供接口函數。(好比:rockchip_drm_fbdev_init()會被drivers/gpu/drm/rockchip/rockchip_drm_drv.c調用。)
(2)CRTC 主要用于顯示控制,如:display timing,resolution配置。Rockchip中的vop 就是根據CRTC 來進一步封裝實現出來的。
和CRTC 相關的文件是:
Drivers/gpu/drm/rockchip/rockchip_drm_vop.c
這個文件主要是根據內核開發者提供的函數接口,rockchip進一步封裝,實現的CRTC. 它是rockchip實現 VOP 的基礎。
(3)Encoder 他是將CRTC/VOP 處理后的圖像數據轉換成合適的格式。好比轉換成HDMI須要的TMDS格式的信息,或則MIPI須要的格式信息。而后再將轉換后的信息發送給connector.
Encoder 被rockchip實現位一個 platfrom總線驅動(rockchip-dp).它的主要文件是:
Drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
(4)Connector 表明具體的外部接口,如edp,hdmi,mipi等。用于傳輸信號給外部硬件顯示設備,探測外部顯示設備接入。Connector 中各類外部接口對應的驅動文件以下:
(1)Rockchip_lvds.c LVDS 接口。
(2)Analogix_dp-rockchip.c EDP 接口。
(3)Cdn-dp-core.c
(4)Dw-mipi-dsi.c MIPI接口
(5)Dw-hdmi-rockchip.c HDMI接口
咱們的connector模塊使用的是 dw-mipi-dsi.c 也就是mipi接口。
注意:
Encoder 和 connector 兩個模塊有些內容是重疊再一塊兒的,因此很難清晰的劃分開來。
(5)Planes 一個plane表明一個image layer(圖層),咱們最終顯示在顯示器上的是由一個或多個plane重疊組合而成。
通常planes有三種類型:
1.DRM_PLANE_TYPE_PRIMARY :必定要有,用于顯示背景或者圖像內容。
2.DRM_PLANE_TYPE_OVERLAY : 用于顯示overlay.
3.DRM_PLANE_TYPE_CURSOR : 用與顯示鼠標。
Plane 對應的結構體是: struct drm_plane_funcs .
該結構體的初始化在vop_plane_init()在rockchip_drm_vop.c 中建立注冊。
(6)Drm device 處理用戶空間的請求。在代碼中由struct drm_drivern 表示執行。
在 rockchip_drm_bind() drivers/gpu/drm/rockchip/rockchip_drm_drv.c 中建立注冊。ide
(內容源自理解,僅供參考)svg
總結
以上是生活随笔為你收集整理的linux的DRM之mipi应用程序,LCD之MIPI接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s安装dashboard组件
- 下一篇: EMC 存储(步步高项目)