用Bootsplash 实现手机开关机动画

Bootsplash 实现手机开关机动画

 

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:李先静<xianjimli at hotmail dot com>

更新时间:2007-5-26

 

现在手机的开关机过程比较慢长,为了不至于让用户等得不耐烦,为了避免用户在不耐烦时做些误操作,也为了美观,手机在开关机时显示动画已经成为惯例了。最近要做Linux手机开关机动画,花了点时间去研究Bootsplash,这里做个笔记

 

1.         下载软件包。

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2

ftp://ftp.bootsplash.org/pub/bootsplash/rpm-sources/bootsplash/bootsplash-3.1.tar.bz2

ftp://ftp.bootsplash.org/pub/bootsplash/kernel/bootsplash-3.1.6-2.6.21.diff.gz

http://www.bootsplash.de/files/themes/Theme-Fedora.tar.bz2

(主题文件可以根据需要下载)

 

2.         编译内核

tar jxf  linux-2.6.21.tar.bz2

gzip -d bootsplash-3.1.6-2.6.21.diff.gz

cd linux-2.6.21

patch -p1 <../bootsplash-3.1.6-2.6.21.diff

make menuconfig

保证下列配置正常

Device Drivers

Graphics support

              <*> Support for frame buffer devices

[*]  VESA VGA graphics support

              Console display driver support

                     <*> Framebuffer Console support

              Bootsplash configuration

                     [*] Bootup splash screen

make; make modules_install;make install

 

3.         编译工具

tar jxvf bootsplash-3.1.tar.bz2

cd bootsplash-3.1/Utilities

make

(编译mng.c时,会成现几个编译错误,手工修改过来)

cp fbresolution fbmngplay fbtruetype splash splashpbm /sbin

splash -s –f /etc/bootsplash/themes/Fedora/config/bootsplash-1024x768.cfg>/boot/bootsplash

cd ../Scripts/

cp * /etc/rc.d

 

4.         生成主题数据文件

mkdir -p /etc/bootsplash/themes

tar jxvf Theme-Fedora.tar.bz2 -C /etc/bootsplash/themes/

 

5.         生成initrd

mkdir temp

cd temp

cp /boot/initrd-2.6.21.img ../initrd.gz

gzip -d ../initrd.gz

cpio -i <../initrd

cp /boot/bootsplash .

find . | cpio -c -o > ../initrd-2.6.21-splash.img

gzip ../initrd-2.6.21-splash.img

cp ../initrd-2.6.21-splash.img.gz /boot/initrd-2.6.21-splash.img

 

6.         增加grub menu配置文件

title Fedora Core (2.6.21) splash

root (hd0,6)

kernel /boot/vmlinuz-2.6.21 ro root=LABEL=/ vga=0x317 splash=silent

initrd /boot/initrd-2.6.21-splash.img

 

7.         修改splash.sh

THEME修改为实际的主题名。

THEME="No bootsplash theme selected"

à

THEME="Fedora"

 

8.         修改/etc/rc.d/rc

l         先做个备份:

cd /etc/rc.d/

cp rc rc.bak

 

(蓝色部分为新增脚本)

l         声明splash.sh中需要变量。

# check a file to be a correct runlevel script

check_runlevel ()

{

    # Check if the file exists at all.

    [ -x "$1" ] || return 1

    is_ignored_file "$1" && return 1

    return 0

}

 

export progress=0

export sscripts=0

export kscripts=0

 

for item in /etc/rc.d/rc3.d/S*;do

    sscripts=$(($sscripts + 1))

done

 

for item in /etc/rc.d/rc3.d/K*;do

    kscripts=$(($sscripts + 1))

done

l         设置关机进度条。

# First, run the KILL scripts.

for i in /etc/rc$runlevel.d/K* ; do

    check_runlevel "$i" || continue

 

    # Check if the subsystem is already up.

    subsys=${i#/etc/rc$runlevel.d/K??}

    [ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] /

        || continue

 

    # Bring the subsystem down.

    if LC_ALL=C egrep -q "^..*init.d/functions" $i ; then

        $i stop

    else

        action $"Stopping $subsys: " $i stop

    fi

 

    progress=$(($progress+ 1))

    /etc/rc.d/splash.sh 2>/dev/nul

done

l         设置开机进度条。

# Now run the START scripts.

for i in /etc/rc$runlevel.d/S* ; do

    check_runlevel "$i" || continue

 

    # Check if the subsystem is already up.

    subsys=${i#/etc/rc$runlevel.d/S??}

    [ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] /

        && continue

           

    # If we're in confirmation mode, get user confirmation

    if [ -f /var/run/confirm ]; then

        confirm $subsys

        test $? = 1 && continue

    fi

   

    update_boot_stage "$subsys"

    # Bring the subsystem up.

    if [ "$subsys" = "halt" -o "$subsys" = "reboot" ]; then

        export LC_ALL=C

        exec $i start

    fi

    if LC_ALL=C egrep -q "^..*init.d/functions" $i /

            || [ "$subsys" = "single" -o "$subsys" = "local" ]; then

        $i start

    else

        action $"Starting $subsys: " $i start

    fi

   

    progress=$(($progress+ 1))

    /etc/rc.d/splash.sh 2>/dev/nul

done

 

重新起动就OK了。

 

(测试环境:Fedora Core release 6 (Zod))

 

参考资源:

http://www.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

http://www.bootsplash.org/

http://soft.yesky.com/os/lin/111/2011111.shtml

 

~~end~~

 

 
原文地址:https://www.cnblogs.com/zhangyunlin/p/6167722.html