Plymouth基本上看得差不多了~ 大概在70%这样吧~ Ubuntu 9.10貌似不会用Plymouth了,所以在确定之前暂停一下研究~ T 3T
这是我做的巡音章鱼开机动画 = 3=
下面介绍一下Plymouth的工作流程~
Plymouth主要分为2个端和2个阶段~
2个端分别为客户端和服务端,客户端是plymouth,服务端是plymouthd
2个阶段分别是ramdisk和root
首先是ramdisk,ramdisk在/boot/initrd-版本号.img
按如下方法解开~
1 : 首先将ramdisk拷贝出来
2 : mv ramdisk initrd.img.gz
3 : gunzip initrd.img.gz
4 : cpio – ivmd < initrd.img
解开之后可以看见在根目录下有一个init文件,打开查看可以看见对于Plymouth来说有3个命令
1 : daemonize –ignoe-missing /bin/plymouthd
这里开启了plymouth的服务端
2 : plymouth –show-splash
这里调用了客户端,并给出开始显示动画的指令
3 : plymouth –newroot=/sysroot
这里提示plymouth从ramdisk进入到root中
ramdisk结束之后到root中
root的初始化脚本在/etc/rc.d/rc.sysinit中
里面最主要是2条指令
1 : plymouth --hide-splash
这条指令用于隐藏动画 显示自检信息 , 一般在遇到错误的时候会调用这条指令
2 : plymouth --show-splash
这条指令用于恢复动画的显示 , 一般用于从错误信息中恢复动画
最后当要进入GDM也就是GNOME的账户管理界面的时候会调用plymouth –quit来切换到GDM
最后来看看2个端
对于服务端和客户端之间的关系,我画了一个图来描述
1.客户端和服务端之间的通信通过Socket进行
2.客户端向服务端发送Message,服务端收到指令之后回复一个Ack答复信息,客户端收到答复信息之后便结束进程
3.服务端根据收到的指令调用主题包中的对应函数进行操作
现在到程序的循环模式中
服务端和客户端都使用了同一种的循环模式:
使用一个while(1)来对events和timeout两个结构进行循环
1. events用于发送和接收指令信息
2. timeout用于进行超时处理,进度条和界面的重绘都挂载在timeout下,on_timeout用于界面的重绘,这个函数可以由主题或者LIB提供
以上是对plymouth的一点总结
下面是未解决的问题和抱怨 = 皿=
未解决:
1. 进程中有管道通信,但是不知道有什么用
2. Socket通信中的参数问题
3. framebuffer的参数问题
4. png图片的解析过程
抱怨:
1. 软件模块的布局不合理,嵌套无层次
2. 就算自己指定了目录,执行make install之后一样会覆盖掉根目录下的plymouth和plymouthd
3. 注释太少了 = 皿=
下面附上我注释的代码~ 因为还没全部看完~ 所以注释不是很全 = 3= 嘛~
|
文件: |
plymouth-0.7.0.rar |
大小: |
1149KB |
下载: |
下载 | |
阅读(1667) | 评论(0) | 转发(0) |