在运行更新时获取信息¶
通常需要告知操作员运行更新的状态,而不仅仅是返回更新是否成功。 例如,如果目标具有显示或远程接口,则可以转发当前更新的目标及百分比, 以便估计还有多少更新需要完成。
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” 在屏幕上绘制进度条。