在运行更新时获取信息 ===================================== 通常需要告知操作员运行更新的状态,而不仅仅是返回更新是否成功。 例如,如果目标具有显示或远程接口,则可以转发当前更新的目标及百分比, 以便估计还有多少更新需要完成。 SWUpdate为此提供了一个接口(“progress API”)。 外部进程可以在SWUpdate中注册自己, 当更新中的某些内容发生更改时,它将接收通知。 这与IPC API不同,因为后者主要用于传输SWU镜像, 只有轮询接口才能知道更新是否仍在运行。 API 描述 --------------- 外部进程将自己注册到SWUpdate,并向SWUpdate默认配置的域套接字 "/tmp/swupdateprog" 发出connect()请求。 当没有要发送的信息时,SWUpdate只是将新连接插入要通知的进程列表中。 SWUpdate在更新过程中发生任何更改后,将使用以下数据 (请参见include/progress_ipc.h)发回一帧数据: :: struct progress_msg { unsigned int magic; /* Magic Number */ unsigned int status; /* Update Status (Running, Failure) */ unsigned int dwl_percent; /* % downloaded data */ unsigned int nsteps; /* No. total of steps */ unsigned int cur_step; /* Current step index */ unsigned int cur_percent; /* % in current step */ char cur_image[256]; /* Name of image to be installed */ char hnd_name[64]; /* Name of running handler */ sourcetype source; /* Interface that triggered the update */ unsigned int infolen; /* Len of data valid in info */ char info[2048]; /* additional information about install */ }; 单个字段的含义如下: - *magic* 尚未使用,它可以被添加为帧的简单验证。 - *status* 是swupdate_status.h中的值之一(START, RUN, SUCCESS, FAILURE, DOWNLOAD, DONE)。 - *dwl_percent* 是status = Download 时下载数据的百分比。 - *nsteps* 是要运行的安装程序(处理程序)的总数。 - *cur_step* 是正在运行的处理程序的索引。cur_step在1..nsteps范围内 - *cur_percent* 是在当前处理程序中完成的工作的百分比。这在通过慢速接口,如低速flash, 进行更新时非常有用。信号是镜像已经复制到目标的百分比。 - *cur_image* 是当前正在安装的镜像在sw-description中的名称。 - *hnd_name* 报告正在运行的处理程序的名称。 - *source* 是触发更新的接口。 - *infolen* 后续info字段的数据长度。 - *info* 关于安装的附加信息。 进度客户端的一个例子是 ``tools/progress`` 。 在控制台打印状态,并驱动 "psplash" 在屏幕上绘制进度条。