0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

主要描述u-boot源碼中對開機logo的常規(guī)

嵌入式小生 ? 來源:嵌入式小生 ? 作者:iriczhao ? 2022-11-10 09:14 ? 次閱讀

一、導(dǎo)讀

使用嵌入式linux作為設(shè)備的操作系統(tǒng),當設(shè)備上電啟動后,希望顯示開機logo。一般會經(jīng)歷以下幾個階段:

(1)運行芯片內(nèi)部引導(dǎo)程序。

(2)運行引導(dǎo)加載程序(u-boot較為常用)。

(3)運行l(wèi)inux內(nèi)核。

(4)運行用戶根文件系統(tǒng),在這個階段,就會根據(jù)項目特征運行具體的程序或者服務(wù),最后則會進入一個人機交互軟件終端。

本文以u-boot作為引導(dǎo)加載程序,在運行時候,可以設(shè)置u-boot的啟動logo,本文主要描述這個話題。

二、獲取u-boot源碼

u-boot是一款在嵌入式領(lǐng)域常使用的引導(dǎo)加載程序。一般情況下,我們不會使用u-boot官方維護的源碼,而是使用芯片原廠或者硬件板卡提供商提供的u-boot源碼,因為官方維護的u-boot源碼的使用對象是芯片原廠,他們會根據(jù)自己的芯片特征做第一手的u-boot源碼移植,以支持自家芯片,然后發(fā)布給硬件板卡提供商或者第三方的合作伙伴。最后交到軟件開發(fā)人員手里的就是已經(jīng)可以直接編譯使用的u-boot源碼了。

本文主要描述u-boot源碼中對開機logo的常規(guī)(有些芯片原廠可能會有所修改)支持。

三、修改u-boot源碼

3-1 準備開機logo

根據(jù)自己設(shè)備顯示屏幕的大小制作一張文件格式為bmp的圖片,此處筆者使用PS軟件制作了一張開機logo:

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

(就顯示了幾個字,哈哈)

將其導(dǎo)出為bmp格式的文件后,然后將導(dǎo)出文件復(fù)制到u-boot源碼下的tools/logos目錄路徑下,并命名為mylogo.bmp(可以隨便命名)。

3-2 修改makefile

在u-boot源碼下的tools目錄中的makefile文件中,找到以下內(nèi)容:

#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

在上述修改中,為了防止編譯中參數(shù)控制對logo編譯的影響,故做了兩處修改。

3-4 添加宏定義

然后在具體對應(yīng)板卡的描述頭文件中添加兩個宏定義:

#defineCONFIG_VIDEO_LOGO
#defineCONFIG_VIDEO_BMP_LOGO

由于小生使用的是imx6ull的處理器平臺,所以在include/mx6ullevk.h文件中添加(此處需要根據(jù)具體情況而定)

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

3-5 logo居中顯示

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

staticvoid*video_logo(void)
{
...
splash_get_pos(&video_logo_xpos,&video_logo_ypos);
/*增加代碼,設(shè)置圖片居中顯示*/
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)函數(shù),注釋掉該函數(shù)中的一些內(nèi)容,具體修改如下:

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);
/*注釋結(jié)束*/
#ifdefCONFIG_CONSOLE_EXTRA_INFO

通過以上步驟,就將u-boot源碼修改好了,可以進行交叉編譯構(gòu)建了,然后運行修改好的u-boot即可。

四、開機logo編譯構(gòu)建本質(zhì)

在u-boot編譯構(gòu)建過程中,實則會編譯出一個名為bmp_logo的宿主機上運行的工具:

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

該工具會將我們的bmp格式的開機logo圖片轉(zhuǎn)換成include/bmp_logo.h、include/bmp_logo_data.h。在include/bmp_logo.h文件中,聲明了兩個圖片數(shù)據(jù)數(shù)組:

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

在include/bmp_logo_data.h文件中,則定義了這兩個數(shù)組(數(shù)據(jù)會根據(jù)具體的圖片生成很多數(shù)據(jù))。bmp_logo_palette數(shù)組:

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

bmp_logo_bitmap數(shù)組:

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

在實際使用中,可以查看是否生成了bmp_logo工具和include/bmp_logo.h文件,來判斷u-boot的開機logo部分是否被編譯進u-boot鏡像中。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18914

    瀏覽量

    300823
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    588

    瀏覽量

    27266
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    38163

