在看这篇博客之前,建议大家先参考前一篇博客海思篇之开机logo的加载(Hi3531a命令版),在了解了logo加载的流程之后,接下来的代码篇才会更容易理解。我用的开发板是Hi3531a,不同的版本可能有所不同,这里仅供大家参考。
- 找到/HisiSDK/Hi3531A_SDK_V1.0.5.0/osdrv/opensource/uboot/u-boot-2010.06/include/configs/hi3531a.h这个文件并打开,修改Environment Configuration这个模块的内容(大概在170行),进行如下修改:
- 添加如下代码:
#define CONFIG_EXTRA_ENV_SETTINGS
#define CONFIG_JPEG_ADDR “0x4a500000” //jpeg_addr
#define CONFIG_JPEG_SIZE “0xee28” //jpeg_size
#define CONFIG_VOBUF “0x4a800000” //vobuf- 修改CONFIG_BOOTCOMMAND宏定义为:
#define CONFIG_BOOTCOMMAND “setenv jpeg_addr 0x4a500000;setenv jpeg_size 0xee28;setenv vobuf 0x4a800000;nand read 0x42000000 0x7c00000 0xee28;decjpg;startvo 0 36 7;startvl 0 0x4a800000 1280 0 0 1280 720;mw.b 0x42000000 0xff 0x400000;nand read 0x42000000 0x100000 0x400000;bootm 0x42000000”
注意:
1) 这里CONFIG_BOOTCOMMAND 下的前3条命令参考上一篇博客海思篇之开机logo的加载(Hi3531a命令版);
2)nand read 0x42000000 0x7c00000 0xee28是指从海思nand flash的0x7c00000地址中读取0xee28长度的数据到内存地址0x42000000 作为缓存数据(图片);
3)接下来的decjpg,startvo,startvl 同样参考前面的海思篇之开机logo的加载(Hi3531a命令版);
4)mw.b 0x42000000 0xff 0x400000是指清空内存地址0x42000000上的长度为0x400000字节的缓存数据;
5)nand read 0x42000000 0x100000 0x400000是从nand flash读取kernel到内存地址0x42000000;
6)bootm 0x42000000是指kernel的加载地址。
效果图如下:
- 找到/HisiSDK/Hi3531A_SDK_V1.0.5.0/osdrv/opensource/uboot/u-boot-2010.06/common/env_common.c这个文件并打开,修改数组default_environment[]的内容(大概在60行),修改如下:
- 在数组的末尾加上:
#ifdef CONFIG_EXTRA_ENV_SETTINGS
//CONFIG_EXTRA_ENV_SETTINGS
“jped_addr=” CONFIG_JPEG_ADDR “\0”
“jped_size=” CONFIG_JPEG_SIZE “\0”
“vobuf=” CONFIG_VOBUF “\0”
#endif
效果图如下:
- 关闭以上两个文件,编译uboot,最后生成.bin文件,如下图:
最后把编译生成的uboot烧录到板子就OK啦!