海思提供的uboot是支持开机启动画面的,在提供的帮助文档中提到了一些命令来实现该功能:
setenv jpeg_addr 0x800C0000
setenv jpeg_size 0x10000
setenv vobuf 0xC7160000
接下来需用tftp下载图片到指定的内存地址中,注意这里的地址必须是一个有效的地址,要不然图片载入不成功。
烧写开机画面:
tftp 0x800C0000 logo.jpg
protect off 0x800C0000 0x800fffff
erase 0x800C0000 0x800fffff
tftp 0x800C0000 logo.jpg
接下来就是解码和显示:
decjpeg
startvo 0 2 7
startvo 2 0 0
stopgx 0
stopvo 0
通过命令测试成功了,接下来就是在uboot源码中实现了。
我们是在uboot启动内核之前做的。
修改Cmd_bootm.c中的do_bootm函数,添加如下代码:
char *s=NULL;
long u =0;
long vobufAddr = 0;
s = getenv("vobuf");
if(s)
{
vobufAddr = simple_strtol(s,NULL,0);
}
else
{
printf("Invalid vobuf address!\n");
vobufAddr = 0xc8000000;
}
printf("+++++++++++++++++<
load_jpeg();
jpeg_decode();
set_vobg(0, 0x000000);
start_vo(0,2,7); // start_vo[dev, type, sync], -
start_vo(2,0,0); // 第3个参数, 0(PAL),1(NTSC), 7(800x600), 8(1024x768),9(1280x1024),10(1366x768),11(1440x900)
start_gx(0,vobufAddr,1600,0,0,800,600);
start_gx(2,vobufAddr,1600,0,0,720,576);
然后图片是放在flash的某个固定地址中的。