linux kernel component子系统:基于rk3588 Android 14 kernel-6.1 display-subsystem代码分析

linux kernel component子系统:基于rk3588 Android 14 kernel-6.1 display-subsystem代码分析

linux内核component子系统架构分析资源连接:

可用LibreOffice Draw软件打开编辑odg文件

lqy_rk3588_linux_kernel_component_subsystem.odg
lqy_rk3588_linux_kernel_component_subsystem.pdf
参考文档:

https://docs.kernel.org/driver-api/component.html
component框架用来处理内核模块加载/卸载顺序,保证最后加载的模块在需要先加载的模块都加载后加载。

总结:

bash 复制代码
总结:master主设备链表里关联的match匹配条件data与component从设备链表里的device进行匹配的过程。
回调master的bind()->component_bind_all()->回调component的bind()

主从链表法+匹配条件数组:
(masters链表+匹配条件数组) + component_list链表:
匹配条件数组:匹配条件组成的数组
匹配条件:匹配条件结构体struct包含,匹配函数如(*compare)(...)和component指针(指向满足匹配条件的component组件)。
1,先构造匹配条件数组,填充匹配函数如(*compare)(...),这时匹配条件里的component指针为NULL。
2,master主设备注册到aggregate_devices链表,并关联上匹配条件数组,master主设备遍历一遍component_list链表和匹配条件数组,来找到满足匹配条件的从设备component,把其填充到匹配条件里的component指针上。
3,当component从设备注册到component_list链表,遍历一遍aggregate_devices链表,每个master主设备遍历一遍component_list链表和匹配条件数组,来找到满足匹配条件的从设备component,把其填充到匹配条件里的component指针上。
4,当匹配条件数组里每个匹配条件的component指针都填充好后,回调master的bind()
回调函数,在该回调函数里面在调用componend_bind_all(),component_bind_all()按照匹配条件数组顺序调用component指针指向的从设备的bind()回调函数。
这样就实现了按照匹配条件数组顺序加载从设备了。

设备链表和设备的驱动链表是相互遍历找到设备对应的驱动的。

下面的图片可能不清晰,可以用chrome 浏览器,打开上面pdf进行查看。

举例分析rk3588 Android 14 kernel-6.1 display-subsystem的代码:

调试: mount -t debugfs debugfs /sys/kernel/debug cat

/sys/kernel/debug/device_component/display-subsystem

/sys/kernel/debug/device_component # cat display-subsystem

aggregate_device name status

------------------------------------------------------------- display-subsystem bound

device name status

------------------------------------------------------------- fdd90000.vop bound

fdea0000.hdmi bound

fde50000.dp bound

fde60000.dp bound

相关推荐
大耳朵-小飞象5 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技6 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++6 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室8 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
生活爱好者!9 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
爱笑鱼10 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
groundhappy10 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-10 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
爱笑鱼10 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
通信小小昕11 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu