component 框架

背景:kernel中的component框架是为了subsystem能够按照一定的顺序初始化设备而提出的架构。subsystem中由较多设备模块组成(display subsystem 即由CRCT、encoder、connecter、gsm、等模块组成),而内核加载每个模块时间不定。则需要component框架来保证需最后初始化的设备加载前,所需设备全部加载完毕。架构描述:在component中,包含两个基本概念,master和component。master是设备树中的“超级设备(super
摘要由CSDN通过智能技术生成

背景:

kernel中的component框架是为了subsystem能够按照一定的顺序初始化设备而提出的架构。subsystem中由较多设备模块组成(display subsystem 即由CRCT、encoder、connecter、gsm、等模块组成),而内核加载每个模块时间不定。则需要component框架来保证需最后初始化的设备加载前,所需设备全部加载完毕。

架构描述:

在component中,包含两个基本概念,master和component。master是设备树中的“超级设备(superdevice)”,负责管理该超级设备下的普通设备。component是由master管理的普通设备,要先初始化。

master在设备树中一般为XXX-subsystem节点,如display-subsystem。节点有ports属性,属性里存有该master应该关联的普通设备,如ports = <&ipu1_di0>, <&ipu1_di1>, <&ipu2_di0>, <&ipu2_di1>;。

display-subsystem {

compatible = "fsl,imx-display-subsystem";

ports = <&ipu1_di0>, <&ipu1_di1>, <&ipu2_di0>, <&ipu2_di1>;

};

component是普通的设备节点,其下有与master的prots属性值一样的节点,如ipu1_di0的节点。通过属性值这个字段名,把超级设备与普通设备关联起来。

ipu1: ipu@02400000 {

...

ipu1_di0: port@2 {

#address-cells = <1>;

#size-cells = <0>;

reg = <2>;

 

ipu1_di0_disp0: disp0-endpoint {

};

主要文件:

/driver/base/component.c文件包含了主要逻辑。

 

设备的初始化流程:

初始化分为两部分:

1、master即超级设备,执行probe函数时使用component_master_add_with_match函数注册自己到component框架中。

2、component即普通设备,执行probe函数时使用component_add函数注册自己到component框架中。

两种流程先后顺序并无要求,可随意顺序。每一个设备加入到框架中,框架就尝试进行匹配,当master匹配上所有component后(匹配到dts中prots中的所有组件?),会调用master的bind回调(rockchip_drm_bind),开始按顺序进行初始化。保证了当所有子设备全部probe成功后再执行初始化操作。

 

1、Master设备的初始化流程

首先probe函数中定义一个component_match结构体的对象指针match。match是一个存储子节点的数组。遍历超级设备节点下的"ports"属性,每解析出1个属性值。

调用component_match_add函数,在match中添加一个compare数组成员,还会再将每个属性值关联的设备添加到match中。

返回probe函数,调用component_master_add_with_match函数,注册该master,在该函数中调用try_to_bring_up_master函数,尝试初始化该master。

1.1 Master设备probe函数

首先probe函数中定义一个component_match结构体的对象指针match。match是一个存储子节点的数组。遍历超级设备节点下的"ports"属性,每解析出1个属性值。调用component_match_add函数,在match中添加一个compare数组成员,还会再将每个属性值关联的设备添加到match中。返回probe函数,调用component_master_add_with_match函数,注册该

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
XComponent 是一种基于.NET 平台的现代化的、高度可扩展的、面向微服务架构的组件开发框架。它提供了一种简单而强大的方法来构建可重用的、高性能的、可靠的组件,用于构建复杂的分布式应用程序。 XComponent 的核心概念是组件。一个组件是一个自包含的、独立的模块,它具有自己的状态、行为和与其他组件的异步通信机制。通过定义端口和订阅机制,组件之间可以进行消息的传递和交互。这种松耦合的通信模式使得开发人员可以将注意力集中在组件的功能实现上,而不必担心与其他组件的紧密集成和依赖关系。 XComponent 的架构基于微服务模式,允许将应用程序划分为多个独立的组件,并通过组件之间的消息传递进行协作。这种分布式的架构可以提高系统的容错性、可伸缩性和可维护性。每个组件都可以在独立的进程或容器中运行,以便实现横向扩展和高可用性。 XComponent 还提供了丰富的工具和功能,使得组件的开发和部署变得更加容易。它支持多种编程语言和技术栈,包括C#、Java 和Python。开发人员可以使用自己熟悉的工具和语言来编写组件,并通过XComponent 运行时框架来实现它们的自动化部署和管理。 总而言之,XComponent 是一种强大而灵活的组件开发框架,它可以帮助开发人员构建可扩展、可靠的分布式应用程序。它的设计理念和架构使得开发人员可以更加专注于组件的功能实现,同时享受高度的可重用性、可伸缩性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值