0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

主要描述u-boot源码中对开机logo的常规

嵌入式小生 ? 来源:嵌入式小生 ? 作者:iriczhao ? 2022-11-10 09:14 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、导读

使用嵌入式linux作为设备的操作系统,当设备上电启动后,希望显示开机logo。一般会经历以下几个阶段:

(1)运行芯片内部引导程序。

(2)运行引导加载程序(u-boot较为常用)。

(3)运行linux内核。

(4)运行用户根文件系统,在这个阶段,就会根据项目特征运行具体的程序或者服务,最后则会进入一个人机交互软件终端。

本文以u-boot作为引导加载程序,在运行时候,可以设置u-boot的启动logo,本文主要描述这个话题。

二、获取u-boot源码

u-boot是一款在嵌入式领域常使用的引导加载程序。一般情况下,我们不会使用u-boot官方维护的源码,而是使用芯片原厂或者硬件板卡提供商提供的u-boot源码,因为官方维护的u-boot源码的使用对象是芯片原厂,他们会根据自己的芯片特征做第一手的u-boot源码移植,以支持自家芯片,然后发布给硬件板卡提供商或者第三方的合作伙伴。最后交到软件开发人员手里的就是已经可以直接编译使用的u-boot源码了。

本文主要描述u-boot源码中对开机logo的常规(有些芯片原厂可能会有所修改)支持。

三、修改u-boot源码

3-1 准备开机logo

根据自己设备显示屏幕的大小制作一张文件格式为bmp的图片,此处笔者使用PS软件制作了一张开机logo:

21918920-6090-11ed-8abf-dac502259ad0.png

(就显示了几个字,哈哈)

将其导出为bmp格式的文件后,然后将导出文件复制到u-boot源码下的tools/logos目录路径下,并命名为mylogo.bmp(可以随便命名)。

3-2 修改makefile

在u-boot源码下的tools目录中的makefile文件中,找到以下内容:

#GeneratedLCD/videologo
LOGO_H=$(objtree)/include/bmp_logo.h
LOGO_DATA_H=$(objtree)/include/bmp_logo_data.h
LOGO-$(CONFIG_LCD_LOGO)+=$(LOGO_H)
LOGO-$(CONFIG_LCD_LOGO)+=$(LOGO_DATA_H)
LOGO-$(CONFIG_VIDEO_LOGO)+=$(LOGO_H)
LOGO-$(CONFIG_VIDEO_LOGO)+=$(LOGO_DATA_H)

#Genericlogo
ifeq($(LOGO_BMP),)
LOGO_BMP=$(srctree)/$(src)/logos/denx.bmp

#Useboardlogoandfallbacktovendor
ifneq($(wildcard$(srctree)/$(src)/logos/$(BOARD).bmp),)
LOGO_BMP=$(srctree)/$(src)/logos/$(BOARD).bmp
else
ifneq($(wildcard$(srctree)/$(src)/logos/$(VENDOR).bmp),)
LOGO_BMP=$(srctree)/$(src)/logos/$(VENDOR).bmp
endif
endif

endif#!LOGO_BMP

将其修改为:

#GeneratedLCD/videologo
LOGO_H=$(objtree)/include/bmp_logo.h
LOGO_DATA_H=$(objtree)/include/bmp_logo_data.h
LOGO-$(CONFIG_LCD_LOGO)+=$(LOGO_H)
LOGO-$(CONFIG_LCD_LOGO)+=$(LOGO_DATA_H)
LOGO-$(CONFIG_VIDEO_LOGO)+=$(LOGO_H)
LOGO-$(CONFIG_VIDEO_LOGO)+=$(LOGO_DATA_H)

#Genericlogo
ifeq($(LOGO_BMP),)
LOGO_BMP=$(srctree)/$(src)/logos/mylogo.bmp#修改为自己的开机logo图片

