[迅为i.MX6ULL开发板学习]内核Logo 修改使用文档

[迅为i.MX6ULL开发板学习]内核Logo 修改使用文档

章节介绍如何修改内核启动 LOGO,提供的例子介绍迅屏幕的内核 LOGO 如何修改,以及低分辨率的 LOGO 如何调整到屏幕的正中间。本章节使用的资料已经放到了开发板网盘资料中,路径为“11_Linux系统开发进阶\73_章节_内核-Logo 修改使用文档使用资料”。

以下参数用户必须有所了解。4.3 寸屏幕,RGB 信号,分辨率为 480*272;

 

7 寸塑料壳屏幕,LVDS 信号,分辨率为 800*1280,注意 7 寸屏幕是竖屏显示,所以分辨率这里写的是 800*1280,而不是1280*800;

 

9.7 屏幕,LVDS 信号,分辨率为 1024*768;

 

7 寸金属框屏幕和 10.1 寸屏幕可以使用 4.3 寸屏幕的图片,只是在 logo 显示的时候不会全屏显示;

另外本文档中例程介绍的 LOGO 图片分辨率,和屏幕分辨率大小一致,这样可以不用移动 LOGO 位置,只需要处理图片即可。

 

在文档最后部分,会简要介绍如何调整 LOGO 的位置,小的图片如何实现居中显示。

1 内核配置

iMX6UL 的内核自带 LOGO 驱动,默认是没有配置的。进入内核源码目录,先将需要配置的缺省文件覆盖.config 文件,然后使用“export ARCH=arm”设置环境变量。

 

图 73.1.1

 

然后使用“make menuconfig”命令开启配置界面,如图 73.1.2所示。

 

图 73.1.2

选择“Device Drivers --->”,如图 73.1.3所示。

 

图 73.1.3

 

 

 

 

选择“Graphics support --->”,并进入,如图 73.1.4所示。

 

图 73.1.4

接着选上“Bootup logo --->”,并进入,如图 73.1.5所示。

 

图 73.1.5

 

 

 

 

将其它两个选项去掉,只需要保留“Standard 224-color Linux logo”即可,如图 73.1.6所示。

 

图 73.1.6

退出 menuconfig,并保存。

 

如果修改了配置文件,选择保存,“.config”文件就会被改。再次编译内核的时候, 如果需要编译新配置的驱动,则使用命令“cp -r .config arch/arm/configs/imx_v7_defconfig”覆盖默认配置,系统会根据新的 config 文件来编译整个内核,请注意覆盖之前注意保存默认的配置缺省文件。

退出 menuconfig,并保存。

这里需要重置默认配置,如下图所示,使用命令“cp -r arch/arm/configs/imx_v7_defconfig arch/arm/configs/imx_v7_defconfig_org”,可以将默认的“imx_v7_defconfig”另存为“imx_v7_defconfig_org”,防止缺省文件配置出错。

 

图 73.1.7

