用bootsplash制作和修改Linux全图像启动界面.docx
- 文档编号:24700518
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:14
- 大小:22.24KB
用bootsplash制作和修改Linux全图像启动界面.docx
《用bootsplash制作和修改Linux全图像启动界面.docx》由会员分享,可在线阅读,更多相关《用bootsplash制作和修改Linux全图像启动界面.docx(14页珍藏版)》请在冰豆网上搜索。
用bootsplash制作和修改Linux全图像启动界面
用bootsplash制作和修改Linux全图像启动界面
#1用bootsplash制作和修改Linux全图像启动界面
只是想更改开机画面的读者直接跳到第5步阅读。
1.下载所需内核补丁,工具和主题:
http:
//www.bootsplash.de
http:
//www.bootsplash.org
2.给内核打补丁,并加上所需要的内核参数。
cd/usr/src/linux
makemrproper
patch-p1
makemenuconfig
对于2.6.x内核:
CODE:
[Copytoclipboard]
--------------------------------------------------------------------------------
Codematurityleveloptions--->
?
Promptfordevelopmentand/orincompletecode/drivers
Processortypeandfeatures--->
?
MTRR(MemoryTypeRangeRegister)support
DeviceDrivers--->
Blockdevices--->
Loopbackdevicesupport
RAMdisksupport
(4096)DefaultRAMdisksize
?
InitialRAMdisk(initrd)support
Graphicssupport--->
?
Supportforframebufferdevices
?
VESAVGAgraphicssupport
Consoledisplaydriversupport--->
?
Videomodeselectionsupport
FramebufferConsolesupport
Bootsplashconfiguration--->
?
Bootupsplashscreen
然后是编译内核了:
make
makemodules_install
makeinstall
再把生成的内核拷贝到/boot下:
cp/usr/src/linux/arch/i386/boot/bzImage/boot
cp/usr/src/linux/System.map/boot/System.map-2.6.14
3.安装bootsplash-3.0.7里面的工具
解压bootsplash-3.0.7.tgz,并进入bootsplash-3.0.7/Utilities目录。
执行命令:
make
cpfbresolutionfbmngplayfbtruetypesplash/sbin/
4.建立目录/etc/bootsplash/themes,解压Theme-Linux.tar.bz2到这个目录下,目前的目录结构应该是:
/etc/bootsplash/themes/Linux
ln-sLinuxcurrent
5.使用splash程式:
/sbin/splash-s-f/etc/bootsplash/themes/Linux/config/bootsplash-1024x768.cfg>/boot/myinitrd.img
这时候,就需要修改刚才的menu.lst或gurb.conf文件了,修改参照如下:
titleMagicLinux
root(hd0,6)
kernel/boot/lfs-bootsplashroot=/dev/hda7rovga=791splash=silent
initrd/boot/myinitrd.img
目前重启,就能看到可爱的小企鹅了,按F2,会变成verbose模式。
6.加个进度条
这一步需要修改启动脚本。
打开文件/etc/rc.d/init.d,在最后加入:
代码:
CODE:
[Copytoclipboard]
--------------------------------------------------------------------------------
progressbar()
{
if[$#!
=1]
then
echo"Usage:
progressbar{progress}"
exit1
fi
echo"show$((65534*$1/100))">/proc/splash
}
这个就是进度条函数了。
要使用这个函数,还需要在具体的启动脚本里添加调用语句。
我一般是用运行级3的,这时的启动过程,需要经过rcsysinit.d和rc3.d两个目录。
我的这两个目录下面的链接是这样:
[root:
/etc/rc.d/rc3.d]#ls/etc/rc.d/rcsysinit.d/
S10swapS30checkfsS50cleanfsS70loadkeys
S20mountprocS40mountfsS60setclockS80localnet
[root:
/etc/rc.d/rc3.d]#ls/etc/rc.d/rc3.d/
S10sysklogdS25randomS40alsa
目前就需要根据个人的情况,编辑相应的启动脚本。
别忘了,所有的启动脚本都在/etc/rc.d/init.d下面。
按照我的情况,需要编辑的脚本是:
checkfsmountfscleanfssetclockloadkeyslocalnet
sysklogdrandom和alsa.
为什么不编辑前两个脚本swap和mountproc呢?
这是因为,progressbar函数里用到了/proc/splash,而在mountproc之前,这个文件是不存在的。
一共是10个脚本,在每个脚本的loadproc那一句(有些脚本没有loadproc的,这就需要根据情况来看了,反正都是在start参数后面,而在evaluate_retval前面的)前面,加上:
progressbarXXX
这个XXX是小于100的数字,也就是表示启动时进度条的百分比。
要说明的是,这个数字按照启动顺序,只能增大,要不然,进度条就会反着走了。
启动顺序就是我上面列出的从小到大,从rcsysinit.d到rc3.d。
举个例子,第一个要编辑的是S30checkfs,就进入/etc/rc.d/init.d目录,打开checkfs脚本,这个脚本不仅没有loadproc,而且连start参数也没有,但没关系,我们找到evaluate_retval,他前面的一句就是真正执行的语句,如下:
echo"Mountingrootfilesysteminread-onlymode..."
mount-n-oremount,ro/
evaluate_retval
我把他改成:
echo"Mountingrootfilesysteminread-onlymode..."
progressbar10
mount-n-oremount,ro/
evaluate_retval
其他的也差不多。
由于执行各个脚本的时间不太清晰,所以需要经过仔细调整,才能让进度条走得均匀。
不过这个问题倒是不大,只要能从0走到100就差不多了吧:
)
目前重启,就能看到进度条了。
不过我做完了以后,发现意思不大,因为在checkfs之前,进度条不走,而开始走了以后,非常快就到100%啦,呵呵,可能服务装多了以后,效果更明显吧。
7.动画效果
在前面的bootsplash-3.0.7.tar.bz2解压后,里面有个Scripts目录,这里提供了bootanim和splash.sh两个脚本,但他都是用于suse的,对于LFS不太适用,因此我做了两个脚本:
bootanim.sh:
代码:
#!
/bin/bash
#
#splash.sh-Thisshellscripttriggersbootsplashactionsduring
#systemboot/shutdown.Itcanberunbytheinitscriptsrepeatedly
#specifyingthecurrentlyexecutedsystemscript.
#
#Thisscriptisusedtoplayanimations/sounds/showtext/movethe
#progressbar,etc.
#
#Wecallthisfunctionfrom/etc/rc.status:
rc_splash()
#
#Thisprogramisfreesoftware;youmayredistributeitunder
#thetermsoftheGNUGeneralPublicLicense.Thisprogramhas
#absolutelynowarranty.
#
#written2002-2003StefanReinauer,stepan@suse.de[/email]
>
#
#thisscriptexpectsthefollowingenvironmentvariablesforan
#operable
#progressbar:
#
#sscripts=numberofstartscriptstobeexecutedforrunlevelchange
#kscripts=numberofstopscriptstobeexecutedforrunlevelchange
#progress=numberofcurrentlyexecutedstart/stopscript
#RUNLEVEL=runleveltobereached.
#
#Toplayanimations,it’sadvisedthatyouhaveananimations.cfgin
#your
#theme’sconfigdirectoryspecifyingtheinitscriptnameforanevent
#and
#thecommandtobeexecuted:
#
# fsckstart:
bootanimstartbounce.mng
# master:
bootanimstop
#
#See
http:
//www.bootsplash.org/
formoreinformation.
#
_procsplash="`cat/proc/splash2>/dev/null`"
THEME="current"
#test-f/etc/sysconfig/bootsplash&&./etc/sysconfig/bootsplash
test!
-d"/etc/bootsplash/themes/$THEME"&&exit0
#parseanimations.cfg.Thispartshouldnotbehandledbythe
#splashbinary.
functionbox(){true;}#ignoreboxdescriptionsintheconfigfile
test-f
"/etc/bootsplash/themes/$THEME/config/bootsplash-`fbresolution`.cfg"&&
\
./etc/bootsplash/themes/$THEME/config/bootsplash-`fbresolution`.cfg
if[-f/etc/bootsplash/themes/$THEME/config/animations.cfg];then
COMMAND="`cat/etc/bootsplash/themes/$THEME/config/animations.cfg|
grep"^$1"|cut-f2-d\:
`"
eval$COMMAND
fi
第二个是bootanim:
代码:
#!
/bin/bash
#
#bootanim-bootanimationwrapperscriptforfbmngplay
#
#Thisscriptparses/usr/share/splash/current/config/bootsplash-XxY.cfg
#todeterminethecorrectanimationposition.
#
#(C)2002SuSEAG.WrittenbyStefanReinauerstepan@suse.de[/email]
>
#
#modifiedbyMichaelAichler
#
usage()
{
echo"Usage:
`basename$0`COMMAND[OPTIONS]mng1[mng2...]"
cat
Availablecommands:
start startsgivenanimation
stop fadesoutallrunninganimations
kill immediatelystopsallanimations
next killscurrentandstartsnextanimation.
Optionsforusewithstartcommand:
EOF
echo-e"`fbmngplay-h2>&1|grep-v\"usage:
\"|grep
\"-\"`\n"
}
if[!
-x/sbin/splash];then
echo"`basename$0`:
can’tfindsplashutility"
exit1
fi
DIRECTORY=/etc/bootsplash/themes/current/animations
OPTIONS=""
FILES=""
buffer=""
console=""
case"$1"in
start)
#Wefallthroughhere.
;;
stop)
killall-q-2fbmngplay
exit0
;;
kill)
killall-qfbmngplay
exit0
;;
next)
killall-q-USR1fbmngplay
exit0
;;
*)
echo"`basename$0`:
illegalparameter."
usage
exit1
;;
esac
shift
#Weendupinbootanimstart
forargin$*;do
if["${arg#*.}"=="mng"];then
FILES="$FILES$arg"
else
test"$arg"=="-b"&&buffer="true"
test"$arg"=="-c"&&console="true"
OPTIONS="$OPTIONS$arg"
fi
done
test-f
"/etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg"&&
\
./etc/bootsplash/themes/current/config/bootsplash-`fbresolution`.cfg
test-z"$buffer"&&OPTIONS="$OPTIONS-b"
test-z"$console"&&OPTIONS="$OPTIONS-c1"
echo$ax
OPTIONS="$OPTIONS-x$ax-y$ay"
CMDLINE="fbmngplay$OPTIONS"
forfilein$FILES;do
CMDLINE="$CMDLINE${DIRECTORY}/${file}"
done
eval"$CMDLINE&"
把这两个脚本保存好,然后:
chmod755bootanim.shbootanim&&
cpbootanim.shbootanim/sbin
这两个脚本及前面安装的fbmngplay程式是用来处理动画效果的。
不过,动画效果还需要主题的支持。
我前面下载的主题Linux,不支持动画效果。
关于主题所支持的功能,参见:
http:
//bootsplash.org/themes.html
我下载了一个Redmond的主题,他能支持动画。
ftp:
//
和前面的做法相同,还是解压到/etc/bootsplash/themes目录下,并删除老的current链接,新建一个:
rmcurrent
ln-sRedmondcurrent
由于主题换了,自然就需要重新写initrd文件了:
/sbin/splash-s-f/etc/bootsplash/themes/current/config/bootsplash-1024x768.cfg>>/boot/initrd.splash
为了使用动画,还要在/etc/rc.d/init.d/functions里增加新的函数。
代码:
animate()
{
if[$#=0]
then
echo"Usage:
animate{hook}"
exit1
fi
/sbin/bootanim.sh"$*"
}
还要修改启动脚本,使用这个函数要比progressbar复杂一点。
需要在启动脚本里添加:
animateHOOK
这个HOOK的值,要到/etc/bootsplash/themes/current/config/animations.cfg文件里找。
对于Redmond这个主题,这个文件的内容是:
fsckstart:
bootanimstartbounce.mng
master:
bootanimstop
shutdown:
bootanimstartbounce.mng
这里的格式是:
HOOK:
command
冒号前面的,是需要增加到启动脚本里的内容,而后面的,是真正执行的命令。
我修改了三个脚本,第一个是checkfs(动画开始),第二个是alsa(动画结束),第三个是/etc/rc.d/rc6.d里面的第一个alsa(显示关机画面).
例:
checkfs脚本,修改后相关内容如下:
echo"Mountingrootfilesysteminread-onlymode..."
progressbar10
mount-n-oremount,ro/
animatefsckstart
evaluate_retval
alsa脚本要修改两个地方,开机动画结束,应该在start参数里,而关机画面,则是在stop参数里。
如下:
代码:
start)
echo"StartingALSA... Restoringvolumes..."
progressbar100
animatemaster
loadproc/usr/sbin/alsactlrestore
#echo" LoadingMIDIfont..."
#loadprocsfxload/path/to/soundfont
;;
stop)
echo"StoppingALSA... Savingvolumes......"
animateshutdown
loadproc/usr/sbin/alsactlstore
#echo" RemovingMIDIfont.........."
#loadprocsfxload-i
目前开机的时候比较正常了,既有背景,又有动画。
没有进度条是因为这个主题不支持进度条。
关机的时候还不太好,只有动画,没有全图。
8.关机画面
在你关机执行的第一个脚本里加入
echo"silent">/proc/splash
还没忘记吧,要在/etc/rc.d/rc6.d里面找以K打头,数字最小的链接。
我的机子上是alsa
,改了以后,stop参数是:
代码:
stop)
echo"StoppingALSA... Savingvolumes......"
echo"silent">>/proc/splash
animateshutdown
loadproc/usr/sbin/alsactlstore
#echo" RemovingMIDIfont.........."
#loadprocsfxload-i
;;
要说明的是,这个关机画面其实就是把主题转换到silent模式,所以如果主题不支持silent模式,就没有用了。
Linux和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- bootsplash 制作 修改 Linux 图像 启动 界面