本文档针对 IMX51 android 平台下设置开机图标,其他本台未作测试。
步骤如下
1、LOGO图片保存在tools/logos目录下,可自行进行修改。注意图片大小不要超过你的屏的大小,色彩深度不能大于256色,即8位色深的图片8bpp的bmp图。
2、打开/tools/Makefile,定位到124行附近,修改如下:
# 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
LOGO_BMP= logos/logott.bmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetix.bmp
endif
如果你将自己制作的logo命名成logos目录下denx.bmp而将之前的替换掉,这里的代码就不用修改了。否则只需将denx.bmp改为自己的图片名称即可。
3、在U-Boot中使用Splash Screen,可以实现U-Boot启动后,在LCD上显示自定义图片,起到友好的界面显示作用。使用Splash Screen需要在配置文件中使能BMP图片功能和SPLASH功能:
打开 inlcude/configs目录下 mx51_bbg_android.h文件,在文件开头加入如下信息
#define CONFIG_LCD
#define CONFIG_VIDEO_MX5
#define CONFIG_SPLASH_SCREEN
#define CONFIG_LCD_LOGO
#define CONFIG_VIDEO_LOGO
#define CONFIG_VIDEO_BMP_LOGO
#define CONFIG_CMD_BMP
作以上修改之后,
4、增加LCD驱动
修改 drivers/video目录下makefile文件第38行附近,加入LCD驱动
COBJS-y += mxc_ipuv3_fb.o ipu_common.o ipu_disp.o
完成以下步骤后,在Uboot启动时,屏幕左上方将出现 freescale 图标,但此时背光仍未开启
5、打开背光
903中采用GPIO1_2端口复用为PWM来实现背光调节。此处事直接将GPIO1_2置为高电平,打开背光。
打开 board/freescale/mx51_bbg目录下的mx51_bbg.c 定位到函数 lcd_enable(),加入如下内容
mxc_request_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT0); // 设置GPIO1_2为GPIO口
//mxc_iomux_set_input(MUX_IN_GPIO1_IPP_IND_G_IN_2_SELECT_INPUT, INPUT_CTL_PATH1);
reg = readl(GPIO1_BASE_ADDR + 0x4); // 设置GPIO1_2为输出状态
reg |= 0x04;
writel(reg, GPIO1_BASE_ADDR + 0x4);
reg = readl(GPIO1_BASE_ADDR + 0x0); // 设置GPIO1_2输出高电平
reg |= 0x04;
writel(reg, GPIO1_BASE_ADDR + 0x0);
ret = ipuv3_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565,
DI_PCLK_PLL3, 0);
if (ret)
puts("LCD cannot be configured\n");
具体内容可参照 datasheet 第1035——1037 每一组GPIO口为32个,共用一组寄存器对其输入输出状态及输出值进行设置,GDIR寄存器用于设计输入输出状态,DR寄存器用于设置输出值。
6、 编译uboot,启动时将在屏幕左上方显示freescale图标。那么为什么没有显示出自己修改的图标呢,估计中间设置有些小问题。
跟踪程序可知,在 board/freescale/mx51_bbg/mx51_bbg.c 的 setup_splash_image()函数中有一句赋值操作,memcpy((char *)addr, (char *)fsl_bmp_600x400, fsl_bmp_600x400_size); fsl_bmp_600x400数组定义在fsl_bmp_600×400.c文件中。因此只需修改数据fsl_bmp_600x400中的图片数据,。即可显示自己需要的图片了。该图像数据在bmp_logo.h文件中有生成。
7、在 lcd.c 文件中的905行左右,可修改 bitmap_plot(500,320); 来改变图标显示位置。
参考资料:
【1】U-boot开机logo的制作方法(Tekkaman Ninja):http://blog.chinaunix.net/u1/34474/showart_2085233.html
【2】U-Boot中的Splash Screen(Charlie Chen):http://blog.chinaunix.net/u1/51797/showart.php?id=2070554
【3】UBOOT LCD驱动流程(牛蹄印章):http://blog.chinaunix.net/u3/90973/showart_2303809.html
【4】u-boot-2009.08在mini2440上的移植增加LCD显示功能 http://www.linuxidc.com/Linux/2011-05/35982p7.htm
在有实现LCD显示和LCD命令行终端的U-boot中,默认情况下在左上角都有显示一个logo,如果是atmel的芯片,就会有atmel的logo,三星的则是denx的logo。如果想把它改成自己喜欢的或者公司的logo,则只要作简单的修改便可以实现。
相关配置选项说明:
CONFIG_CFB_CONSOLE:使能终端设备的彩色帧缓冲. 在/divers/video/cfb_console.c)有相关定义。
VIDEO_FB_LITTLE_ENDIAN 图像存储组织 (默认为大端序)
VIDEO_HW_RECTFILL 图像芯片支持矩形填充(rectangle fill)(cf. smiLynxEM)
VIDEO_HW_BITBLT 图像芯片支持位块传输(bit-blit) (cf. smiLynxEM)
VIDEO_VISIBLE_COLS 可视像素列 (cols=pitch)
VIDEO_VISIBLE_ROWS 可视像素行
VIDEO_PIXEL_SIZE 每像素字节数
VIDEO_DATA_FORMAT 图像数据格式 (0-5, cf. cfb_console.c)
VIDEO_FB_ADRS 帧缓冲地址
VIDEO_KBD_INIT_FCT keyboard int fct(i.e. i8042_kbd_init())
VIDEO_TSTC_FCT test char fct (i.e. i8042_tstc)
VIDEO_GETC_FCT get char fct (i.e. i8042_getc)
CONFIG_CONSOLE_CURSOR 打开/关闭 光标绘制 (需要 blink timer cf. i8042.c)
CFG_CONSOLE_BLINK_COUNT blink 间隔 (cf. i8042.c)
CONFIG_CONSOLE_TIME 在右上角显示时间/日期信息 (需要 CONFIG_CMD_DATE)
CONFIG_VIDEO_LOGO 在左上角显示Linux logo
CONFIG_VIDEO_BMP_LOGO 使用bmp_logo.h作为logo(默认是linux_logo.h)。 需要 CONFIG_VIDEO_LOGO。
CONFIG_CONSOLE_EXTRA_INFO 除了logo外的其它单板信息
如果定义了CONFIG_CFB_CONSOLE, 视频终端是默认的i/o. 使用'console=serial'环境可以强制使用串口终端
如果定义了 CONFIG_SILENT_CONSOLE, 可以用'silent'环境变量屏蔽所有终端消息(包括U-Boot和Linux的输出!)。更多信息见doc/README.silent
CONFIG_SYS_CONSOLE_IS_IN_ENV:如果你想将标准输入、标准输出、标准错误设为usbttyusbtty(USB串口终端),定义该宏。
CONFIG_VIDEO_BMP_GZIP:如果设置该选项, 除了支持标准BMP图像外, splashscreen或者bmp命令可以使用gzip压缩的BMP图像
CONFIG_SPLASH_SCREEN:如果设置该选项, 将检查环境变量"splashimage"。 如果变量存在则显示一张BMP图像,普通的logo, 版权及系统信息不再显示。 "splashimage"指定了位图的存放地址。终端也被重定向到"nulldev"。由于启动的早期就会加载Splash screen,使用它可以实现安静的启动。