一.去除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

更多相关文章

  1. 用Android(安卓)Studio进行NDK编程入门实例
  2. 【Android】- 搭建服务器进行前后端的交互
  3. Android(安卓)腾讯面试Glide源码解析 3分钟手写最牛框架 看完成
  4. android图像绘制(六)——获取本地图片或拍照图片
  5. android 辅助工具类—— 图片缓冲池
  6. 一键升级 ME860 CWM recovery
  7. (转)Android生成heap dump文件(.hprof)
  8. sdcard相关的adb命令
  9. android 拍照或者图库选择 压缩后 图片 上传

随机推荐

  1. 【Android笔记】Android 使用高德SDK获取
  2. Android 有效的解决内存泄漏的问题实例详
  3. Android 自定义控件实现刮刮卡效果 真的
  4. ANDROID 完美退出 APP 方法
  5. android 反编
  6. 从源码的角度分析Handler
  7. 安卓发展历史
  8. Git点赞82K!字节跳动保姆级Android学习指
  9. 关于Android今后的发展的个人见解
  10. Flutter——在Android平台上的启动流程浅