原文標題:嵌入式linux | 修改u-boot啟動logo

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認硬件開發(fā)平臺為ARM,操作系統(tǒng)為Linux。
    發(fā)表于 07-14 16:52 ?2657次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    U-boot的執(zhí)行流程

    本文主要講述了U-boot的執(zhí)行流程。
    發(fā)表于 07-14 16:58 ?622次閱讀
    <b class='flag-5'>U-boot</b>的執(zhí)行流程

    u-boot源碼

    哪位大大有最新的u-boot源碼啊,現(xiàn)在正在學(xué)習(xí)u-boot,想要一份源碼,怎奈官方下載地址不能下。誰有發(fā)一下。804569645@qq.com非常感謝
    發(fā)表于 07-12 16:11

    淺析rk3399 u-boot修改開機logo以及開機動畫和開機視頻

    1、rk3399 u-boot修改開機logo以及開機動畫和開機視頻  首先分析了一下uboot啟動流程
    發(fā)表于 10-26 17:43

    U-Boot的啟動及移植分析

    bootloader 開發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強大的bootloader 開發(fā)軟件。本文詳細分析了U-Boot 的啟動流程,并結(jié)合其源碼,闡述了U-Bo
    發(fā)表于 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
    發(fā)表于 01-25 15:45 ?13次下載

    一種在U-BOOT嵌入千兆網(wǎng)絡(luò)功能的方法

    一種在U-BOOT嵌入千兆網(wǎng)絡(luò)功能的方法摘 要:U-BOOT是一種開放源碼的、用于多種嵌入式微處理器的引導(dǎo)加載程序,目前U-BOOT僅支持
    發(fā)表于 02-05 17:38 ?17次下載

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個LINUX下的工程,在編譯之前必須已經(jīng)安裝對應(yīng)體系結(jié)構(gòu)的交叉編譯環(huán)境,這里只針對ARM,編譯器系列軟件為arm-linux-*。 U-BOOT的下載
    發(fā)表于 05-17 09:16 ?2043次閱讀

    U-Boot結(jié)構(gòu)功能介紹

      U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。其源碼目錄、編譯形式
    發(fā)表于 07-30 09:17 ?1163次閱讀
    <b class='flag-5'>U-Boot</b>結(jié)構(gòu)功能介紹

    基于S3C2440的U-Boot開機logo的設(shè)計

    在對U-Boot進行深入分析的基礎(chǔ)上,同時對S3C2440的LCD控制器原理以及INNOLUX 7寸LCD的成像原理進行分析,最后結(jié)合系統(tǒng)軟硬件特性實現(xiàn)基于U-Boot開機logo。
    發(fā)表于 12-06 15:14 ?96次下載
    基于S3C2440的<b class='flag-5'>U-Boot</b><b class='flag-5'>開機</b><b class='flag-5'>logo</b>的設(shè)計

    u-boot簡介

    演化而來。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實上,不少U-Boot源碼就是根據(jù)相應(yīng)的Linux內(nèi)核源程序進行簡化而形成的,尤其是一些設(shè)備的驅(qū)動程序,這從U-Boot
    發(fā)表于 10-14 11:17 ?3519次閱讀

    如何在U-Boot實現(xiàn)對Yaffs鏡像的設(shè)計?

    U-Boot是目前廣泛使用的嵌入式操作系統(tǒng)通用引導(dǎo)程序,具有功能豐富強大,支持多種操作系統(tǒng)和CPU體系,易于功能擴展和移植,源碼開放等多種優(yōu)點。U-Boot,全稱 Universal Boot
    的頭像 發(fā)表于 08-29 05:02 ?3673次閱讀
    如何在<b class='flag-5'>U-Boot</b><b class='flag-5'>中</b>實現(xiàn)對Yaffs鏡像的設(shè)計?

    u-boot中使用ethernet的方法

    KV260 petalinux BSP在u-boot device treedisable了GEM3,也就是說ethernet在u-boot不建議使用ethernet。
    的頭像 發(fā)表于 07-21 10:25 ?3785次閱讀

    創(chuàng)建自定義的u-boot命令

    為什么會有這篇文章,因為小生被u-boot源碼的設(shè)計所吸引了(源碼對命令的處理過程)。自定義u-boot命令屬于u-boot
    的頭像 發(fā)表于 08-08 14:46 ?1042次閱讀

    u-boot armv8鏈接腳本

    u-boot armv8鏈接腳本 在進行源碼分析之前,首先看看u-boot的鏈接腳本,通過鏈接腳本可以從整體了解一個u-boot的組成,并且可以在啟動分析中知道某些邏輯是在完成什么工作
    的頭像 發(fā)表于 12-07 11:19 ?531次閱讀