device管理器用于对设备进行管理,主要包括设备管理器的初始化、设备添加、删除、查找、比较等操作。
对于设备的管理采用双向链表管理,方便设备添加、删除、查找等操作。
设备管理器结构体:
struct __dev_manager {
struct list_head list;//链表
OS_MUTEX mutex;//信号量
OS_SEM sem;//同步信号
u32 counter;//计数器,时间戳
};
第一个成员即为双向链表,结构体如下:
struct list_head {
struct list_head *next, *prev;
};
成员为next指针和prev指针。
每个设备也使用结构体来表示,包含设备参数信息、状态信息等。
既然设备要纳入设备管理器来管理,因此,设备结构体中也必须包含有双向链表。其结构体如下:
struct __dev {
struct list_head entry;//链表
struct __dev_reg *parm;//设备参数
struct imount *fmnt;//挂载
volatile u8 valid: 1;//有效设备标记, 这里有效是指是否有可播放文件
volatile u32 active_stamp;///活动设备时间戳,通过时间戳记录当前最后活动设备
};
设备管理器的定义:
static struct __dev_manager dev_mg;//设备管理器
#define __this (&dev_mg)//设备管理器
通过dev_mg或__this都可以对链表进行访问操作。其中__this为指针。
__this-&