千家信息网

Linux DRM的component框架有什么作用

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Linux DRM的component框架有什么作用",在日常操作中,相信很多人在Linux DRM的component框架有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好
千家信息网最后更新 2025年12月02日Linux DRM的component框架有什么作用

这篇文章主要介绍"Linux DRM的component框架有什么作用",在日常操作中,相信很多人在Linux DRM的component框架有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux DRM的component框架有什么作用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、component介绍

Linux内核component代码实现文件:drivers/base/component.c

使用git log -p component.c命令,可以查看该文件的第一次提交记录。

commit 2a41e6070dd7ef539d0f3b1652b4839d04378e11Author: Russell King Date:   Fri Jan 10 23:23:37 2014 +0000    drivers/base: provide an infrastructure for componentised subsystems    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.    Therefore, we need a way to gather up the individual component devices    together, and indicate when we have all the component devices.    We do this in DT by providing a "superdevice" node which specifies    the components, eg:            imx-drm {                    compatible = "fsl,drm";                    crtcs = <&ipu1>;                    connectors = <&hdmi>;            };    The superdevice is declared into the component support, along with the    subcomponents.  The superdevice receives callbacks to locate the    subcomponents, and identify when all components are present.  At this    point, we bind the superdevice, which causes the appropriate subsystem    to be initialised in the conventional way.    When any of the components or superdevice are removed from the system,    we unbind the superdevice, thereby taking the subsystem down.

Linux内核引入component框架的目的:

在DRM、ALSA等子系统中,通过超级设备(superdevice)管理多个组件(component)加载顺序,保证所有组件都可正常使用。

二、超级设备

1.超级设备定义

超级设备也可称为master,一般指某个子系统(如:display-subsystem)。定义文件:rk3399.dtsi,内容如下:

    display_subsystem: display-subsystem {        compatible = "rockchip,display-subsystem";        ports = <&vopl_out>, <&vopb_out>;        clocks = <&cru PLL_VPLL>, <&cru PLL_CPLL>;        clock-names = "hdmi-tmds-pll", "default-vop-pll";        devfreq = <&dmc>;        status = "disabled";    };

2.超级设备加载

超级设备通过component_master_add_with_match()函数进行match注册,实现文件:rockchip_drm_drv.c,内容如下:

static int rockchip_drm_platform_probe(struct platform_device *pdev){    ...    /*     * Bind the crtc ports first, so that     * drm_of_find_possible_crtcs called from encoder .bind callbacks     * works as expected.     */    for (i = 0;; i++) {        ...        port = of_parse_phandle(np, "ports", i);        ...        component_match_add(dev, &match, compare_of, port->parent);  ## 1. Bind CRTC        of_node_put(port);    }    ...    /*     * For each bound crtc, bind the encoders attached to its     * remote endpoint.     */    for (i = 0;; i++) {        port = of_parse_phandle(np, "ports", i);                ...                rockchip_add_endpoints(dev, &match, port);                 ## 2. add endpoints for each port        of_node_put(port);    }    ...    return component_master_add_with_match(dev, &rockchip_drm_ops, match);}
三、component设备

1.component设备定义

component设备用来表示vop和各显示接口(如:HDMI、MIPI等),定义文件:rk3399.dtsi,内容如下:

        vopl_out: port {            #address-cells = <1>;            #size-cells = <0>;            vopl_out_dsi: endpoint@0 {                reg = <0>;                remote-endpoint = <&dsi_in_vopl>;            };            ...            vopl_out_hdmi: endpoint@2 {                reg = <2>;                remote-endpoint = <&hdmi_in_vopl>;            };            ...        };                vopb_out: port {            #address-cells = <1>;            #size-cells = <0>;            ...            vopb_out_dsi: endpoint@1 {                reg = <1>;                remote-endpoint = <&dsi_in_vopb>;            };            vopb_out_hdmi: endpoint@2 {                reg = <2>;                remote-endpoint = <&hdmi_in_vopb>;            };            ...        };

2.component设备加载

component设备通过component_add()函数进行加载。

vop实现文件rockchip_vop_reg.c,代码如下:

static int vop_probe(struct platform_device *pdev){    ...    return component_add(dev, &vop_component_ops);}

HDMI接口实现文件dw_hdmi-rockchip.c,代码如下:

static int dw_hdmi_rockchip_probe(struct platform_device *pdev){    ...    return component_add(&pdev->dev, &dw_hdmi_rockchip_ops);}

其它接口暂不介绍。

PS:

VOP(Video Output Processor)是Rockchip系列SoC的显示控制器。RK3399显示特性如下:

1、Dual VOP: one supports 4096x2160 with AFBC supported;The other supports 2560x16002、Dual channel MIPI-DSI (4 lanes per channel)3、eDP 1.3 (4 lanes with 10.8Gbps) to support display, with PSR4、HDMI 2.0 for 4K 60Hz with HDCP 1.4/2.25、DisplayPort 1.2 (4 lanes, up to 4K 60Hz)6、Supports Rec.2020 and conversion to Rec.709

注:本文代码基于RockPI 4A Debian系统Linux 4.4内核。

到此,关于"Linux DRM的component框架有什么作用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

设备 文件 框架 作用 代码 学习 内容 内核 接口 函数 子系统 更多 组件 帮助 实用 接下来 命令 多个 控制器 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 浙江金华青少年网络安全 网络安全图标解释 2021国家网络安全宣传周是 川师数据库期末考试 怀旧服服务器不同版本怎么下载 在关系数据库系统中所谓的关系是 网络管理或网络安全 深圳华宇互联网科技贵阳分公司 长沙裕帮软件开发有限公司 网站和网络安全防护工作 罗湖服务器机箱订做 云堤具备网络安全 软件开发的发展特点 幻塔传送时为什么服务器连接失败 炫我集群管理软件的服务器 浙江省电子政务网络安全 网络安全到底还能去学么 模拟器无法连接服务器 网络安全与信息宣传会议 数据库的基本函数 网络技术以后好就业吗 欧洲网络安全风险 魔兽世界部落9.0哪个服务器好 哈密软件开发参考价 海光cpu服务器白皮书 贵州正规网络技术服务产品介绍 河南软件开发公司有哪些 上传文件到远程服务器 福建应用软件开发排名 怀旧服新开服务器公告
0