`
quanminchaoren
  • 浏览: 913937 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 嵌入式 linux 去掉启动时闪烁的光标 和制作启动LOGO

阅读更多

一.去除embedded linux 的开机光标:


 在内核的当前目录进入到drivers/video/console/fbcon.c 文件
 将static void fb_flashcursor(void *private)   和 static void fbcon_cursor(struct vc_data *vc, int mode) 里的内容注释掉,使之变成空函数


二 、 Android 开机会出现3个画面:
1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片);
2. Android平台启动初始化,出现"A N D R I O D"文字字样画面;
3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。

4、splash(LK里跑的logo)


1、开机图片(Linux小企鹅) (Android 1.5及以上版本已经取消加载图片);
Linux Kernel引导启动后,加载该图片。
logo.c中定义nologo,在fb_find_logo(int depth)函数中根据nologo的值判断是否需要加载相应图片。
代码如下:
static int nologo;
module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
/* logo's are marked __initdata. Use __init_refok to tell
* modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __init_refok fb_find_logo(int depth)
{
const struct linux_logo *logo = NULL;
if (nologo)
return NULL;
        ......
}
相关代码:
/kernel/drivers/video/fbmem.c
/kernel/drivers/video/logo/logo.c
/kernel/drivers/video/logo/Kconfig
/kernel/include/linux/linux_logo.h

     (1)让内核支持启动LOGO

        在内核目录中 make menuconfig

        Device Drivers ---->   Graphics support ---->

        选中 Bootup logo ----> Standard 224-color Linux logo

     (2) 制作一张启动LOGO的PNG格式的图片logo_linux_clut224.png

     (3)sudo apt-get install netpbm


          #pngtopnm logo_linux_clut224.png>logo_linux.pnm

          #pnmquant 224 logo_linux.pnm > logo_linux_224.pnm

          #pnmtoplainpnm logo_linux_224.pnm>logo_linux_clut224.ppm

      (4)将LOGO文件放入内核中

           拷贝到制作好的LOGO文件到  /drivers/video/logo 文件夹

           替换  logo_linux_clut224.ppm 文件

      (5)重新编译内核

 

2、开机文字("A N D R I O D")
     Android 系统启动后,init.c中main()调用load_565rle_image()函数读取/initlogo.rle(一张565 rle压缩的位图),如果读取成 功,     则 在/dev/graphics/fb0显示Logo图片;如果读取失败,则将/dev/tty0设为TEXT模式, 并打开/dev/tty0,输出文本“A N D R I O D”字样。
定义加载图片文件名称
#define INIT_IMAGE_FILE "/initlogo.rle"
int load_565rle_image( char *file_name );
#endif
init.c中main()加载/initlogo.rle文件。


if( load_565rle_image(INIT_IMAGE_FILE) ) {//加载initlogo.rle文件
    fd = open("/dev/tty0", O_WRONLY);//将/dev/tty0设为text模式
    if (fd >= 0) {
        const char *msg;
            msg = "/n"
        "/n"
        "/n"
        "/n"
        "/n"
        "/n"
        "/n"  // console is 40 cols x 30 lines
        "/n"
        "/n"
        "/n"
        "/n"
        "/n"
        "/n"
        "/n"
        "             A N D R O I D ";
        write(fd, msg, strlen(msg));
        close(fd);
    }
}
相关代码: 
/system/core/init/init.c 
    
/system/core/init/init.h 
/system/core/init/init.rc 
/system/core/init/logo.c 
*.rle文件的制作步骤: 
a. 使用GIMP或者Advanced Batch Converter软件,将图象转换为RAW格式; 
b. 使用android自带的rgb2565工具,将RAW格式文件转换为RLE格式(如:rgb2565 -rle < initlogo.raw > initlogo.rle)。


3、开机动画(闪动的ANDROID字样的动画图片)
Android 1.5版本:Android的系统登录动画类似于Windows系统的滚动条,是由前景和背景两张PNG图片组成,这两张图片存在于手机或模拟器 /system/framework/framework-res.apk文件当中,对应原文件位于/frameworks/base/core/res /assets/images/。前景图片(android-logo-mask.png)上的Android文字部分镂空,背景图片(android- logo-shine.png)则是简单的纹理。系统登录时,前景图片在最上层显示,程序代码(BootAnimation.android())控制背 景图片连续滚动,透过前景图片文字镂空部分滚动显示背景纹理,从而实现动画效果。
相关代码:
/frameworks/base/libs/surfaceflinger/BootAnimation.h
/frameworks/base/libs/surfaceflinger/BootAnimation.cpp
/frameworks/base/core/res/assets/images/android-logo-mask.png  Android默认的前景图片,文字部分镂空,大小256×64
/frameworks/base/core/res/assets/images/android-logo-shine.png Android默认的背景图片,有动感效果,大小512×64

Android 1.6及以上版本:
init.c解析init.rc(其中定义服 务:“service bootanim /system/bin/bootanimation”),bootanim服务由SurfaceFlinger.readyToRun() (property_set("ctl.start", "bootanim");)执行开机动画、bootFinished()(property_set("ctl.stop", "bootanim");)执行停止开机动画。
BootAnimation.h和BootAnimation.cpp文件放到了 /frameworks/base/cmds/bootanimation目录下了,增加了一个入口文件bootanimation_main.cpp。 Android.mk文件中可以看到,将开机动画从原来的SurfaceFlinger里提取出来了,生成可执行文件:bootanimation。 Android.mk代码如下:
//=============Android.mk======================
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
    bootanimation_main.cpp /
    BootAnimation.cpp
# need "-lrt" on Linux simulator to pick up clock_gettime
ifeq ($(TARGET_SIMULATOR),true)
    ifeq ($(HOST_OS),linux)
        LOCAL_LDLIBS += -lrt
    endif
endif
LOCAL_SHARED_LIBRARIES := /
    libcutils /
    libutils /
    libui /
    libcorecg /
    libsgl /
    libEGL /
    libGLESv1_CM /
    libmedia   
LOCAL_C_INCLUDES := /
    $(call include-path-for, corecg graphics)
LOCAL_MODULE:= bootanimation
include $(BUILD_EXECUTABLE)
//==========================================
(1)adb shell后,可以直接运行“bootanimation”来重新看开机动画,它会一直处于动画状态,而不会停止。
(2)adb shell后,命令“setprop ctl.start bootanim”执行开机动画;命令“getprop ctl.start bootanim”停止开机动画。这两句命令分别对应SurfaceFlinger.cpp的两句语 句:property_set("ctl.start", "bootanim");和property_set("ctl.stop", "bootanim");
相关文件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/BootAnimation.cpp
/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
/system/core/init/init.c
/system/core/rootdir/init.rc

 

 

4、splash(LK里跑的logo)

准备splash.png图,最终生成splash.raw565

1、convert splash.png -depth 8 rgb:splash.raw

2、rgb2565 < splash.raw > splash.raw565

 

相关code如下:

aboot.c

lcdc.c

分享到:
评论

相关推荐

    嵌入式Linux系统的启动(很好的嵌入式linux启动过程分析)

    嵌入式Linux系统的启动(很好的嵌入式linux启动过程分析)

    详解嵌入式linux启动信息.pdf

    我们在这里讨论的是对嵌入式 linux 系统的启动过程的输出信息的注释,通过我们的讨论,大家会对嵌入式 linux 启动过程中出现的、以前感觉熟悉的、但却又似是而非的东西有一个确切的了解,并且能了解到这些输出信息的...

    加快嵌入式Linux系统启动速度的方法及应用.pdf

    在实际测试中,发现系统启动时在BIOS、Linux内核和init启动服务进程三个过程是最耗时的(占90%)。因此,缩短这三个过程的时间是加快嵌入式Linux系统启动速度的关键。 为了加快嵌入式Linux系统启动速度,可以从...

    详解嵌入式linux启动信息

    详解嵌入式linux启动信息 详解嵌入式linux启动信息 详解嵌入式linux启动信息

    嵌入式Linux快速启动与XIP应用.pdf

    该论文对嵌入式Linux系统的快速启动技术进行了深入的研究,提出了一个适用于消费类电子领域的文件系统结构和XIP技术结合的启动方案。该技术可以大幅度地缩短系统的启动时间,提高系统的性能和可靠性。 知识点: 1....

    Android嵌入式Linux终极实战

    Android嵌入式Linux终极实战:手把手做一款android智能机!

    嵌入式Linux 系统启动盘制作

    嵌入式Linux 系统启动盘制作,包含详细的步骤以及代码

    嵌入式Linux启动注释

    我们在这里讨论的是对嵌入式linux系统的启动过程的输出信息的注释,通过我们的讨论,大家会对嵌入式linux启动过程中出现的、以前感觉熟悉的、但却又似是而非的东西有一个确切的了解,并且能了解到这些输出信息的...

    经典—详解嵌入式linux启动信息_经典

    经典—详解嵌入式linux启动信息_经典

    嵌入式LINUX基础教程中文第2版 --百度网盘

    作者多年积累总结的嵌入式Linux开发技巧和提示,无论对初学者还是有经验的开发人员,都弥足珍贵。这一版不仅对原有章节进行了全面的修订、更新和改进,还新增了udev、USB和开源构建系统等内容。

    嵌入式linux内核制作

    嵌入式linux内核制作

    嵌入式Linux应用开发完全手册.pdf

    硬件部件的使用及编程(囊括了常见硬件,比如UART、I*IC、LCD等),UBoot、Linux内核的分析、配置和移植,根文件系统的构造(包括移植busybox、glibc、制作映象文件等),内核调试技术(比如添加kgdb补丁、栈回溯等),...

    嵌入式Linux开发教程(上册) +嵌入式Linux开发教程(下册)(周立功)

    嵌入式Linux开发教程(上册) +嵌入式Linux开发教程(下册)(周立功)PDF高清版 主要讲述嵌入式 Linux 产品开发过程中的内核/驱动开发部分相关内容,包括 Linux 内核裁剪定制、驱动编写和驱动移植等

    嵌入式linux&amp;Android;课程大纲

    通过本课程的系统学习,可以使学员由浅入深地对嵌入式Linux和Android系统进行全面学习,能够独立胜任嵌入式linux和Android两个方向的开发工作。嵌入式linux方向包括C语言开发、嵌入式Linux应用开发、系统开发、驱动...

    嵌入式Linux系统的引导过程及启动代码分析.pdf

    嵌入式 Linux 系统的引导过程及启动代码分析 嵌入式 Linux 系统的...本文通过对嵌入式 Linux 系统的引导过程和启动代码的分析,旨在为编写高效的启动代码提供参考,并为嵌入式 Linux 系统的开发和应用提供技术支持。

    嵌入式Linux开发教程

    本篇主要讲述进行嵌入式 本篇主要讲述进行嵌入式 本篇主要讲述进行嵌入式 本篇主要讲述进行嵌入式 本篇主要讲述进行嵌入式 本篇主要讲述进行嵌入式 Linux 开发所必备的基础知识, 以实用和够为标准进行介绍开发所...

    嵌入式Linux操作系统

    linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os linux 嵌入式 ppt os ...

    嵌入式Linux设置静态或动态或动态IP的方法

    在嵌入式Linux下修改文件进行设置开机启动时静态IP或者动态IP

    嵌入式Linux设备驱动程序开发.pdf

    本文主要讲述了嵌入式Linux设备驱动程序的概念、通用模块和具体开发流程,进一步通过实例论述了如何设计和编写模块化的嵌入式Linux设备驱动程序,以及解释驱动程序的关键代码。 一、嵌入式Linux设备驱动程序的概念 ...

Global site tag (gtag.js) - Google Analytics