#Useboardlogoandfallbacktovendor
ifneq($(wildcard$(srctree)/$(src)/logos/$(BOARD).bmp),)
LOGO_BMP=$(srctree)/$(src)/logos/$(BOARD).bmp
else
ifneq($(wildcard$(srctree)/$(src)/logos/$(VENDOR).bmp),)
#LOGO_BMP=$(srctree)/$(src)/logos/$(VENDOR).bmp
LOGO_BMP=$(srctree)/$(src)/logos/mylogo.bmp#修改为自己的开机logo图片
endif
endif

endif#!LOGO_BMP

在上述修改中,为了防止编译中参数控制对logo编译的影响,故做了两处修改。

3-4 添加宏定义

然后在具体对应板卡的描述头文件中添加两个宏定义:

#defineCONFIG_VIDEO_LOGO
#defineCONFIG_VIDEO_BMP_LOGO

由于小生使用的是imx6ull的处理器平台,所以在include/mx6ullevk.h文件中添加(此处需要根据具体情况而定)

21bb62f4-6090-11ed-8abf-dac502259ad0.png

3-5 logo居中显示

修改drivers/video/cfb_console.c文件中的static void *video_logo(void)函数,具体修改如下:

staticvoid*video_logo(void)
{
...
splash_get_pos(&video_logo_xpos,&video_logo_ypos);
/*增加代码,设置图片居中显示*/
if(video_logo_xpos&&video_logo_ypos)
{
video_logo_xpos=(VIDEO_VISIBLE_COLS-BMP_LOGO_WIDTH)>>1;
video_logo_ypos=(VIDEO_VISIBLE_ROWS-BMP_LOGO_HEIGHT)>>1;
}

#ifdefCONFIG_SPLASH_SCREEN

3-6 隐藏版本信息

同样修改drivers/video/cfb_console.c文件中的static void *video_logo(void)函数,注释掉该函数中的一些内容,具体修改如下:

if(board_cfb_skip())
return0;
/*注释开始*/
//sprintf(info,"%s",version_string);

//space=(VIDEO_COLS-VIDEO_INFO_X)/VIDEO_FONT_WIDTH;
//len=strlen(info);

//if(len>space){
//intxx=VIDEO_INFO_X,yy=VIDEO_INFO_Y;
//uchar*p=(uchar*)info;
//while(len){
//if(len>space){
//video_drawchars(xx,yy,p,space);
//len-=space;

//p=(uchar*)p+space;

//if(!y_off){
//xx+=VIDEO_FONT_WIDTH;
//space--;
//}
//yy+=VIDEO_FONT_HEIGHT;

//y_off++;
//}else{
//video_drawchars(xx,yy,p,len);
//len=0;
//}
//}
//}else
//video_drawstring(VIDEO_INFO_X,VIDEO_INFO_Y,(uchar*)info);
/*注释结束*/
#ifdefCONFIG_CONSOLE_EXTRA_INFO

通过以上步骤,就将u-boot源码修改好了,可以进行交叉编译构建了,然后运行修改好的u-boot即可。

四、开机logo编译构建本质

在u-boot编译构建过程中,实则会编译出一个名为bmp_logo的宿主机上运行的工具:

21e017de-6090-11ed-8abf-dac502259ad0.png

该工具会将我们的bmp格式的开机logo图片转换成include/bmp_logo.h、include/bmp_logo_data.h。在include/bmp_logo.h文件中,声明了两个图片数据数组:

21fc4968-6090-11ed-8abf-dac502259ad0.png

在include/bmp_logo_data.h文件中,则定义了这两个数组(数据会根据具体的图片生成很多数据)。bmp_logo_palette数组:

22135ae0-6090-11ed-8abf-dac502259ad0.png

bmp_logo_bitmap数组:

22bccefe-6090-11ed-8abf-dac502259ad0.png

在实际使用中,可以查看是否生成了bmp_logo工具和include/bmp_logo.h文件,来判断u-boot的开机logo部分是否被编译进u-boot镜像中。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5161

    文章

    19787

    浏览量

    319740
  • Linux系统
    +关注

    关注

    4

    文章

    606

    浏览量

    28858
  • u-boot
    +关注

    关注

    0

    文章

    122

    浏览量

    38957

原文标题:嵌入式linux | 修改u-boot启动logo

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    U-boot的基本介绍

    从本文开始,将陆续推送“手把手教你移植U-boot”系列文章,目标是由浅入深地讲解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默认硬件开发平台为ARM,操作系统为Linux。
    发表于 07-14 16:52 ?3756次阅读
    <b class='flag-5'>U-boot</b>的基本介绍

    U-boot的执行流程

    本文主要讲述了U-boot的执行流程。
    发表于 07-14 16:58 ?1030次阅读
    <b class='flag-5'>U-boot</b>的执行流程

    u-boot源码

    哪位大大有最新的u-boot源码啊,现在正在学习u-boot,想要一份源码,怎奈官方下载地址不能下。谁有发一下。804569645@qq.com非常感谢
    发表于 07-12 16:11

    浅析rk3399 u-boot修改开机logo以及开机动画和开机视频

    1、rk3399 u-boot修改开机logo以及开机动画和开机视频  首先分析了一下uboot启动流程
    发表于 10-26 17:43

    U-Boot的启动及移植分析

    bootloader 开发是嵌入式系统必不可少而且十分重要的部分,U-Boot 为功能强大的bootloader 开发软件。本文详细分析了U-Boot 的启动流程,并结合其源码,阐述了U-Bo
    发表于 09-01 16:34 ?27次下载

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    发表于 01-25 15:45 ?13次下载

    一种在U-BOOT嵌入千兆网络功能的方法

    一种在U-BOOT嵌入千兆网络功能的方法摘 要:U-BOOT是一种开放源码的、用于多种嵌入式微处理器的引导加载程序,目前U-BOOT仅支持
    发表于 02-05 17:38 ?17次下载

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。 U-BOOT的下载
    发表于 05-17 09:16 ?2157次阅读

    U-Boot结构功能介绍

      U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式
    发表于 07-30 09:17 ?1282次阅读
    <b class='flag-5'>U-Boot</b>结构功能介绍

    基于S3C2440的U-Boot开机logo的设计

    在对U-Boot进行深入分析的基础上,同时对S3C2440的LCD控制器原理以及INNOLUX 7寸LCD的成像原理进行分析,最后结合系统软硬件特性实现基于U-Boot开机logo
    发表于 12-06 15:14 ?96次下载
    基于S3C2440的<b class='flag-5'>U-Boot</b><b class='flag-5'>开机</b><b class='flag-5'>logo</b>的设计

    u-boot简介

    演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot
    发表于 10-14 11:17 ?3773次阅读

    如何在U-Boot实现对Yaffs镜像的设计?

    U-Boot是目前广泛使用的嵌入式操作系统通用引导程序,具有功能丰富强大,支持多种操作系统和CPU体系,易于功能扩展和移植,源码开放等多种优点。U-Boot,全称 Universal Boot
    的头像 发表于 08-29 05:02 ?4024次阅读
    如何在<b class='flag-5'>U-Boot</b><b class='flag-5'>中</b>实现对Yaffs镜像的设计?

    u-boot中使用ethernet的方法

    KV260 petalinux BSP在u-boot device treedisable了GEM3,也就是说ethernet在u-boot不建议使用ethernet。
    的头像 发表于 07-21 10:25 ?4698次阅读

    创建自定义的u-boot命令

    为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot
    的头像 发表于 08-08 14:46 ?1399次阅读

    u-boot armv8链接脚本

    u-boot armv8链接脚本 在进行源码分析之前,首先看看u-boot的链接脚本,通过链接脚本可以从整体了解一个u-boot的组成,并且可以在启动分析中知道某些逻辑是在完成什么工作
    的头像 发表于 12-07 11:19 ?1066次阅读