static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) { ... /* Paint the logo and retrieve LCD base address */ debug ("[LCD] Drawing the logo...\n"); lcd_console_address = lcd_logo (); }
static void *lcd_logo (void) { #ifdef CONFIG_SPLASH_SCREEN char *s; ulong addr; static int do_splash = 1; if (do_splash && (s = getenv("splashimage")) != NULL) { int x = 0, y = 0; do_splash = 0; addr = simple_strtoul (s, NULL, 16); #ifdef CONFIG_SPLASH_SCREEN_ALIGN if ((s = getenv ("splashpos")) != NULL) { if (s[0] == 'm') x = BMP_ALIGN_CENTER; else x = simple_strtol (s, NULL, 0); if ((s = strchr (s + 1, ',')) != NULL) { if (s[1] == 'm') y = BMP_ALIGN_CENTER; else y = simple_strtol (s + 1, NULL, 0); } } #endif /* CONFIG_SPLASH_SCREEN_ALIGN */ #ifdef CONFIG_VIDEO_BMP_GZIP bmp_image_t *bmp = (bmp_image_t *)addr; unsigned long len; if (!((bmp->header.signature[0]=='B') && (bmp->header.signature[1]=='M'))) { addr = (ulong)gunzip_bmp(addr, &len); } #endif if (lcd_display_bitmap (addr, x, y) == 0) { return ((void *)lcd_base); } } #endif /* CONFIG_SPLASH_SCREEN */ #ifdef CONFIG_LCD_LOGO bitmap_plot (0, 0); #endif /* CONFIG_LCD_LOGO */ #ifdef CONFIG_LCD_INFO console_col = LCD_INFO_X / VIDEO_FONT_WIDTH; console_row = LCD_INFO_Y / VIDEO_FONT_HEIGHT; lcd_show_board_info(); #endif /* CONFIG_LCD_INFO */ #if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO) return ((void *)((ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length)); #else return ((void *)lcd_base); #endif /* CONFIG_LCD_LOGO && !CONFIG_LCD_INFO_BELOW_LOGO */ }這邊透過關鍵字splashimage就知道可以有用SplashScreen。
include/configs/mx6q_sabresd.h (還有個 mx6q_sabresd_android.h)
#define CONFIG_SPLASH_SCREEN #ifdef CONFIG_SPLASH_SCREEN /* * Framebuffer and LCD */ #define CONFIG_LCD #define CONFIG_IPU_V3H #defineCONFIG_VIDEO_MX5 #define CONFIG_IPU_CLKRATE 260000000 #define CONFIG_SYS_CONSOLE_ENV_OVERWRITE #define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE #define CONFIG_SYS_CONSOLE_IS_IN_ENV #define LCD_BPP LCD_COLOR16 #define CONFIG_CMD_BMP #define CONFIG_BMP_8BPP #define CONFIG_FB_BASE (TEXT_BASE + 0x300000) #define CONFIG_SPLASH_SCREEN_ALIGN #define CONFIG_SYS_WHITE_ON_BLACK #define CONFIG_IMX_PWM #define IMX_PWM1_BASE PWM1_BASE_ADDR #define IMX_PWM2_BASE PWM2_BASE_ADDR #endif #endif /* __CONFIG_H */board/freescale/common/Makefile
COBJS-${CONFIG_VIDEO_MX5} += fsl_bmp_600x400.o fsl_bmp_reversed_600x400.o在 board/freescale/common/ 找到 fsl_bmp_600x400.c
用bin2txt.py來將bmp轉bin 指令: python bin2txt.pyw xxx.bmp (需安裝 python 和 python-tk)
board/freescale/mx6q_sabresd/mx6q_sabresd.c
#ifdef CONFIG_SPLASH_SCREEN void setup_splash_image(void) { char *s; ulong addr; s = getenv("splashimage"); if (s != NULL) { addr = simple_strtoul(s, NULL, 16); #if defined(CONFIG_ARCH_MMU) addr = ioremap_nocache(iomem_to_phys(addr), fsl_bmp_reversed_600x400_size); #endif memcpy((char *)addr, (char *)fsl_bmp_reversed_600x400, fsl_bmp_reversed_600x400_size); } } #endif #endif /* !CONFIG_MXC_EPDC */
沒有留言:
張貼留言