Devmgr进程包含Coordinator(设备协调器)用于跟踪驱动程序和设备,进行驱动程序的发现、设备主机进程的创建和走向的管理,以及维护设备文件系统(devfs)。
Devmgr进程是zircon继内核加载的第一个用户态进程—userboot(类似linux的init进程)和userboot加载的第一个进程—bootsvc(保存启动相关信息,并提供bootfs等服务)之后的非常重要的一个程序。后续的zircon-drivers相关进程、zircon-services相关进程以及appmgr都是devmgr来启动。
Coordinator中的设备类型为struct Device,其继承自AsyncLoopRefCountedRpcHandler类,所以coordinator中的设备自带wait属性,属于可等待对象;而devhost中的设备则是struct zx_device类型是不可等待的,所以devhost中设备提供服务需要额外借助于“conn”对象,这里conn对象主要包括三种:DevhostControllerConnection、DeviceControllerConnection和DevfsConnection。
DevhostControllerConnection主要用于coordinator通知devhost创建设备(主要是总线类设备的创建,如platform bus);DeviceControllerConnection则是建立起devhost与coordinator的双向通信链路,既可以由devhost发送ipc通知coordinator添加设备、绑定驱动等,也可以有coordinator通知devhost绑定驱动、连接proxy等;DevfsConnection用于应用程序利用open获取设备句柄后的文件系统服务,详见“设备文件系统”章节。