zoukankan      html  css  js  c++  java
  • 用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~~

     

     
  • 相关阅读:
    dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
    悲观锁和乐观锁的区别,它们是怎么实现
    cookie和session的区别,分布式环境怎么保存用户状态
    深入理解Java接口和抽象类
    Java中堆内存和栈内存详解
    Java基础梳理(一)
    Spring的@Transactional注解详细用法
    SpringBoot学习笔记(一)基础
    项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
    有依赖的背包问题-购物单
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167722.html
Copyright © 2011-2022 走看看