接着使用命令将“cp -r .config arch/arm/configs/imx_v7_defconfig”覆盖,接着使用命令“rm -rf drivers/video/logo/*.o”将“drivers/video/logo/”目录下的.o 文件全部删除。

 

图 73.1.8

然后重新编译,编译内核请参考I.MX6ULL终结者-开发板使用手册第28.2章节,完成之后。可以看到“drivers/video/logo/”目录下有.o 文件生成。

 

图 73.1.9

到这一步,我们将内核烧写到系统,拨码开关2拨到ON,其余都拨成OFF,进入USB烧写模式。烧写完成后,将拨码开关1,3, 6, 7拨到ON,其余都拨成OFF,进入EMMC启动模式。镜像烧写请参考I.MX6ULL终结者-开发板使用手册第6章I.MX6ULL镜像烧写,就会看到有内核 LOGO 生成,这个图片是默认的linux 图片,使用的是“drivers/video/logo/”目录下的“logo_linux_clut224.ppm”文件。

它的分辨率比较小,默认应该是在左上角显示,这个小图片也可以保存一下,后面调整位置LOGO 位置的时候还会用到。请注意,到这一步和烧写默认镜像显示的 logo 是一模一样的,不过经过这个测试,我们可以知道 iMX6UL 的 LOGO 是和“logo_linux_clut224”有关的文件。

接着下一节我们介绍如何使用和屏幕分辨率一致的图片生成 logo_linux_clut224.ppm 文件。

2 生成 PPM 文件

本节简单介绍如何使用 PS 软件修改分辨率和位深度,将图片保存为 BMP 格式,然后使用工具“bmptopnm”将 bmp 格式的图片转化为 PPM 格式。最后只需要将 PPM 放到

“drivers/video/logo/”目录下,重新编译内核,即可完成 LOGO 的修改。

2.1 使用 PS 软件修改图片分辨率和位深度

将分辨率修改为和屏幕分辨率一致,可以不用调整 LOGO 位置;另外由于

“bmptopnm”工具只能转化 8bit 位深度,所以必须将图片修改为 8bit 的位深度。

使用 ps 软件打开图片,接着选择“图像”→“图像大小”,取消约束比例,然后修改像素大小,选择之后点击“确定”。

 

图 73.2.1.1

到这里就将分辨率修改完成。上图所示是 4.3 寸屏幕的分辨率:480*272;

如果是 7 寸屏幕,分辨率应该选为 800*1280,注意 7 寸屏幕是竖屏显示,所以分辨率这里写的是 800*1280,而不是 1280*800;9.7 寸屏幕的分辨率为 1024*768。

然后选择“图像”→“模式”→“灰度”,如下图所示界面,选择“扔掉”。

 

图 73.2.1.2

接着“文件”→“存储为”,选择格式为 bmp 格式,点击“保存”。接着会弹出如下图所示对话框,选择位深度为 8bit,然后点击“确定”。

 

图 73.2.1.3

到这里就生成里的 bmp 格式的图片“8bit 位深度”。

在和文档一起的压缩包中,有默认的三张图片“logo_topeet_imx6_1024x768.bmp”,

“logo_topeet_imx6_7.0_800x1280.bmp”,“logo_topeet_imx6_480x272.bmp”。可以供用户做下一小节的测试。

2.2 使用工具“Bmptopnm”将图片转化为 ppm 格式

本节的截图使用的是 iMX6Q 的,方法是一模一样的,并不影响使用。

在 Ubuntu 上使用命令“apt-get install netpbm”安装 bmptopnm 工具,如图 73.2.2.1所示。

 

图 73.2.2.1

将前一小节转化出来的 bmp 格式的图片拷贝到 Ubuntu 下,接着使用命令

bmptopnm logo_topeet_imx6_1024x768.bmp | ppmquant -fs 224 |

pnmtoplainpnm >logo_topeet_imx6_1024x768.ppm”将其转化为 ppm 格式。注意命令中红色部分是图片的名称,用户的 bmp 格式图片是什么名称,就修改为什么名称,“logo_topeet_imx6_1024x768.ppm”则是转化出来的图片名称。

假如压缩包中自带的图片“logo_topeet_imx6_7.0_800x1280.bmp”,则使用命令

“bmptopnm logo_topeet_imx6_7.0_800x1280.bmp | ppmquant -fs 224 | pnmtoplainpnm >logo_linux_clut224.ppm”

如下图所示。正常转化不会报错,如果不是 8bit 位深度的图片,则会报错。然后使用 file 命令查看成文件的属性,可以发现是 ASCII text 格式。

 

图 73.2.2.2

压缩包中也有三个 ppm 格式的文件供大家使用

“logo_linux_clut224_480x272.ppm”,“logo_linux_clut224_800x1280.ppm”和

“logo_linux_clut224_1024x768.ppm”分别对应迅为的三种屏幕。因为作者使用的屏幕是9.7寸屏,所以选用logo_linux_clut224_1024x768.ppm

2.3 修改内核 Logo 文件

将生成的 ppm 文件“logo_linux_clut224_1024x768.ppm”拷贝到内核的

“drivers/video/logo/”目录下,更改名字为:“logo_linux_clut224.ppm”将其默认的“logo_linux_clut224.ppm”文件覆盖掉。用户如果使用作者提供的测试 ppm 文件,同样也是将“logo_linux_clut224.ppm”文件覆盖掉即可。

3 测试

将 iMX6UL 内核源码“drivers/video/logo/”目录下的“logo_linux_clut224.o”和“logo_linux_clut224.c”文件删除。

然后将前面生成的对应屏幕分辨率的 ppm 文件文件拷贝到“drivers/video/logo/”目录下,例如 1.0.1 寸屏幕,可以拷贝“logo_linux_clut224_1024x768.ppm”,然后将其名称修改为“logo_linux_clut224.ppm”。金属框 7 寸和 10.1 寸可以拷“logo_linux_clut224_480x272.ppm”文件。

内核在编译过程中,会将“drivers/video/logo/”目录下的 ppm 文件转换成.c 文件,然后编译成.o 文件,接着被 logo.c 文件调用,编译到 logo.o 文件,最后编译到 zImage 内核镜像中。另外请注意备份。

重新编译内核烧写到开发板,在内核启动之后,则可以看到一闪而过的 logo。注意:作者提供的图片是一张低分辨率彩色的照片,而且在处理过程中,像素遗失的非常严重,可能图片显示的时候会有瑕疵,不过这个和屏幕没关系。

如果用户想要 LOGO 效果好一点,可以选择默认就是黑白色的图片或者默认就是 8bit 位深度的图片,这样在修改”位深度”这个参数的时候,像素遗失的就很少。

假如修改 LOGO 图片之后,编译不成功,用户可以尝试使用作者提供的图片,自己转换的时候,图片可能格式不对。

4 Logo 位置的居中调整

假如用户想使用的 LOGO 图片小于屏幕分辨率,则可以先按照前面的方法将 LOGO 图片编译到内核,然后烧写到开发板中,可以看到 LOGO 图片小于在左上角出现,这种情况需要调整 LOGO 的位置。

接下来简单介绍一下如何修改 LOGO 的位置。

首先我们使用的图片是内核默认自带的 ppm 文件,“logo_linux_clut224.ppm”,也就是小企鹅图片,它的分辨率非常小,我们介绍如何修改源码将其移动到屏幕正中间。

在内核源码“drivers/video/fbdev/core/fbmem.c”中的 fb_show_logo_line 函数的

“image.height = logo->height;”行之后增加代码。

image.dx=(info->var.xres/2)-(image.width/2);

image.dy=(info->var.yres/2)-(image.height/2);

 

图 73.4.1

修改之后如图 73.4.2所示。

 

图 73.4.2

接着修改:fb_do_show_logo(info, &image, rotate, n); 将 n 改成 1,修改之后,如图 73.4.3所示。

 

图 73.4.3

修改源码“drivers/video/console/fbcon.c”中的 fbcon_prepare_logo()函数

在代码logo_height = fb_prepare_logo(info, ops->rotate);

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

之间增加:

logo_height += (info->var.yres/2) - (logo_height/2);

 

图 73.4.4所示

 

图 73.4.4

至此代码修改完成,重新编译烧写之后,再内核启动过程中,可以看到 linux 内核的小企鹅 LOGO 在屏幕的正中间。

 

图 73.4.5

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值