uboot LCD驱动修改和启动logo修改

4 篇文章 0 订阅

一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的,xxx 为板子名称,
比如 mx6ull_hyq_emmc.h 和 mx6ull_hyq_emmc.c 这两个文件.

目录

1.检查LCD的GPIO管脚

 2.检查LCD配置参数是否正确

 3.修改环境变量panel

4.修改uboot启动logo

5.动态加载logo

6.去掉logo上的启动信息

7.SPLASH_SCREEN


一般修改 LCD 驱动重点注意以下几点:
①、LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正确。
②、LCD 背光引脚 GPIO 的配置。
③、LCD 配置参数是否正确。

1.检查LCD的GPIO管脚

检查LCD的GPIO管脚,包括复位、背光的复用功能以及电气属性

LCD管脚初始化,复位LCD,打开背光

 2.检查LCD配置参数是否正确

需要注意的是像素时钟pixclock需要转换成皮秒

 

 像素时钟的计算

 3.修改环境变量panel

修改mx6ull_hyq_emmc.h文件默认环境变量中的panel为TFT4384,即LCD配置参数中mode.name

 

LCD的初始化是通过环境变量panel来选择的,如果您有多块不同分辨率的屏幕,那么下图这里可以添加多块屏幕的信息,每块屏幕的mode.name不能相同;如果mode.name和panel的值相同则选中当前屏幕,因此可以在驱动中兼容多块屏幕,通过设置环境变量panel来切换屏幕

struct display_info_t const displays[]是一个全局的变量,.enable    = do_enable_parallel_lcd是LCD的硬件初始化函数

 

 如果环境变量panel匹配不成功则会输出        printf("unsupported panel %s\n", panel);

屏幕切换(LCD驱动选择)可通过以下命令来切换:

setenv panel "xxx"

saveenv 

reset

在tools下有一个bmp_logo.c文件,bmp_logo这个工具专门是将bmp图片的图片数据提取出来保存到bmp_logo_data.h的unsigned char bmp_logo_bitmap[]数据中,初始化LCD到刷logo的函数调用过程如下

drv_lcd_init()

        -->lcd_init()-

               - ->lcd_clear()

                        -->lcd_logo()

                                -->lcd_logo_plot()-->bmp_logo_bitmap

 修改logo,首先tools/logos/文件夹下保存了各种logo的bmp图片

 其次是通过tools/下的makefile文件中的LOGO_BMP来选择logos文件夹下的哪一张bmp图片做uboot的默认启动logo

 比如现在是选择freescale.bmp这张图片,那么有如下两种方法来修改logo

1.将新的bmp图片来替换tools/logos/文件夹下freescale.bmp

2.将新的bmp图片添加到tools/logos/文件夹下,并修改tools文件夹makefile文件中LOGO_BMP来选择新的bmp图片

注意新的bmp图片尺寸最好和原来的保持一致,并且像素位深不能超过8bit

增加以下宏定义,支持BMP命令

//支持BMP命令
#define CONFIG_CMD_BMP
//支持BMP命令
#define CONFIG_BMP_8BPP

屏蔽以下宏定义,否则会都刷其它logo导致闪屏

 在适当的地方加载并显示logo,以下例子logo保存在SD卡中

	run_command("fatload mmc 0:1 80800000 logo.bmp", 0 );	
	run_command("bmp display 80800000 0 0", 0 );

由于logo存在于SD卡或者内部MMC中,我这是在board_late_init函数中调用,确保在mmc设备已初始化之后再加载。

 uboot只能加载显示8bit位深的bmp图片,冬天加载优点是灵活修改logo,不需要重新编译Uboot源码,缺点是如果图片过大可能会出现一点点的绘制过程。

6.去掉logo上的启动信息

修改/drivers/video/cfb_console.c注释掉以下代码

7.SPLASH_SCREEN

此方法设置启动logo比前面几种更加灵活、方便快捷

需要用到的宏定义

#define CONFIG_ENV_IS_IN_MMC
#define CONFIG_VIDEO_LOGO
#define CONFIG_SPLASH_SCREEN

环境变量

"splashimage=0x88000000\0" \
"logo_file=logo.bmp\0" \

初始化和刷logo的位置
driver/video/cfb_console.c文件中
static void *video_logo(void)

video_init()
        ->video_logo()

 关键代码如下

#if defined(CONFIG_ENV_IS_IN_MMC)
	extern int mmc_get_env_dev(void);
	char mmc_part[20] = {0};
	sprintf(mmc_part, "%d:%d", mmc_get_env_dev(), 1);
	char *argv[5] = {
	"fatload", "mmc", mmc_part, s, getenv("logo_file")};
	do_fat_fsload(NULL, 0, 5, argv);
#endif

	if (s != NULL) {
		splash_screen_prepare();
		addr = simple_strtoul(s, NULL, 16);

		if (video_display_bitmap(addr,
					video_logo_xpos,
					video_logo_ypos) == 0) {
			video_logo_height = 0;
			return ((void *) (video_fb_address));
		}
	}
#endif /* CONFIG_SPLASH_SCREEN */

添加默认环境变量

 相关的宏定义

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值