许久不见啊,今天我们继续来修改我们的系统。
通过前面的几篇文章我们已经能轻松驾驭我们的开发板了,但是现在都是追求个性化的时代,我们在开发板上打上了自己的Logo,那我们是否可以改变开机启动的Logo呢,那就开始吧
本篇参考了
【正点原子】I.MX6U 修改开机进度条及内核logo参考手册V1.0
1. 显示Linux内核Logo
我们知道Linux内核是默认带启动Logo的,对就是那个小企鹅,关注过我在哇酷网站同步更新的帖子( https://whycan.com/t_7275.html) 的同学应该知道,
这个Logo文件在哪呢?就在下面的路径中(因为我已经使用了新的Logo所以,请忽略复件二字),而且大家发现没有,这个logo的扩展名是*.ppm
那么这应该如何显示呢,我们需要在
make menuconfig
中进行配置
然后重新编译内核,不出意外就可以看到对应的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);
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卡,如果不清楚怎么操作,可以去看第二篇。
好了,又水完了一篇