在kernel中,component 和 master机制用来管理一个主设备,多个辅设备的subsystem,目前最典型的应用在DRM subsystem中。该机制的相关代码在drivers/base/component.c中, https://github.com/torvalds/linux/blob/master/drivers/base/component.c中有最新关于改文件的最新的详细的介绍。
- component.c 中声明了3个静态全局变量:
static DEFINE_MUTEX(component_mutex);
static LIST_HEAD(component_list);
static LIST_HEAD(masters);
其中, 互斥锁component_mutex用于保证资源的互斥访问。component_list为双向链表头,最终kernel中所有的component会形成一个双向链表,而component_list为这个双向链表的表头。masters类似,最终kernel中所有的master会形成一个双向链表,而masters即为这个双向链表的表头。
- match 结构体:
struct component_match {
size_t alloc;
size_t num;
struct component_match_array *compare;
};
struct component_match_array {
void *data;
int (*compa