Linux内核移植--开机logo

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.clogo_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.ppm
2.2 替换旧.ppm文件 

    将新生成的logo_linux_clut224.ppm替换掉drivers/video/logo/ logo_linux_clut224.ppm,并删除logo_linux_clut224.clogo_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系统启动画面

你可能感兴趣的:(Linux内核移植--开机logo)