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

通过前面的几篇文章我们已经能轻松驾驭我们的开发板了,但是现在都是追求个性化的时代,我们在开发板上打上了自己的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卡,如果不清楚怎么操作,可以去看第二篇。


好了,又水完了一篇

小白自制Linux开发板 九. 修改开机Logo的更多相关文章

  1. 小白自制Linux开发板 二. u-boot移植

    上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB  中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...

  2. 小白自制Linux开发板 三. Linux内核与文件系统移植

    上一篇完成了uboot的移植,但是想要愉快的在开发板上玩耍还需要移植Linux内核和文件系统. 1.Linux内核 事实上对于F1C100S/F1C200S,Linux官方源码已经对licheepi ...

  3. 小白自制Linux开发板 六. SPI TFT屏幕修改与移植

    本文章参考:https://www.bilibili.com/read/cv9947785?spm_id_from=333.999.0.0 本篇通过SPI接口,使用ST7789V TFT焊接屏(13p ...

  4. 小白自制Linux开发板 八. Linux音频驱动配置

    不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...

  5. 小白自制Linux开发板 四. 通过SPI使用ESP8266做无线网卡

    本文章基于 WhyCan Forum(哇酷开发者社区) https://whycan.com/t_4149.htmlhttps://whycan.com/t_5870.html整理而成. 为了尊重原作 ...

  6. 小白自制Linux开发板 一. 瞎抄原理图与乱画PCB

    因为墨云是基于高中物理水平的电路知识来学习.而且此前也就玩过树莓派.Esp8266之类的开发板,水平基础趋近于零,所以在写这个系列的时候抱着记录的心态.还望不足之处还望大佬们指正. <论语> ...

  7. 小白自制Linux开发板 七. USB驱动配置

    本文章基于https://whycan.com/t_3087.htmlhttps://whycan.com/t_6021.html整理 F1c100s芯片支持USB的OTG模式,也就是可以通过更改Us ...

  8. 小白自制Linux开发板 十. NES游戏玩起来

    本篇基于我们制作的Debian文件系统而展开,而且我们这会玩一些高级的操作方式--用我们的小电脑进行程序编译.   所以本篇操作全部都在我们个的开发板上完成.   1. 开发环境搭建 首先安装gcc, ...

  9. 小白自制Linux开发板(第二季 V3s篇) 一. 换个核心再来一次

    1.前言 大家心心念念(个人认为)的小白自制开发板全新系列正式来了,之前我们使用全志的F1C200s芯片制作了一个小电脑,众所周知,调试很艰难,坑也很多,以至于墨云到现在还是没找到对应的补救方案,为了 ...

随机推荐

  1. <input type="file">如何实现自定义样式

    利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...

  2. Jupyter Notebook 修改字体和大小

    1 打开这个目录 D:\SoftWare\Anaconda\Lib\site-packages\notebook\static\custom 点开这个 也就是你安装的 python下面的 jupyte ...

  3. 基于Tensorflow + Opencv 实现CNN自定义图像分类

    摘要:本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验. 本文分享自华为云社区< ...

  4. PHP的LZF压缩扩展工具

    这次为大家带来的是另外一个 PHP 的压缩扩展,当然也是非常冷门的一种压缩格式,所以使用的人会比较少,而且在 PHP 中提供的相关的函数也只是对字符串的编码与解码,并没有针对文件的操作.因此,就像 B ...

  5. php 扫描url死链接

    * 从Packagist上搜索需要的包 https://packagist.org/ * 通过composer下载依赖包 composer require guzzlehttp/guzzle comp ...

  6. 【转载】在Windows终端中显示UTF-8字符

    一直苦恼于如何在Windows终端中显示UTF-8字符的问题.比如,在MySQL命令行下,如果数据库的编码是UTF-8,那么,在查询数据库的时候,里面的中文都会变成乱码.今天半无意的搜索了一下,结果发 ...

  7. P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4091 题目大意 给出\(n\),求 \[\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatr ...

  8. P5540-[BalkanOI2011]timeismoney|最小乘积生成树【最小生成树,凸壳】

    正题 题目链接:https://www.luogu.com.cn/problem/P5540 题目大意 给出\(n\)个点\(m\)条边边权是一个二元组\((a_i,b_i)\),求出一棵生成树最小化 ...

  9. 常见JS

    1.获取当前月份第一天 var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; v ...

  10. mysql int(3)与int(10)的数值范围相同吗?

    提问: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同.如果不同,分别是多大? 回答: 不同,int(3)最多显示3位无符号整体,in ...