自定義u-boot啟動logo的方法
轉載地址:https://blog.csdn.net/yin_pengpeng/article/details/49178659
如果在uboot中實現了LCD等顯示裝置的驅動,uboot在啟動的時候會在螢幕的左上角顯示一個logo,如下圖:
這個logo預設情況(只定義了CONFIG_VIDEO_LOGO)是如上圖所示的企鵝(如果還定義了CONFIG_VIDEO_BMP_LOGO會是denx的標誌),這個是存在於uboot程式碼中的一個標頭檔案(include/video_logo.h或 bmp_logo.h),如果大家看了這個標頭檔案,發現這個是一個巨大的結構體,其中儲存著圖片每個畫素點的色彩資料。
這樣如果要更換這個預設的logo豈不是自己要生成這樣一個資料結構體才行?答案是肯定的。
但是這樣一個結構體要怎麼生成呢?這個uboot原始碼早就為我們想好了,方法其實很簡單:
一、準備一張jpeg圖片,通過命令列處理為8bit BMP圖片。
處理指令碼如下:
- #!/bin/sh
- #install Netpbm first
- jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
使用方法: (指令碼名) ( 待處理的JPG圖片名) (輸出檔名)
之所以用jpeg轉bmp的辦法,是通過實驗證明這種方面可行且簡便。
圖片的大小不一定要和原來一樣,你覺得合適就好。
二、將bmp檔案放入/tools/logos中,並修改/tools/下的Makefile
- # Generated LCD/video logo
- LOGO_H = $(OBJTREE)/include/bmp_logo.h
- LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
- LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
- ifeq ($(LOGO_BMP),)
- LOGO_BMP= logos/denx.bmp
- endif
- ifeq ($(VENDOR),atmel)
- LOGO_BMP= logos/atmel.bmp
- endif
- ifeq ($(VENDOR),esd)
- LOGO_BMP= logos/esd.bmp
- endif
- ifeq ($(VENDOR),freescale)
- LOGO_BMP= logos/freescale.bmp
- endif
- ifeq ($(VENDOR),ronetix)
- LOGO_BMP= logos/ronetix.bmp
- endif
- ifeq ($(VENDOR),syteco)
- LOGO_BMP= logos/syteco.bmp
- endif
紅色字型,替換為你製作的bmp檔名。
三、確認配置檔案
一定要定義
- #define CONFIG_VIDEO_LOGO
- #define CONFIG_VIDEO_BMP_LOGO
編譯的時候,你的bmp檔案會被tools/bmp_logo.c編譯出的工具bmp_logo
製作成include/bmp_logo.h,並編譯進uboot中。
四、重新編譯u-boot即可得到顯示新logo的u-boot。
效果如下圖所示:
由於是8bit色深,顏色就有點怪~
如果你看了drivers/video/cfb_console.c原始碼,你可能會發現還有一個splashimage的東東可以顯示。是的,如果你有張非壓縮的BMP圖片放在了Nor Flash,你可以在ENV中設定splashimage和splashpos告訴uboot讀取和顯示的位置。啟動的時候,uboot就會顯示這個bmp圖片。
但是,原生的uboot是隻支援Nor Flash和核心的讀取的,如果你的圖片放在nand flash、SD卡或者SPI、I2C 介面flash中,你可以自己實現將圖片檔案讀取到記憶體中,然後再顯示splash。實現起來並不複雜,關鍵是使用相關的API函式來讀取資料。
相關文章
- U-boot顯示LOGO之LOGO篇bootGo
- win10怎麼自定義開機啟動項_win10自定義開機啟動項的方法Win10
- 自定義springboot啟動器Spring Boot
- XAF自定義啟動頁
- Oracle RAC的自定義service自啟動Oracle
- allure報告自定義logo圖片和文字Go
- 【Linux】自定義開機啟動serviceLinux
- docker Redis 自定義配置檔案啟動DockerRedis
- 修改yocto系統啟動logoGo
- win10開機logo怎麼修改_win10自定義開機logo如何操作Win10Go
- Flutter100行輕鬆實現自定義P站和油管的Logo及自由切換Logo功能FlutterGo
- 記windows自定義bat指令碼自啟動WindowsBAT指令碼
- spring boot啟動掃描不到自定義註解Spring Boot
- 匯入自定義板塊的方法
- generatorConfig自動生成實體類以及自定義生成註釋的方法
- win10啟動項在哪裡設定 win10自定義開機啟動項Win10
- linux初學者自定義IP地址的方法Linux
- 自定義跳轉函式的通用unhook方法函式Hook
- 搞定動畫之 JQuery 中的自定義動畫動畫jQuery
- Android自定義View之requestLayout方法和invalidate方法AndroidView
- Android自定義View之invalidate方法和postInvalidate方法AndroidView
- 【朝花夕拾】Android自定義View篇之(十一)View的滑動,彈性滑動與自定義PagerViewAndroidView
- Flutter自定義Widget和使用方法Flutter
- 20190118-自定義實現replace方法
- FormRequest 自定義獲取方法名字ORM
- 怎樣用apipost自定義加密方法API加密
- 自定義元件-資料、方法、屬性元件
- 建立Laravel自定義Helper輔助方法Laravel
- IDEA自定義類註釋和方法註釋(自定義groovyScript方法實現多行引數註釋)Idea
- 使用自定義按鍵啟動軟體 Thor 1.5.2 Mac中文版Mac
- TransitionAnimation自定義轉場動畫NaN動畫
- 自定義View-波浪動效View
- 自定義View-扭曲動效View
- .Net Core AutoMapper自定義擴充套件方法的使用APP套件
- flutter自定義View(CustomPainter) 之 canvas的方法總結FlutterViewAICanvas
- DedeCMS的checkbox多選欄位自定義取值的方法
- Javascript陣列排序sort方法和自定義排序方法JavaScript陣列排序
- win10自定義開機啟動項的步驟_win10怎樣設定開機啟動項Win10