[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、裝置樹對應資訊:
有了裝置樹,實現device
與 driver
的匹配利用"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
分析下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.c
中component_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