1. 程式人生 > >[RK3399][Android7.1] 除錯筆記 Component System 介紹

[RK3399][Android7.1] 除錯筆記 Component System 介紹

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

文章目錄

在這裡插入圖片描述

看一下作者的描述:

Subsystems such as ALSA, DRM and others require a single card-level device structure to represent a subsystem. However, firmware tends to describe the individual devices and the connections between them.

1、裝置樹中components

We do this in DT by providing a “superdevice” node which specifies the components
在這裡插入圖片描述

在這裡插入圖片描述

2、驅動rockchip_drm_drv.c分析

把各個component連線起來的樞紐是驅動檔案 rockchip_drm_drv.c
目錄:kernel/drivers/gpu/drm/rockchip/rockchip_drm_drv.c

2.1、platform driver

在這裡插入圖片描述

2.2、入口函式probe

首先看第一部分:
在這裡插入圖片描述

of_parse_phandle

作用:DTS描述中按引數名字取結點

component_match_add(dev, &match, compare_of, port->parent);
繫結CRTC到match列表中,這樣encoder在呼叫bind回撥的時候能通過 drm_of_find_possible_crtcs()找到它們, 這裡的CRTC"vopb""vopl".match這個list只是用於儲存當前從dts中找到的有效的component, 如VOP,edp.
找到後在find_components()的時候會比較是否list中所有模組都已經被add進來了
在這裡插入圖片描述

看一下後半段:
在這裡插入圖片描述

新增遠端endpoint

match上,也是呼叫component_match_add()實現
注意:只有有效的endpoint才會被新增到match中,比如這裡只有edp被新增進去了。

match列表新增到master
return component_master_add_with_match(dev, &rockchip_drm_ops, match);

分析下:rockchip_add_endpoints(dev, &match, port);
在這裡插入圖片描述

看一下:component_master_add_with_match
在這裡插入圖片描述

try_to_bring_up_master
在這裡插入圖片描述

在驅動中superdevice通過component_master_add_with_match()執行,成為一個master。其中的變數match列表,它從dts中找到有效的component, 如VOP(CRTC),edp(Connector)然後新增進來。這樣就有了所有應該載入的component列表了。另一方面,每個component對應的驅動在載入後會新增到component_list這個變數中。
最終通過find_components()比較matchcomponent_list是否全部匹配,並決定是否執行後面的繫結動作。

我的另一篇部落格詳細流程

看一下K神部落格裡的流程:
在這裡插入圖片描述