0 开发环境
Host:Ubuntu14.04
Target:Tiny4412
Kernel:linux-3.1.0
1 默认logo
默认开机logo会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅图像生成logo_linux_clut224.c和logo_linux_clut224.o两个文件,最终将小企鹅显示在LCD上[1]。
注:若要显示logo,需要通过make menuconfig选择显示logo,默认会在屏幕左上角显示一个小企鹅。
2 自定义logo
根据第1小节的说明可知,自定义logo关键是制作一个.ppm文件,并且替换logo_linux_clut224.ppm原文件,然后重新编译内核即可。
2.1 制作.ppm文件
可以使用logomaker或者linux系统下自带的JIMP编辑工具使用下述命令制作.ppm文件:
pngtopnm logo_linux_clut224.png > logo_linux_clut224.pnm
pnmquant 224 logo_linux_clut224.pnm > logo_linux_clut224.pnm
pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm2.2 替换旧.ppm文件
将新生成的logo_linux_clut224.ppm替换掉drivers/video/logo/ logo_linux_clut224.ppm,并删除logo_linux_clut224.c和logo_linux_clut224.o文件。
2.3 重新编译内核
经过上述步骤之后,重新编译内核即可启用新logo。
3 居中显示
由第1小节可知,logo默认显示位置是左上角,为了居中显示,需要修改内核源码:
static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, int rotate, unsigned int num) { unsigned int x; int xoff,yoff; /** for central logo **/ xoff = (info->var.xres - num * (fb_logo.logo->width + 8))>>1; //得到中间x坐标 yoff = (info->var.yres - num * (fb_logo.logo->height + 8))>>1; //得到中间y坐标 if (rotate == FB_ROTATE_UR) { for (x = 0; x < num && image->dx + image->width <= info->var.xres; x++) { image->dx = xoff; image->dy = yoff; info->fbops->fb_imageblit(info, image); image->dx += image->width + 8; } } else if (rotate == FB_ROTATE_UD) { for (x = 0; x < num && image->dx >= 0; x++) { info->fbops->fb_imageblit(info, image); image->dx -= image->width + 8; } } else if (rotate == FB_ROTATE_CW) { for (x = 0; x < num && image->dy + image->height <= info->var.yres; x++) { info->fbops->fb_imageblit(info, image); image->dy += image->height + 8; } } else if (rotate == FB_ROTATE_CCW) { for (x = 0; x < num && image->dy >= 0; x++) { info->fbops->fb_imageblit(info, image); image->dy -= image->height + 8; } } }
4 去除光标
默认情况下,会在LCD上显示光标,去除光标方法如下:
打开drivers/video/console/fbcon.c 文件,将static void fb_flashcursor(void *private)和 static void fbcon_cursor(struct vc_data *vc, int mode)里的内容注释掉,使之变成空函数即可。
参考资料
[1]修改Linux 开机logo 并且居中显示
[2]linux启动成功修改logo
[3]Linux内核开发-修改开机Logo
[4]linux怎么制作开机logo
[5]自己修改linux系统启动画面