1. 程式人生 > >[RK3399][Android7.1] 除錯筆記DRM下device resource management(裝置資源管理)

[RK3399][Android7.1] 除錯筆記DRM下device resource management(裝置資源管理)

平臺 核心版本 安卓版本
RK3399 Linux4.4 Android7.1

文章目錄

edp驅動被分成兩個檔案

analogix_dp-rockchip.c rk驅動檔案
analogix_dp_core.c drm驅動檔案

1 、analogix_dp_bind的定義

首先檢視:
目錄kernel/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c

在這裡插入圖片描述

devm_kzalloc(dev, sizeof(struct analogix_dp_device), GFP_KERNEL);

的使用達到的目的是:不用考慮只要任意一種資源申請失敗,就要回滾釋放之前申請的所有資源,咱們只管申請就行了,裝置模型幫咱們釋放了。

EXPORT_SYMBOL_GPL(analogix_dp_bind);

Linux核心標頭檔案提供了一個方便的方法用來管理符號的對模組外部的可見性,因此減少了名稱空間的汙染(名稱空間的名稱可能會與核心其他地方定義的名稱衝突),並且適當資訊隱藏。 如果你的模組需要輸出符號給其他模組使用,應當使用下面的巨集定義:
EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);
這兩個巨集均用於將給定的符號匯出到模組外. _GPL版本的巨集定義只能使符號對GPL許可的模組可用。 符號必須在模組檔案的全域性部分匯出,不能在函式中匯出,這是因為上述這兩個巨集將被擴充套件成一個特殊用途的宣告,而該變數必須是全域性的。這個變數儲存於模組的一個特殊的可執行部分(一個"ELF

段" ),在裝載時,核心通過這個段來尋找模組匯出的變數(感興趣的讀者可以看<linux/module.h>獲知更詳細的資訊)。


2、 analogix_dp_bind的使用

目錄/kernel/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c

2.1、rockchip-dp platform驅動的註冊:

在這裡插入圖片描述

2.2、裝置樹對應資訊:

有了裝置樹,實現devicedriver 的匹配利用"compatible"來匹配的,即裝置樹載入之後,核心會自動把裝置樹節點轉換成platform_device這種格式,同時把名字放到of_node這個地方。
目錄:kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
在這裡插入圖片描述

目錄:kernel/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi
在這裡插入圖片描述

2.3、 檢視:sysfs 檔案系統

目錄 /sys/bus/platform/drivers/rockchip-dp
在這裡插入圖片描述

2.3 rockchip_dp_probe 入口函式的分析:

在這裡插入圖片描述

這裡最後呼叫了component_add

看一下rockchip_dp_component_ops

2.4 components的建立

首先介紹下componentised subsystemes

componentised subsystemes 介紹

分析下component的相關函式:
component_add() is called to add a component
在這裡插入圖片描述

https://lkml.org/lkml/2016/2/15/646

This calls try_to_bring_up_masters() which calls
try_to_bring_up_master() for each master in the system

try_to_bring_up_masters
在這裡插入圖片描述

try_to_bring_up_master
在這裡插入圖片描述

master->ops->bind(master->dev);

此時會呼叫:kernel/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
rockchip_drm_bind函式

在這裡插入圖片描述

目錄:kernel/drivers/base/component.ccomponent_bind
在這裡插入圖片描述
我的日誌:
在這裡插入圖片描述
kernel/drivers/gpu/drm$ vim rockchip/analogix_dp-rockchip.c
rockchip_dp_bind將會執行:
在這裡插入圖片描述

在這裡插入圖片描述
最後就是使用到return analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data);

分析一下:rockchip_dp_bind