【嵌入式linux】嵌入式linux

您所在的位置:网站首页 显示器标识更改 【嵌入式linux】嵌入式linux

【嵌入式linux】嵌入式linux

2024-07-10 01:34| 来源: 网络整理| 查看: 265

文章目录 一、导读二、获取u-boot源码三、修改u-boot源码3-1 准备开机logo3-2 修改makefile3-3 添加宏定义3-4 logo居中显示3-5 隐藏版本信息 四、开机logo编译构建本质五、运行效果

一、导读

使用嵌入式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:

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

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

3-2 修改makefile

在u-boot源码下的tools目录中,在makefile文件中查看一下关于logo编译部分的内容,找到以下内容:

# Generated LCD/video logo 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) # Generic logo ifeq ($(LOGO_BMP),) LOGO_BMP= $(srctree)/$(src)/logos/denx.bmp # Use board logo and fallback to vendor 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

将其修改为:

# Generated LCD/video logo 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) # Generic logo ifeq ($(LOGO_BMP),) LOGO_BMP= $(srctree)/$(src)/logos/mylogo.bmp #修改为自己的开机logo图片 # Use board logo and fallback to vendor 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-3 添加宏定义

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

#define CONFIG_VIDEO_LOGO #define CONFIG_VIDEO_BMP_LOGO

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

3-4 logo居中显示

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

static void *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; } #ifdef CONFIG_SPLASH_SCREEN 3-5 隐藏版本信息

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

if (board_cfb_skip()) return 0; /* 注释开始 */ // sprintf(info, " %s", version_string); // space = (VIDEO_COLS - VIDEO_INFO_X) / VIDEO_FONT_WIDTH; // len = strlen(info); // if (len > space) { // int xx = 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); /* 注释结束 */ #ifdef CONFIG_CONSOLE_EXTRA_INFO

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

四、开机logo编译构建本质

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

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

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

bmp_logo_bitmap数组:

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

五、运行效果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3