Linux 启动logo修改指南详解
2017即将过去,2018即将到来,有人说想去观看跨年演唱会,有人说选择和亲朋好友团聚,但是工程师们早早就开始了电子产品的跨年筹备。对齐时间,更换界面,发布升级等等工作都是为了用户在新的一年有新的体验,那么从logo开始,看看工程师们怎么跨年。
ARM-Linux默认开机启动时会先在液晶屏左上角显示一个小企鹅图案, 分辨率为80*80,也就是我们常说的bootlogo。该图案源自Linux-2.6.35.3/drivers/video/logo下的logo_linux_clut224.ppm这幅图像,程序会根据这幅图像生成logo_linux_clut224.c 和logo_linux_clut224.o两个文件,最终将小企鹅显示在液晶屏上。
图1 内核原版开机logo
不难发现logo显示是在加载显示驱动fb后由
Linux-2.6.35.3/drivers/video/console/fbcon.c中的函数来控制完成的,通过底层帧缓冲区控制台程序可对方位,光标等进行一系列修改。
以上分析是针对系统原版内核25680x80的启动图标的说明。那么如何自定义的修改启动图标呢,下面将基于EasyARM-i.MX283A开发套件介绍如何修改Linux内核启动logo。
1.1 一、实现原理
Linux内核默认的启动logo为logo_linux_clut224.ppm文件,在启动时会加载预置的logo_linux_clut224.ppm文件。logo_linux_clut224.ppm文件是linux默认的启动logo 格式,位于内核源码Linux-2.6.35.3/drivers/video/logo目录下。通过netpbm工具包来即可将任意png文件转换为ppm文件,只要将预置logo_linux_clut224.ppm文件替换成自己的对应文件,重新make uImge生成新的内核镜像,就能实现Linux开机logo个性化。
1.2 二、开发环境
开发主机环境:
Ubuntu 12.04(64 位)、arm-fsl-linux-gnueabi-gcc系列交叉工具链;
硬件清单:
EasyARM-i.MX283A开发套件;
软件清单:
linux源码包:linux-2.6.35.3.tar.bz2;
1.3 三、实现步骤
1.3.1 3.1 制作图片
netpbm工具包用来将png文件转换为内核可以读取的ppm文件,若用户的Linux开发
主机未安装netpbm工具包,则可以在系统联网的条件下通过“apt-get install”命令进行
安装,命令如下:
vmuser@Linux-host:~$ sudo apt-get install netpbm netpbm工具包安装完成后,就可以通过该工具对用户期望用作启动logo的图片进行转
换。下面以logo.png为例,简单介绍如何将png格式图片转换为ppm格式文件。
1.将需要转换的png文件logo.png拷贝至linux主机的主目录下;linux怎么读取windows文件
2.输入如下命令生成需要的ppm文件(logo.png为替换图片):
vmuser@Linux-host:~$ pngtopnm logo.png | ppmquant -fs 224 | pnmtoplainpnm >
logo_linux_clut224.ppm
生成的 logo_linux_clut224.ppm 位于当前目录下。
1.3.2 3.2 替换图片
将转换好的logo_linux_clut224.ppm文件拷贝至
linux-2.6.35.3/drivers/video/logo子目录,替换原 logo_linux_clut224.ppm文件,重
新编译内核便能达到替换logo 的目的。
1.3.3 3.3 编译测试内核
进入内核源码的根目录后,输入命令:
vmuser@Linux-host:~/SRC/linux-2.6.35.3$ ./config-kernel 该命令将打印如图所示的菜单
在这里输入数字4选择“config as EasyARM-i.MX283A or EasyARM-i.MX287A”,然后
按回车键确认,执行操作。
完成内核配置后,在“linux-2.6.35.3”目录下执行“make uImage”命令即可进行内
核编译。内核编译完成后将在 arch/arm/boot/目录下生成uImage内核镜像文件。
vmuser@Linux-host:~/SRC/linux-2.6.35.3$ make uImage 1.3.4 3.4固件烧写
将生成的uImage内核镜像文件烧写至开发板,在Windows系统制作固件烧写用的TF启动
卡,然后使用TF启动卡烧写固件。烧写过程分两步:制作TF启动卡和进行固件烧写操作。
准备一张TF卡(经验证,Class2和Class10不能使用,推荐使用Class4)和一个读卡
器。请确保该TF卡只有一个分区,并且是FAT32格式。双击烧写工具sd_os脚本文件,弹
出以下界面。
这是提示用户输入刚插入的读卡器的盘符(假设为G盘),然后键入“Enter”,执行启动卡的制作。制作过程如下图所示,这里需要花几分钟的时间。
直到显示烧写完毕,按键退出。至此,可用于烧写固件的TF启动卡已经制作好。
把开发套件设置为SD启动方式(使用短路器短接JP3和JP4跳线,保持JP1、JP2、JP5和JP6跳线的断
开),重新上电或复位,开发套件会自动进入固件烧写模式,串口终端也将打印烧写信息,整个过程需要几分钟时间。
当开发套件蜂鸣器发出“哔哔哔哔...”的声音时,表示烧写完成,串口信息也将打印Successful。
重新把开发套件设置为NAND Flash启动方式(拔出JP3的短路器,仅短接JP4,其他全部断开),按“RST”键复位系统,就将看到更换logo后的成果。
1.4 四、效果展示
图2 替换后的开机logo
1.5 五、常见问题处理
① png格式图片经过netpbm工具转换成ppm格式时报错或失帧;
A:一、图片分辨率不能超过LCD分辨率,允许小但绝不允许大;
二、调板是从0x20开始编的,所以实际只有最多224的显示,同样颜要是0x20
开始,0-0x1f的32种颜是不确定的。
②logo显示不居中;
A: 1、vi drivers/video/fbmem.c
到"fb_show_logo_line"函数,把
image.dx = 0;
image.dy = y;
改为:
image.dx = (info-&s/2) - (X/2);
image.dy = (info-&s/2) - (Y/2);
[注]:info-&s和info-&s是分辨率大小;X和Y是logo图片的大小
2、vi drivers/video/console/fbcon.c
到"fbcon_prepare_logo"函数,在
logo_height = fb_prepare_logo(info, ops->rotate);
后面加上
logo_height += (info-&s/2) - (Y/2);
③TF卡制作成功,从SD模式启动烧写无反应;
A:推荐使用Class4低速TF卡,高速TF卡存在驱动能力不足无法识别情况,并确保该TF
卡只有一个分区,并且是FAT32格式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论