[RK3399][Android7.1] 调试笔记DRM下device resource management(设备资源管理)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33487044/article/details/85345934
平台 内核版本 安卓版本
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

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/85345934