在安卓系统启动中,会有两个阶段的logo显示,一个是kernel阶段,一个是android阶段
Linux显示开机logo的函数调用:
参考网址
http://www.manongjc.com/detail/15-eihuimkprqaprud.html
https://www.cnblogs.com/skyred99/p/5683817.html
自己的修改patch
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 42c72d051158..3aafbeee7a65 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
/*图片居中的修改patch*/
@@ -599,6 +599,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
if (fb_get_color_depth(&info->var, &info->fix) == 1)
erase &= ~0x400;
logo_height = fb_prepare_logo(info, ops->rotate);
+ logo_height += (info->var.yres / 2) - (logo_height / 2);
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
q = (unsigned short *) (vc->vc_origin +
vc->vc_size_row * rows);
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 7ecb121c482e..1f8996935b79 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -516,12 +516,13 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
image.dx = (xres - n * (logo->width + 8) - 8) / 2;
image.dy = y ?: (yres - logo->height) / 2;
} else {
- image.dx = 0;
- image.dy = y;
+ //image.dx = 0;
+ //image.dy = y;
}
-
image.width = logo->width;
image.height = logo->height;
/*info->var.xres,info->var.yres对应屏幕分辨率,
image.width ,image.height对应图片logo的分辨率。
*/
+ image.dx = (info->var.xres / 2) - (image.width / 2);
+ image.dy = (info->var.yres / 2) - (image.height / 2);
if (rotate) {
logo_rotate = kmalloc_array(logo->width, logo->height,
@@ -689,12 +690,12 @@ int fb_show_logo(struct fb_info *info, int rotate)
/*在linux图标显示会根据cpu的核数进行企鹅数量打印,我们只需要把对应的核数修改为1就ok*/
{
unsigned int count;
int y;
if (!fb_logo_count)
return 0;
count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count;
- y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count);
+ y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, 1);
在启动界面还有一个白色的指针,我们也可以把他去掉,不然更换启动全屏log的时候会出现一个小黑框的情况:
/*去掉指针显示,更换全屏后显示黑标的bug*/
diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile
index 26cbc965497c..26e6b7412e94 100644
--- a/drivers/video/fbdev/core/Makefile
+++ b/drivers/video/fbdev/core/Makefile
@@ -7,7 +7,7 @@ fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \
fb-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE),y)
-fb-y += fbcon.o bitblit.o softcursor.o
+fb-y += fbcon.o bitblit.o
ifeq ($(CONFIG_FB_TILEBLITTING),y)
fb-y += tileblit.o
endif
diff --git a/drivers/video/fbdev/core/bitblit.c b/drivers/video/fbdev/core/bitblit.c
index 9725ecd1255b..06266ed9e019 100644
--- a/drivers/video/fbdev/core/bitblit.c
+++ b/drivers/video/fbdev/core/bitblit.c
@@ -373,8 +373,8 @@ static void bit_cursor(struct vc_data *vc, struct fb_info *info, int mode,
if (info->fbops->fb_cursor)
err = info->fbops->fb_cursor(info, &cursor);
- if (err)
- soft_cursor(info, &cursor);
+ //if (err)
+ //soft_cursor(info, &cursor);
/*不注释会报错*/
这个时候开机我么就会发现企鹅变成一个并在屏幕中间了
/*替换 原来的图片:
linux默认的图片是logo_linux_clut224.ppm这个
*/
drivers/video/logo/logo_linux_clut224.ppm
/*如何将png图片转换为ppm*/
pngtopnm mylogo.png > mglogo.pnm
pnmquant 224 mglogo.pnm > mglogo224.pnm
pnmtoplainpnm mglogo224.pnm > mglogo224.ppm
/*
重命名 mglogo224.ppm 为logo_linux_clut224.ppm放在对应的目录下。
译后生成的logo_linux_clut224.c和logo_linux_clut224.o文件(避免替换失败)
*/
在一次编译烧录,就已经替换成功了。