zoukankan      html  css  js  c++  java
  • 小白自制Linux开发板 九. 修改开机Logo

    许久不见啊,今天我们继续来修改我们的系统。

    通过前面的几篇文章我们已经能轻松驾驭我们的开发板了,但是现在都是追求个性化的时代,我们在开发板上打上了自己的Logo,那我们是否可以改变开机启动的Logo呢,那就开始吧

    本篇参考了

    【正点原子】I.MX6U 修改开机进度条及内核logo参考手册V1.0

    1. 显示Linux内核Logo

    我们知道Linux内核是默认带启动Logo的,对就是那个小企鹅,关注过我在哇酷网站同步更新的帖子( https://whycan.com/t_7275.html) 的同学应该知道,

    这个Logo文件在哪呢?就在下面的路径中(因为我已经使用了新的Logo所以,请忽略复件二字),而且大家发现没有,这个logo的扩展名是*.ppm

     那么这应该如何显示呢,我们需要在

    make menuconfig

    中进行配置

    
    
    Device Drivers  --->
        Graphics support  --->
           [*] Bootup logo  --->
                ........
               [*] Standard 224-color Linux logo

    然后重新编译内核,不出意外就可以看到对应的Logo文件了,如果不显示,可以通过工程清理命令 make clean  清理一下内核代码,然后重新编译。

    2.制作Logo文件

    小企鹅已经显示,但是明显还不够个性呀,怎么办?当然是自己制作啊,但是我们通过常规软件只能做出*.jpg、*.png之类的图片,但是那里面的logo是*.ppm,直接手动改扩展名肯定是不对的,那就要借助一个特殊的图片转换工具netpdm

    安装netpdm:

    sudo apt-get install netpbm

    这个工具可以把png图片转换为ppm格式,使用方式如下

    pngtopnm logo-linux.png > logo-linux.pnm                  #将png图片转成pnm
    pnmquant 224 logo-linux.pnm > logo-linux224.pnm           #将pnm图片的颜色数限制在224色
    pnmtoplainpnm logo-linux224.pnm > logo_linux_clut224.ppm  #将pnm图片转换成我们需要的ppm

    这里需要注意一下logo-linux.png 尺寸一定要小于和等于当前屏幕的尺寸,我们这里的logo大小是240*135 ,也就是那个tft屏幕的大小。否则会报错(其实等于也就是全屏显示有的时候也会报错,但是我们后续会处理)

     得到ppm图片以后,我们就可以当前logo复制到前面提到的Linux内核存放logo的文件夹下,注意如果以后需要那个小企鹅,就需要备份一下,然后粘贴我们自制的logo,替换原有的logo。

    3.修改代码

     替换logo以后,如果直接编译内核文件,大概率不会显示Logo文件,并且会在启动日志中显示如下报错信息

    fbcon_init:disable boot-logo(boot-logo bigger than screen)。

    我们制作的图片大小和屏幕是一致的呀,为啥会报错呢,先来分析报错出处,在/linux-5.7.1/drivers/video/fbdev/core/fbcon.c 文件的fbcon_prepare_logo()函数中。

    发现计算屏幕显示所需行数是计算方法为:
    logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
    通过日志输出,logo_lines 为 17 ,DIV_ROUND_UP() 为向上取整。
    而vc->vc_bottom 计算方法如下:
    vc->vc_bottom=info->var.yres(屏幕高度)/vc_font.height;

    vc->vc_bottom输出为 16 

    不明白为什么会这样计算,然后通过下面比较

    这样自然就会加载失败。过多的原理不想去深究,那我们怎么改呢,简单,我们改一下Logo_lines的计算方式:

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

    对,你没看错就是在DIV_ROUND_UP() 函数第二个参数加了个1  ,然而我在这里吧啦吧啦了半天

    4. 展示

     最后到喜闻乐见的展示环节了

     我们可以看到启动Logo是显示了,但是下面有一行是被加载日志给覆盖了,这个怎么处理呢,墨云暂时还没有办法,后续如果有进展,会在第一时间更新,这里还请大佬们指点一下。

    5. 修改u-boot中的Model字段

     我们来改一个与本节关系不大,而且不易发觉的地方,那就是u-boot中的Model 字段,毕竟我们要武装到牙齿嘛。

     

     这个其实只需要修改u-boot项目中的arch/arm/dts/suniv-f1c100s-licheepi-nano.dts 设备树文件就行,是的u-boot中也有对应的设备树文件。

     修改根节点下面的model字段,编译u-boot,重新烧写到tf卡,如果不清楚怎么操作,可以去看第二篇。


     好了,又水完了一篇



    NetAnalyzer下载地址

    NetAnalzyer交流群:39753670 (PS 只提供交流平台,群主基本不说话^_^)

    [转载请保留作者信息  作者:冯天文 ]


  • 相关阅读:
    专有宿主机如何实现“资源池”管理——集群管理能力升级
    像Google一样构建机器学习系统3
    利用阿里云容器服务打通TensorFlow持续训练链路
    阿里云积极落实等级保护制度,政务云全国首个通过等保2.0合规评测
    Facebook F8|闲鱼高级技术专家参会分享
    UI2CODE智能生成代码——组件识别篇
    基于TableStore的海量气象格点数据解决方案实战
    药品监管系统架构揭秘:海量溯源数据存储与查询
    对比MySQL,一文看透HBase的能力及使用场景
    bzoj1003 [ZJOI2006]物流运输
  • 原文地址:https://www.cnblogs.com/twzy/p/15356119.html
Copyright © 2011-2022 走看看