从内核被解压到文件系统被挂载,我们看到的经典画面是一个小企鹅。如果嫌小企鹅枯燥,我们可以把它换掉。
1. 准备图片
这里需要的是 ppm 图片,所以,我们需要把常见格式给转换为 .ppm 才能使用。cmdline 和 图形界面下有不同方法。
a. cmdline 下, 假定我们要转换的文件名为linux_logo.png,首先将png 图片转成pnm
# pngtopnm linux_logo.png > linux_logo.pnm
然后将pnm 图片的颜色数限制在224
# pnmquant 224 linux_logo.pnm > linux_logo_clut224.pnm
最后将pnm 图片转换成我们需要的ppm
# pnmtoplainpnm linux_logo_clut224.pnm > logo_linux_clut224.ppm
b. 图形界面下,我们可以使用 GIMP(应该是发行版的标配吧?)。首先,打开图片。然后,image->mode->indexed,弹出 Generate optimum palette 对话框,修改 maxmium number of colors 为 224,点击 convert。最后,save as 图片为名称 logo_linux_clut224.ppm 并确定,弹出来的对话框会选 ascii 。
把准备好的图片拷贝的:drivers/video/logo/ 目录下即可。
另,或许需要手动将 logo_linux_clut224.c 和 logo_linux_clut224.o 删除。否则 Makefile 不会关注 logo_linux_clut224.ppm 的变化。
2. 修改 Linux 编译配置
支持 224 色的 logo:
Device Drivers ---> Graphics support --->
[*]Boot logo --->
[*] Standard 224-color Linux logo
支持 kernel console,不选看不到 logo:
Device Drivers ---> Graphics support --->
Console display driver support --->
<*> Framebuffer Console support
3. logo 居中
不做这一步修改的话,重新编译后,图片是换掉了,但是,只有在屏幕的左上角。需要居中的话,还要对 drivers/video/fbmem.c 进行如下修改:
//image.dx=0; //image.dy=y; image.width = logo->width; image.heigh = logo->height; image.dx = (info->var.xres / 2) - (image.width / 2); image.dy = (info->var.yres / 2) - (image.height / 2);
主要是对图片进行了重新定位。然后,还要 kernel console 中更新图片结束的位置。需要修改 drivers/video/console/fbcon.c 文件(后一行是新加的):
logo_height = fb_prepare_logo(info, ops->rotate); logo_height += (info->var.yres / 2) - (logo_height / 2);
另外,在某 4 核处理器时,发现 logo 出现了 4 次(4 只小企鹅),需要做如下修改即可改为 1 个(继续 fbmem.c)。
int fb_show_logo(struct fb_info *info, int rotate) { int y; //y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, // num_online_cpus()); y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, 1); y = fb_show_extra_logos(info, y, rotate); return y; }
做完这些,重新编译内核,安装。。。。。。开机就可以看到效果了。