uboot顯示logo的方式
轉載地址:https://blog.csdn.net/jibazishinibushiwo/article/details/79625147
原文地址:uboot顯示logo的方式
本文使用uboot2010.03版本,2010.06版本同樣適用,在XC2440板上實現顯示bmp logo
首先需要有LCD的驅動支援,XC2440板的LCD驅動是:drivers/video/xc2440_lcd.c
顯示LOGO的函式呼叫流程:
在arch/arm/lib/board.c中的start_armboot呼叫common/stdio.c中的stdio_init
如果定義了CONFIG_VIDEO和CONFIG_CFB_CONSOLE,呼叫drivers/video/cfb_console.c中的drv_video_init
video_init呼叫XC2440的LCD驅動中的video_hw_init
接著video_logo呼叫logo_plot顯示logo
在config標頭檔案中(xc2440.h)定義和LCD LOGO相關的巨集
- #define CONFIG_CMD_BMP
- #define CONFIG_VIDEO
- #define CONFIG_VIDEO_S3C2410
- #define CONFIG_VIDEO_LOGO
- #define CONFIG_VIDEO_BMP_LOGO
- #define VIDEO_FB_16BPP_WORD_SWAP
如果定義了VIDEO_LOGO和VIDEO_BMP_LOGO
編譯時會執行tools目錄下的bmp_logo程式,讀取"tools/logos/denx.bmp"檔案,在include下生成bmp_logo.h檔案
檔案內容如下:
- #define BMP_LOGO_WIDTH 160
- #define BMP_LOGO_HEIGHT 96
- #define BMP_LOGO_COLORS 31
- #define BMP_LOGO_OFFSET 16
- unsigned short bmp_logo_palette[] = {
- .......................
- };
- unsigned char bmp_logo_bitmap[] = {
- .......................
- };
顯示logo函式就會呼叫這個陣列中的資料,顯示到屏上
在cfb_console.c中定義了LOGO的屬性
- #define VIDEO_LOGO_WIDTH BMP_LOGO_WIDTH
- #define VIDEO_LOGO_HEIGHT BMP_LOGO_HEIGHT
- #define VIDEO_LOGO_LUT_OFFSET BMP_LOGO_OFFSET
- #define VIDEO_LOGO_COLORS BMP_LOGO_COLORS
這個bmp檔案是有要求的,位深度必須為8位,大小也有限制(全屏圖片肯定是不行的,讀取檔案的後半部資料都是0)
自己做個logo圖片,jpeg格式就可以,使用linux下的圖片工具轉成8位的bmp檔案
- jpegtopnm logo.jpg | ppmquant 31 | ppmtobmp -bpp 8 > denx.bmp
也可以搞個指令碼,方便轉換
- #!/bin/sh
- jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
用法:指令碼 原始檔名 轉換後的檔名
三星平臺預設使用denx.bmp檔案,把自己的logo改成這個檔名,再編譯就行了
一個顯示卡裝置的結構體:
static GraphicDevice *pGD; /* Pointer to Graphic array */
GraphicDevice是表示顯示裝置屬性的結構體
pGD代表的就是顯示裝置
在xc2440_lcd.c驅動中,給pGD賦值
- pGD->winSizeX = res_mode->xres;
- pGD->winSizeY = res_mode->yres;
- pGD->plnSizeX = res_mode->xres;
- pGD->plnSizeY = res_mode->yres;
- pGD->gdfBytesPP = 2;
- pGD->gdfIndex = GDF_16BIT_565RGB;
- pGD->frameAdrs = LCD_VIDEO_ADDR;
- pGD->memSize = VIDEO_MEM_SIZE;
視訊記憶體的地址:#define LCD_VIDEO_ADDR 0x33d00000 (in xc2440.h)
視訊記憶體的大小:#define VIDEO_MEM_SIZE 0x200000 (in xc2440_lcd.c)
在cfb_console.c中得到顯示卡視訊記憶體的地址:
- #define VIDEO_FB_ADRS (pGD->frameAdrs)
- video_fb_address = (void *)VIDEO_FB_ADRS
後面的操作就使用video_fb_address
在logo_plot函式中,顯示BMP_LOGO的流程
(dest是指向video_fb_address的)
- source = bmp_logo_bitmap;
- logo_red = malloc (BMP_LOGO_COLORS);
- logo_green = malloc (BMP_LOGO_COLORS);
- logo_blue = malloc (BMP_LOGO_COLORS);
- for (i = 0; i < VIDEO_LOGO_COLORS; i++) {
- logo_red[i] = (bmp_logo_palette[i] & 0x0f00) >> 4;
- logo_green[i] = (bmp_logo_palette[i] & 0x00f0);
- logo_blue[i] = (bmp_logo_palette[i] & 0x000f) << 4;
- }
- while (ycount--) {
- xcount = VIDEO_LOGO_WIDTH;
- while (xcount--) {
- r = logo_red[*source - VIDEO_LOGO_LUT_OFFSET];
- g = logo_green[*source - VIDEO_LOGO_LUT_OFFSET];
- b = logo_blue[*source - VIDEO_LOGO_LUT_OFFSET];
- *(unsigned short *) dest = SWAP16 ((unsigned short) (((r >> 3) << 11) | ((g >> 2)<< 5) | (b >> 3)));
- }
- source++;
- dest += VIDEO_PIXEL_SIZE;
- }
- dest += skip;
如果只定義VIDEO_LOGO,沒有定義VIDEO_BMP_LOGO
就使用LINUX_LOGO顯示,用到include/linux_logo.h中定義的陣列,顯示的方式也不一樣
相關文章
- uboot開機logobootGo
- U-boot顯示LOGO之LOGO篇bootGo
- FPGA影像採集與顯示專案(一)帶LOGO的VGA顯示模組FPGAGo
- iMX8M mini開發板UBOOT新增新的顯示支援boot
- AUTOCAD——文字顯示方式
- CSS #定位 #顯示方式CSS
- LOGO!自帶螢幕顯示文字和變數值Go變數
- 【轉載】ALV的Excel方式顯示缺少模板Excel
- win10開機logo不見了怎麼辦 win10開機不顯示logo處理方法Win10Go
- Android Studio 顯示Cannot resolve symbol 'XXX'的解決方式AndroidSymbol
- PCB匯入新增Logo圖示Go
- # Flutter控制元件的顯示和隱藏的三種方式Flutter控制元件
- WPF/C#:顯示分組資料的兩種方式C#
- JavaScript動畫方式控制div元素的隱藏和顯示JavaScript動畫
- iMX8M系列技術貼 | OKMX8MM-C開發板UBOOT新增新的顯示支援boot
- 2.12.uboot的移植2-從uboot官方標準uboot開始移植boot
- Dcat Admin 修改全域性行操作按鈕顯示方式為文字+圖示
- 在終端裡按你的方式顯示日期和時間
- 研究顯示運動並不是一種有效的減肥方式
- 英偉達 RTX 新 Logo 亮相,明日釋出 Ada 架構 RTX 40 系列顯示卡Go架構
- HTML5 自定義驗證資訊顯示方式HTML
- 設定SAP標準報表顯示介面預設值的方式
- 更改微星主機板開機logo圖示Go
- Uboot功能boot
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡哪個更好
- Mac技巧|如何快速顯示Mac桌面?Mac桌面快捷操作方式Mac
- uboot-uboot介紹-學習筆記boot筆記
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡優缺點介紹
- ubuntu顯示卡更新導致開機後停留在ubuntu logo介面,進入不到登陸介面UbuntuGo
- gtx和rtx顯示卡的區別 gtx顯示卡和rtx顯示卡哪個好
- CAD中能顯示列印不顯示
- Overleaf中插入pdf圖片只顯示圖片路徑的解決方式
- 直播平臺原始碼,各個樣式的訊息通知欄顯示方式原始碼
- 專業顯示卡和遊戲顯示卡的區別詳解 專業顯示卡和遊戲顯示卡哪個好?遊戲
- unity 分數的顯示Unity
- 標籤的顯示模式模式
- 線上直播原始碼,VUE 獲獎名單滾動顯示的兩種方式原始碼Vue
- PbootCMS二開修改網站標題顯示方式,去掉副標題boot網站