我之前在阿里云开发者社区发布过1.0版本如何实现不重启系统的情况下完成操作系统改造的文章,但是当时我并没有写slfm the tube如何将用户引导到任何操作系统都无法直接调用的最高权限运行环境slfm recovery模式,这里我就详细的来说一下我设计的过程:
首先在开始之前,我先说一下我设计的正常情况下退出操作系统的流程,当用户点击关机\重启后,Android\Windows\嵌入式设备会触发Shutdown的应用程序,当这个应用程序被启动之后,首先第一步这个软件就会判断是由什么功能或者什么原因触发了Shutdown应用程序,如果是由于用户点击了重启\关机的原因导致系统启动Shutdown应用程序,那么系统则会直接执行关闭当前操作系统->通知硬件设备关机或者重启操作。
那么如果是可关闭当前系统触发了通过某种方式判断到,用户或者系统自动程序自动\用户手动触发system update机制,然后由于用户手动触发\系统自动触发system update的原因导致等待被接受改造的操作系统触发了slfm the tube将用户引导到完全独立于任何操作系统的最高权限级别运行环境--SLFM RECOVERY环境的原因导致系统触发Shutdown应用程序,Shutdown应用程序就会获取访问到SLFM RECOVERY运行环境的访问权限,然后将权限分享给SLFM THE TUBE,SLFM THE TUBE收到访问权限之后会先与SLFM RECOVERY运行环境确认权限,权限确认通过之后,SLFM THE TUBE就会准备将用户的设备直接引导到SLFM RECOVERY模式了,这里我说的准备指的是将用户引导到SLFM RECOVERY之前slfm the tube会通过访问完全独立于任何操作系统的运行环境的权限,通知位于完全独立于任何操作系统的某一款软件(这个软件我这里命名为RECOVERY RUNNER),启动slfm recovery运行环境,当SLFM RECOVERY被成功启动之后,将整个设备引导到SLFM RECOVERY模式的过程就会开始了,首先SLFM THE TUBE运行环境需要做的第一步是启动TRANSFER TO SLFM RECOVERY组件,这个组件的作用就是利用任何等待被改造的操作系统与完全独立于任何操作系统运行环境的通道,通知SLFM RECOVERY接管设备、等待接受改造的系统与SLFM RECOVERY运行环境一同管理设备,然后关闭等待被升级改造的系统对设备的操作权限。为了防止slfm recovery模式与等待被改造系统差异导致设备不知道该执行哪个系统的指令,一旦slfm recovery参与管理设备,会先释放一些参与管理设备的一些套件,这些套件的功能就是让SLFM RECOVERY完全接管设备,SLFM RECOVERY完全接管设备之后,用户ui会立刻转换成slfm recovery的UI,然后slfm recovery就会通知等候被接受改造的操作系统退出接管设备了,等候被改造的系统退出接管设备的流程包括:关闭所有正在运行的进程->通知slfm recovery被改造系统所有进程关闭成功,随后slfm the tube就会直接把设备引导到slfm recovery界面,当设备被成功引导到slfm recovery之后,slfm recovery就会通知等待接受改造的系统退出等待接受改造的操作系统,随后就是slfm recovery会提取被改造系统system update程序下载好的等待接受改造的操作系统的更高版本安装包,然后通过改造、删除、增加被接受改造系统文件、内置应用程序文件的方式改造操作系统,slfm recovery模式执行系统改造作业的时候,会创建system reedit.txt文件,这个txt文件会详细记录slfm recovery对系统进行改造时的操作记录详细信息,例如XXX年XXX月XXX日 SLFM RECOVERY在xxx系统路径中xx系统文件进行了什么样的编辑操作,增加的内容是xxx等数据。
当SLFM RECOVERY开始改造操作系统之前,会对等待接受改造的操作系统、软件程序和用户应用\用户文件进行备份,SLFM RECOVERY改造操作系统的时候一旦出现改造失败的情况,就会利用slfm the tube将设备引导到复制版的被改造操作系统,然后自动向设备\被改造系统厂商报告系统改造失败、系统改造失败的原因以及错误报告等数据。
此外如果是由于断电等原因导致SLFM RECOVERY暂停改造系统,那么SLFM RECOVERY就会暂停系统改造进程,等恢复供电之后SLFM RECOVERY就会读取system reedit.txt文件,判断断电之前slfm recovery对操作系统改造到了哪一步,还有哪些正在被改造的系统文件没有被删除、增加和改造,然后继续执行改造系统作业。
当系统改造完毕之后,slfm recovery就会启动这个改造好的新系统,然后slfm recovery会持续检测这个被改造的操作系统是否已经启动到锁定画面、桌面、是否启用相关功能,一旦改造好的系统启动到锁定画面或者启用了相关功能,那么这个时候启动slfm the tube,将设备引导到改造好的新系统。