openKylin U盘启动器是一款用于制作系统启动U盘的工具,可将镜像文件制作成U盘形式的安装介质,方便无光驱介质的电脑安装镜像文件。其主要功能是制作系统,方便系统的安装,具体的实现过程如下:
1、查看U盘
openKylin U盘启动器通过udiskPlugWatcherInit函数自动监控/dev/目录下的文件变更,一旦有新设备U盘插入就重新执行lsblk解析shell的执行结果,获取出U盘信息。
U盘信息的解析过程是分别执行了lsblk-J 和lsblk-JS,筛选出所有USB协议连接的硬盘。其中lsblk-J中的J参数是将结果以json类型来展示,之后通过QJson类提取出U盘的信息。因为涉及到格式化整个物理设备,因此U盘在展示时是以整个物理单位展示,而不是按照分区显示。显示的具体格式为:U盘型号(设备文件路径),容量。例如:DataTraveler_3.0(/dev/sda) 32G。如果插入多个U盘,则是在下拉框中显示,且按照插入顺序进行显示。如下图1所示:
图1.U盘启动器首界面
2、查找镜像
查找镜像有两种方式,第一种是点击图1中的加号按钮查找镜像,点击后进入图2界面,此界面的原理是:通过使用QFileDialog::getOpenFileName()的方式,打开文件选取框,之后通过调用QFile的open函数,read函数获取尾缀为.iso的镜像文件,且计算iso.size()的方式获得文件的字节大小,之后通过除以10的6次方的方式转为GB。
图2.选择镜像文件
第二种获取镜像文件方式,便是在文件中选取尾缀为.iso的镜像文件,然后拖拽到打开的U盘启动器界面,这种方式的原理是将镜像文件的路径通过传值的方式,传输到界面。当然也用到了拖拽函数dragEnterEvent(),dropEvent(),这两个函数一般成对出现。
此外,如果已经拥有镜像文件,则可以点击右键选择U盘启动器直接进行镜像文件的制作,这种方式的原理类似第二种。
3、授权校验密码
当我们点击开始制作按钮后,系统将调用dbus接口,跳转到授权校验界面,用户输入密码授权,执行"echo'" + 密码+"'| sudo -S -l"判断用户输入的密码是否正确,如图3。
电脑图3.授权界面
4、制作镜像
制作开始前卸载u盘,点击开始制作按钮,通过makeStart函数,将授权的正确密码、镜像文件的路径,u盘的路径这三个参数传输到进程中。具体函数如下:
makeStart(authDialog->dialogKey->text(),isoPath,comboUdisk->getDiskPath());
之后使用QProcess进程的读写函数来读入dd命令,具体的读写函数语句为:
S dd if='"+sourcePath.toLocal8Bit()+"'of="+targetPath.toLocal8Bit()+"status=progress";
这条语句包括U盘路径,镜像文件路径和状态progress。以上两条语句便是U盘镜像制作的关键点。
同时,用户也可以在以下界面通过观察进度图,判断制作情况,进度条图的展示使用的是圆形进度条。首先使用QPainter函数画圆之后,使用setPersent()将进度传入进度条中,这种方式不用通过查看后台服务端的运行情况,更方便用户的体验,交互感更强烈,如图4。
图4电脑.正在制作界面
在制作完成后,waitForFinished()等待系统落盘,落盘后会提示制作完成,跳到制作完成界面。
图5.制作完成界面
如果在制作中途点击关闭,会弹出如下提示框,告诉用户启动盘正在制作中,是否停止,如果选是,则停止任务退出程序,如果选否,则会继续从当前制作制作启动盘。
图6.制作途中途中提示界面
好啦~以上就是对openKylin U盘启动器的部分原理介绍,如果有小伙伴对此感兴趣,可通过点击 https://gitee.com/openkylin/sig-documentation 前往openKylin仓库查看源码进行研究哦。
openKylin(开放麒麟)社区旨在以“共创”为核心,在开源、自愿、平等、协作的基础上,通过开源、开放的方式与企业构建合作伙伴生态体系,共同打造桌面操作系统顶级社区,推动Linux开源技术及其软硬件生态繁荣发展。
社区首批理事成员单位包括麒麟软件、普华基础软件、中科方德、麒麟信安、凝思软件、一铭软件、中兴新支点、元心科技、中国电科32所、技德系统、北京麟卓、先进操作系统创新中心等13家产业同仁和行业机构。
来源:戎有丽
审核:openKylin
电脑