小白自制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卡,如果不清楚怎么操作,可以去看第二篇。


 

 好了,又水完了一篇

 

posted @ 2021-10-29 13:35  淡墨青云  阅读(3884)  评论(1编辑  收藏  举报