uboot-LCD篇
前言
@和原子哥一起学习Linux
驱动篇已经学完,后面打算自己去走一遍,后续会将感兴趣的内容记录下来。
开发环境:I.MX6Ull开发板
参考内容:正点原子的驱动开发教程,并完成uboot移植部分,使用自己移植的代码。
一、成果展示
和原图差距有点大,但是勉强能用。。
二、查看显示代码
在移植的时候就知道了logo显示的宏,查找即可:
1.代码路径及修改
反推出来的流程为:
init_sequence_r[] -> stdio_add_devices-> drv_lcd_init (); -> lcd_init(lcd_base)->lcd_clear()
->lcd_logo();
实际搜CONFIG_VIDEO_BMP_LOGO可以看到图片文件路径:
uboot\include\bmp_logo.h
uboot\include\bmp_logo_data.h
文件上显示:
Automatically generated by “tools/bmp_logo”
所以找uboot\tools\bmp_logo.c
查看
uboot\tools\Makefile
$(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP)
$(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
$(LOGO_DATA_H): $(obj)/bmp_logo $(LOGO_BMP)
$(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
......
# Generic logo
ifeq ($(LOGO_BMP),)
LOGO_BMP= $(srctree)/$(src)/logos/denx.bmp
# Use board logo and fallback to vendor
ifneq ($(wildcard $(srctree)/$(src)/logos/$(BOARD).bmp),)
LOGO_BMP= $(srctree)/$(src)/logos/$(BOARD).bmp
else
ifneq ($(wildcard $(srctree)/$(src)/logos/$(VENDOR).bmp),)
LOGO_BMP= $(srctree)/$(src)/logos/$(VENDOR).bmp
endif
endif
可以看出文件所在位置:tools/logos。或直接搜图片后缀名
确认需要替换的文件为freescale.bmp,应备份后用软连接指向我们自己的文件即可。
2.图片获取
使用Image2LCD,此处由于图片选择问题,导致导出的图片为800*400,但是也能用,这个软件自己多试试就好,比较简单。
出现的问题
以上的修改并没完成,直接输入会导致显示异常,经过排查发现,是图片过大后,uboot版本打印导致的问题,所以需要对这个问题进行修复。
路径:uboot\drivers\video\cfb_console.c
函数:static void *video_logo(void)
sprintf(info, " %s", version_string);
space = (VIDEO_COLS - VIDEO_INFO_X) / VIDEO_FONT_WIDTH;
len = strlen(info);
//根据屏幕大小设置即可
video_drawstring((800 - len)/2, 420, (uchar *) info);
/*
//此处屏蔽
if (len > space) {
int xx = VIDEO_INFO_X, yy = VIDEO_INFO_Y;
uchar *p = (uchar *) info;
while (len) {
if (len > space) {
video_drawchars(xx, yy, p, space);
len -= space;
p = (uchar *) p + space;
if (!y_off) {
xx += VIDEO_FONT_WIDTH;
space--;
}
yy += VIDEO_FONT_HEIGHT;
y_off++;
} else {
video_drawchars(xx, yy, p, len);
len = 0;
}
}
} else
video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *) info);
*/