kernel开机logo总结

来源:互联网 发布:如何做美工设计 编辑:程序博客网 时间:2024/05/20 23:04

希望朋友们多多指点,好的技术或心得一起分享:

看了不少显示kernel开机logo的帖子,在经过数次实验后,针对224位色格式的logo图片进行以下总结:

一.更换开机logo

    嵌入式linux下kernel的开机logo默认图片名为logo_linux_clut224.ppm,因此若有一张png格式的图片,将其换成ppm格式图片即可,转换方法可以用linux下的GIMP绘图软件(将分辨率改成与硬件平台分辨率一致,并转换成224位色格式),另一种方法可以用命令行进行(需要png转换为ppm的工具,自行下载):

    pngtopnm mylogo.png > mylogo.pnm
    pnmquant 224 mylogo.pnm > mylogo224.pnm

    pnmtoplainpnm mylogo224.pnm > logo_linux_clut224.ppm

    其中mylogo.pnm和mylogo224.pnm为中间生成文件,结束后可以删除。最后将logo_linux_clut224.ppm拷贝值kernel主目录下的driver/video/logo/中,最后编译内核即可。


二.添加开机logo

    自定义logo的制作与配置,(这里仍旧是224位色格式图片,其中custom名称可以自己改变):
1.在kernel目录下:
拷贝.ppm图片至logo目录中:
cp logo_linux_custom_224.ppm driver/video/logo/logo_custom_clut224.ppm

2.修改Kconfig文件:
vi driver/video/logo/Kconfig:
config LOGO_CUSTOM_CLUT224
    bool “224-color CUSTOM Linux logo”
    default y

3.修改Makefile文件:
vi driver/video/logo/Makefile:
添加:obj-$(CONFIG_LOGO_CUSTOM_CLUT224) += logo_custom_clut224.o

4.修改logo.h文件:
vi include/linux/linux_logo.h:
添加:extern const struct linux_logo logo_custom_clut224;

5.修改logo.c文件
vi driver/video/logo/logo.c:
fb_find_logo函数中:

#ifdef CONFIG_LOGO_LINUX_CLUT224
    /* Generic Linux logo */
    logo = &logo_linux_clut224;
#endif
后添加:
#ifdef CONFIG_LOGO_CUSTOM_CLUT224
    /* Custom Linux logo */
    logo = &logo_custom_clut224;
#endif

6.make menuconfig 确保自定义logo被选中:
Device Drivers  —>
    Graphics support  —>
       [*] Bootup logo  —>
            ……..
           [*] 224-color CUSTOM Linux logo

    最后编译内核即可,这样可以使多张logo共存于kernel中,若用户有以后要在文件系统中更改开机logo的需求的话,可以使用这种方法,用户层可以通过fw_setenv工具修改uboot中自定义好的参数,该参数从uboot中传递进kernel,重启后kernel根据参数的值进行判断使用哪一张logo。这样还得在uboot和kernel中添加自定义参数,并进行判断,这个且看下回分解。


    另附logo居中显示方法(注:若图片分辨率和屏幕分辨率相同则不需要):
1.vi driver/video/fbmem.c:
fb_show_logo_line函数中:

    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);

(2)vi driver/video/console/fbcon.c:
fbcon_prepare_logo()函数中:

    logo_height = fb_prepare_logo(info, ops->rotate)
后增加
     logo_height += (info->var.yres / 2) - (logo_height / 2);


    若有些朋友开机无法显示logo,可以参考以下方法试试:

在drivers/video/console/fbcon.c中:

    fbcon_prepare_logo函数中:

       将

       logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);

        修改为:

         logo_lines = DIV_ROUND_UP(logo_height, (vc->vc_font.height+1));

*****************************************************************************************

若要对kernel启动logo有更深入的理解可以参见老罗的博客:http://blog.csdn.net/luoshengyang/article/details/7691321/

大神的讲解十分详尽!