在上篇文章《 OpenHarmony驱动框架HDF中设备管理服务构建过程详解(一)》中,介绍了设备管理服务涉及的对象类型及其相应的接口,也初步展示了设备管理服务中的对象类型关系网。如下图所示

在本篇文章中,我们开始叙述这张网的构建过程,按照上图中标识的数字,将本篇文章分为4个章节:
- 1. 创建DevHostServiceClnt
- 2. 创建DevHostService
- 3. 创建HdfDevice
- 4. 创建HdfDeviceNode
在介绍上述对象类型实体的过程中,也会介绍这些对象是如何进行关联的。
1 DevmgrService 构建DevHostServiceClnt
有上图可知,DevMgrService 并不是管理所有的设备,而只是管理host设备,而且 DevMgrService 管理的不是host设备,而是host设备服务的客户端(DevHostServiceClnt),所以DevMgrService管理的是DevHostServiceClnt。
1.1 DevMgrService的启动过程
DevMgrService的启动以DeviceManagerInit()为起点,以late_initcall()为入口点,被静态编译进内核,在内核启动后期启动,其启动过程如下:
late_initcall(DeviceManagerInit);
|-> DeviceManagerInit()
|-> DeviceManagerStart()
| // (1)创建DevMgr对象
|-> instance = DevmgrServiceGetInstance();
| // (2)发布DevMgr,"/dev/hdf/"+"dev_mgr"
|-> ioService = HdfIoServicePublish(DEV_MGR_NODE, DEV_MGR_NODE_PERM);
| // (3)启动DevMgr服务
|-> instance->StartService(instance);
如上,在函数 DeviceManagerStart() 内,调用HdfIoServicePublish() 将DevMgrService发布为一个设备服务节点“/dev/hdf/dev_mgr”,是为了能像控制器一般设备服务一样控制DevMgrService服务。
在最后,调用 DevMgrService的接口 StartService,即 DevmgrServiceStartService() 启动设备管理服务主体,其实就是为一个个host设备创建 DevHostServiceClnt ,并启动对应的 Host 设备在Host域内的DevHostService。
1.2 DevmgrService 构建host服务客户端
所有Host设备源于hcs设备配置树,DevMgrService 的 StartService 接口实现 DevmgrServiceStartService()调用HcsGetRootNode()依据hcs设备配置树构建其在内存内的树形结构链表g_hcsTreeRoot,然后GetHdfManagerNode()从该链表内获取根节点"hdf_manager"。然后依次创建Host设备服务在Manager域的Client节点——DevHostServiceClnt,并将该client节点添加到DevMgrService的hosts链表上。
具体过程如下:
DeviceManagerInit()
|-> DeviceManagerStart()
| // IDevmgrService :: StartService();
|-> DevmgrServiceStartService()
| // 获得DriverInstaller单例类对象指针
|-> installer = DriverInstallerGetInstance();
|
| // (1.1)初始化host设备链表hostList
|-> HdfAttributeManagerGetHostList(&hostList)
| | // 由hcs设备配置树构建内存内hcs树,并获得根节点"hdf_manager"
| |-> hdfManagerNode = GetHdfManagerNode(HcsGetRootNode());
| |-> hostNode = hdfManagerNode->child;
| |-> while (hostNode != NULL) {
| |-> struct HdfHostInfo *hostInfo = HdfHostInfoNewInstance();
| |-> GetHostInfo(hostNode, hostInfo);
| |-> hostInfo->hostId = hostId;
| |-> HdfSListAddOrder(hostList, &

最低0.47元/天 解锁文章
517

被折叠的 条评论
为什么被折叠?



