zoukankan      html  css  js  c++  java
  • Linux 开机 logo 修改

    从内核被解压到文件系统被挂载,我们看到的经典画面是一个小企鹅。如果嫌小企鹅枯燥,我们可以把它换掉。

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

    做完这些,重新编译内核,安装。。。。。。开机就可以看到效果了。

  • 相关阅读:
    数据库优化方案之分库分表
    聊聊ThreadLocal源码(基于JDK1.8)
    HashMap扩容死循环问题
    Synchronized偏向锁和轻量级锁的升级
    【Java并发编程之深入理解】Synchronized的使用
    ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock
    面试必备技能:HashMap哪些技术点会被经常问到?
    序列键生成器及单例多例模式
    Effective.Java第1-11条
    抽象工厂(AbstractFactory)模式
  • 原文地址:https://www.cnblogs.com/pied/p/5142249.html
Copyright © 2011-2022 走看看