U-Boot Splash Screen: Difference between revisions
From ArmadeusWiki
m (→Test it) |
No edit summary |
||
Line 1: | Line 1: | ||
=Introduction= | =Introduction= | ||
On this page you will learn how to activate LCD support in U-Boot and display a Splash Screen at boot. The following instructions have only be tested on [[OPOS6UL]]. | On this page you will learn how to activate LCD support in U-Boot and display a Splash Screen at boot. | ||
{{Note|The following instructions have only be tested on [[OPOS6UL]].}} | |||
=Installation= | =Installation= | ||
Line 31: | Line 30: | ||
BIOS> setenv splashsource mmc_fs | BIOS> setenv splashsource mmc_fs | ||
</pre> | </pre> | ||
=Continuity with Linux Boot Logo= | |||
* If you want Linux to keep your U-Boot Logo during boot process, then some tweaks are needed: | |||
** define CONFIG_SYS_MEM_TOP_HIDE in U-Boot configuration file, here we reserve 2MBytes: <source lang="c">#define CONFIG_SYS_MEM_TOP_HIDE (2 << 20)</source> | |||
* Force framebuffer RAM address in U-Boot LCD driver ([[OPOS6UL]] has 256MBytes (0x10000000) RAM starting at physical 0x80000000):<source lang="diff">@@ -197,8 +197,8 @@ | |||
panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP; | |||
/* Allocate framebuffer */ | |||
- fb = memalign(ARCH_DMA_MINALIGN, | |||
- roundup(panel.memSize, ARCH_DMA_MINALIGN)); | |||
+ fb = (void *)0x8fe00000; /*memalign(ARCH_DMA_MINALIGN, | |||
+ roundup(panel.memSize, ARCH_DMA_MINALIGN));*/ | |||
if (!fb) { | |||
printf("MXSFB: Error allocating framebuffer!\n"); | |||
return NULL; | |||
</source> | |||
* Tell Linux to not print cursor on Framebuffer and to not use last 2M of RAM: <pre class="apf">BIOS> setenv extrabootargs vt.global_cursor_default=0 mem=248M</pre> | |||
* Force framebuffer RAM address to same value in Linux LCD driver: <source lang="diff">@@ -825,17 +824,18 @@ | |||
var->vmode = FB_VMODE_NONINTERLACED; | |||
/* Memory allocation for framebuffer */ | |||
+#define FORCED_FB_ADDR 0x8fe00000 | |||
fb_size = SZ_2M; | |||
- fb_virt = dma_alloc_wc(dev, PAGE_ALIGN(fb_size), &fb_phys, GFP_KERNEL); | |||
+ fb_virt = ioremap_wc(FORCED_FB_ADDR, fb_size); | |||
if (!fb_virt) | |||
return -ENOMEM; | |||
+ fb_phys = FORCED_FB_ADDR; | |||
fb_info->fix.smem_start = fb_phys; | |||
fb_info->screen_base = fb_virt; | |||
fb_info->screen_size = fb_info->fix.smem_len = fb_size; | |||
- if (mxsfb_restore_mode(host, vmode)) | |||
- memset(fb_virt, 0, fb_size); | |||
+ mxsfb_restore_mode(host, vmode); | |||
return 0; | |||
}</source> | |||
* Reflash all that on your board and... That's it ! ;-) | |||
=Links= | =Links= | ||
* http://www.denx.de/wiki/DULG/UBootSplashScreen | * http://www.denx.de/wiki/DULG/UBootSplashScreen | ||
[[Category:Boot Logo]] |
Revision as of 16:12, 4 April 2017
Introduction
On this page you will learn how to activate LCD support in U-Boot and display a Splash Screen at boot.
![]() |
Note: The following instructions have only be tested on OPOS6UL. |
Installation
- Save your image as BMP file (in Gimp use Run-Length (RLE) encoding, no alpha channel and no color informations (compatibility options))
- Activate LCD in U-Boot (here ST0700):
BIOS> setenv videomode video=ctfb:x:800,y:480,depth:18,pclk:33033,le:8,ri:4,up:2,lo:4,hs:64,vs:4,sync:0,vmode:0
Test it
BIOS> tftpboot ${loadaddr} xxx.bmp BIOS> bmp info ${loadaddr} Image size : 296 x 72 Bits per pixel: 8 Compression : 0
BIOS> bmp display ${loadaddr} 100 50
Deploy it
- Here we assume that logo is stored in /boot directory of rootfs eMMC partition as logo.bmp:
BIOS> setenv splashimage 0x80000000 BIOS> setenv splashfile /boot/logo.bmp BIOS> setenv splashsource mmc_fs
Continuity with Linux Boot Logo
- If you want Linux to keep your U-Boot Logo during boot process, then some tweaks are needed:
- define CONFIG_SYS_MEM_TOP_HIDE in U-Boot configuration file, here we reserve 2MBytes:
#define CONFIG_SYS_MEM_TOP_HIDE (2 << 20)
- define CONFIG_SYS_MEM_TOP_HIDE in U-Boot configuration file, here we reserve 2MBytes:
- Force framebuffer RAM address in U-Boot LCD driver (OPOS6UL has 256MBytes (0x10000000) RAM starting at physical 0x80000000):
@@ -197,8 +197,8 @@ panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP; /* Allocate framebuffer */ - fb = memalign(ARCH_DMA_MINALIGN, - roundup(panel.memSize, ARCH_DMA_MINALIGN)); + fb = (void *)0x8fe00000; /*memalign(ARCH_DMA_MINALIGN, + roundup(panel.memSize, ARCH_DMA_MINALIGN));*/ if (!fb) { printf("MXSFB: Error allocating framebuffer!\n"); return NULL;
- Tell Linux to not print cursor on Framebuffer and to not use last 2M of RAM:
BIOS> setenv extrabootargs vt.global_cursor_default=0 mem=248M
- Force framebuffer RAM address to same value in Linux LCD driver:
@@ -825,17 +824,18 @@ var->vmode = FB_VMODE_NONINTERLACED; /* Memory allocation for framebuffer */ +#define FORCED_FB_ADDR 0x8fe00000 fb_size = SZ_2M; - fb_virt = dma_alloc_wc(dev, PAGE_ALIGN(fb_size), &fb_phys, GFP_KERNEL); + fb_virt = ioremap_wc(FORCED_FB_ADDR, fb_size); if (!fb_virt) return -ENOMEM; + fb_phys = FORCED_FB_ADDR; fb_info->fix.smem_start = fb_phys; fb_info->screen_base = fb_virt; fb_info->screen_size = fb_info->fix.smem_len = fb_size; - if (mxsfb_restore_mode(host, vmode)) - memset(fb_virt, 0, fb_size); + mxsfb_restore_mode(host, vmode); return 0; }
- Reflash all that on your board and... That's it ! ;-)