Bootlogo使用说明
1. 概述¶
本文档主要讲解SSR931G Bootlogo的使用。
目前SSR931G使用的是开源的fwfs文件系统,此文件系统支持读写,比较容易跨平台移植,rtk、uboot和linux中都有支持,并且读取速度非常快,支持掉电保护以及有不错的写均衡机制,对于使用者来说也更加方便对屏参进行修改。
2. 基础配置¶
Bootlogo使用的是misc/config.ini这个配置文件,编译的时候会把project/board/m6p/SSC025A-S01A/config/config.ini拷贝进来,该文件主要配置了:1.显示LOGO的设备类型; 2.输出的timming; 3.m_sLogoFile0,m_sLogoFile1:LOGO的id所对应的jpeg文件等,详细介绍见2.3节。
2.1. Uboot¶
Nand flash使用mercury6p_demo_spinand_defconfig这个配置,在此配置上还需要手动打开如下配置信息:
CONFIG_CMD_BOOTLOGO=y
CONFIG_SSTAR_DISP=y
CONFIG_SSTAR_JPD=y
CONFIG_JPD_SW=y (软解)
CONFIG_JPD_HW=y (硬解)注意软硬解只能选择其中一种
CONFIG_FS_FIRMWAREFS=y (默认选择该FS)
CONFIG_SSTAR_INI_PARSER=y
路径如下图:
-
CONFIG_CMD_BOOTLOGO

-
CONFIG_SSTAR_DISP、CONFIG_SSTAR_JPD、CONFIG_JPD_SW、CONFIG_JPD_HW、CONFIG_SSTAR_HDMITX

-
CONFIG_SSTAR_INI_PARSER

-
CONFIG_FS_FIRMWAREFS

Nor flash目前没有默认config,但是也可以在mercury6p_demo_defconfig这个配置上,手动打开上述和spi nand同样的配置。
另外nand和nor还需要根据显示输出类型进行不同的配置,如下HDMI输出配置、VGA输出配置、CVBS输出配置等。
2.1.1. HDMI输出配置¶
CONFIG_SSTAR_DISP_HDMITX_VGA=y
CONFIG_SSTAR_HDMITX=y //这个宏的配置路径上面图片有体现
并且需要关掉CONFIG_SSTAR_PNL。(注意931无PNL配置,其他芯片PNL和HDMI是互斥的)

config.ini 参考如下:
[LOGO] m_eDeviceType = 2; #0 None, 1 LCD, 2 HDMI, 3 VGA 4 CVBS m_sParaTarget = DACOUT_1080P_60 m_wDispWidth = 1920 m_wDispHeight = 1080 m_wDispFps = 60 m_sLogoFile0 = sigmastar1024_600.jpg m_sLogoFile1 = upgrade.jpg
以上修改需要更新uboot和重启,完成后开机进uboot下通过如下cmd测试是否可以正常显示:
bootlogo [logo_id] [aspect ratio '0: zoom' '1: center' '2: usr'] [x] [y] [section_name]
此命令会带四个参数:
logo id → LOGO中打包的JPEG的数字索引。
aspect ratio → 显示logo的aspect ratio。0表示zoom,全屏显示;1表示center,居中显示;2表示user,用户设定起始点,点对点显示。
x,y → 若aspect ratio为user,x、y表示图片显示的起始点。
[section_name] → 用来区分两个LOGO,如:
SigmaStar # bootlogo 0 0 0 0 LOGO
2.1.2. VGA输出配置¶
Uboot menuconfig同HDMI配置。
config.ini需要修改为VGA type,例如:
[LOGO] m_eDeviceType = 3; #0 None, 1 LCD, 2 HDMI, 3 VGA m_sParaTarget = DACOUT_1080P_60 m_wDispWidth = 1280 m_wDispHeight = 800 m_wDispFps = 60 m_sLogoFile0 = sigmastar1024_600.jpg m_sLogoFile1 = upgrade.jpg
2.1.3. CVBS输出配置¶
Uboot menuconfig同HDMI配置。
config.ini需要修改为CVBS type,例如:
[LOGO] m_eDeviceType = 4; #0 None, 1 LCD, 2 HDMI, 3 VGA 4 CVBS m_sParaTarget = DACOUT_1080P_60 m_wDispWidth = 720 m_wDispHeight = 480 m_wDispFps = 30 m_sLogoFile0 = sigmastar720_480.jpg m_sLogoFile1 = upgrade.jpg
目录misc中的图片尺寸也要跟上面设定尺寸一致。
2.1.4. HDMI/VGA+CVBS同时输出配置¶
Uboot menuconfig同HDMI配置。
config.ini中增加LOGO1的配置参数。LOGO/LOGO1可以任意定义显示HDMI/VGA,还是CVBS [LOGO]。
[LOGO] m_eDeviceType = 4; #0 None, 1 LCD, 2 HDMI, 3 VGA m_sParaTarget = DACOUT_1080P_60 m_wDevId = 0 m_wDispWidth = 720 m_wDispHeight = 576 m_wDispFps = 25 m_sLogoFile0 = sigmastar720_576.jpg m_sLogoFile1 = upgrade.jpg [LOGO1] m_eDeviceType = 3; #0 None, 1 LCD, 2 HDMI, 3 VGA m_sParaTarget = DACOUT_1080P_60 m_wDevId = 1 m_wDispWidth = 1920 m_wDispHeight = 1080 m_wDispFps = 60 m_sLogoFile0 = sigmastar1024_600.jpg m_sLogoFile1 = upgrade.jpg
bootcmd需要增加bootlogo cmd参数 [section_name]用来区分两个LOGO:
bootlogo [logo_id] [aspect ratio '0: zoom' '1: center' '2: usr'] [x] [y] [section_name]
如:
bootcmd=bootlogo 0 0 0 0 LOGO;bootlogo 0 0 0 0 LOGO1;
可自行在image\configs\m6\script_nand.mk中修改自动增加LOGO1的bootcmd。
@echo setenv bootcmd \' $(if $(findstring misc,$(IMAGE_LIST)),bootlogo 0 0 0 0 LOGO\;) $(if $(findstring misc,$(IMAGE_LIST)),bootlogo 0 0 0 0 LOGO1\;) $(kernel$(BOOTCMD)) $(rootfs$(BOOTCMD)) bootm $(KERNELBOOTADDR)\;$(kernel$(BOOTREC)) $(rootfs$(BOOTREC)) bootm $(KERNELBOOTADDR) >> $(SCRIPTDIR)/set_config
Nor flash与上述操作一致,使用mercury6p_demo_defconfig这个config。
2.2. Kernel¶
通过make menuconfig打开FUSE:

以上设置完成并升级后可以看到board misc路径下有如下文件:

默认情况下spi nand用的是mercury6p_ssc025a_s01a_demo_spinand_defconfig,该选项默认打开状态。
2.3. project¶
-
需要注意config.ini的打包配置,config.ini实际对应代码里面project\board\m6p\SSC025A-S01A\config\config.ini,所有对LOGO显示的配置都集中在INI的"LOGO"的section中:
[LOGO] m_eDeviceType = 2; #0 None, 1 LCD, 2 HDMI, 3 VGA, 4 CVBS m_sParaTarget = SAT070AT50H18BH m_wDevId = 0; m_wDispWidth = 1920 m_wDispHeight = 1080 m_wDispFps = 60 m_sLogoFile0 = sigmastar1024_600.jpg m_sLogoFile1 = upgrade.jpg m_sPQFile0 = PQ.bin
m_eDeviceType:表示需要显示LOGO的设备类型。
m_sParaTarget:显示的屏参section索引,只有LOGO设备类型为LCD时才会生效。
m_wDispWidth,m_wDispHeight,m_wDispFps:当显示设备为非LCD类型时,这些参数才有意义,表示的是HDMI/VGA输出的timming。
m_sLogoFile0,m_sLogoFile1:LOGO的id所对应的jpeg文件。
INI文件修改完成后重启生效。
-
添加bootlogo cmd到boot env
Project\image\script.mk中:
@echo setenv bootcmd \’ dcache on \; $(if $(findstring misc,$(IMAGE_LIST)),bootlogo 0 0 0 0 LOGO\;) $(kernel$(BOOTCMD)) $(rootfs$(BOOTCMD))
-
Project/image/configs/general/spinand.squashfs.partition.config
由于打开bootlogo相关配置,导致uboot变大,可能会超过原本设定的分区大小,所以要适当加大下uboot分区比如:

misc 默认分区类型为fwfs,config.ini为只读模式,可以修改成RW方式。
misc$(RESOUCE) = $(OUTPUTDIR)/misc misc$(FSTYPE) = fwfs misc$(PATSIZE) = 0x100000 misc$(PATNAME) = MISC misc$(MOUNTTG) = /misc misc$(OPTIONS) = rw misc$(MOUNTPT) = /dev/mtd6 misc$(MTDPART) = $(misc$(PATSIZE))(MISC) misc$(OTABLK) = /dev/mtd6
3. 其它设置¶
3.1. 分配bootlogo使用的buffer size¶
以上配置设置好了之后,烧写image,断电上电,按住enter键进入uboot,先printenv检查bootargs,需要手动在原有的bootargs基础上加入bootlogo所用到的logo图片显示buffer,默认的LX_MEM=0x80000000,建议在内存最后位置来分配bootlogo所需要的buffer size,目前测试时候是分配了2M,即如下:
mmap_reserved=fb,miu=0,sz=0x200000,max_start_off=0x7FE00000,max_end_off=0x80000000
设置完成之后,saveenv保存。例如:
setenv bootargs ubi.mtd=ubia,2048 root=/dev/mtdblock5 rootfstype=squashfs ro init=/linuxrc LX_MEM=0x80000000 mma_heap=mma_heap_name0,miu=0,sz=0x40000000 mma_heap=mma_heap_fb,miu=0,sz=0x1000000 mma_memblock_remove=0 mmap_reserved=fb,miu=0,sz=0x200000,max_start_off=0x7FE00000,max_end_off=0x80000000 cma=2M@0x1004000000 mtdparts=nand0:1664k@1280k(BOOT),1664k(BOOT_BAK),256k(ENV),5m(KERNEL),5m(RECOVERY),6m(rootfs),1m(MISC),108800k(ubia)
然后可以手动开启icahe和dcahe来加快显示速度,即输入命令:
icahe on; dcahe on
最后输入bootlogo指令进行显示即可:
bootlogo 0 0 0 0 LOGO
3.2. 升级UI显示¶
在uboot中需要打开 SSTAR UPGRADE UI,此命令依赖于SSTAR RGN、SSTAR DISP。
也可通过bootlogo cmd测试。
Uboot修改后请重新编译后手动Release更新后的u-boot_spinand.xz.img.bin到project/board/m6p/boot/spinand/uboot对应板子的路径下,更名为u-boot_demo_spinand.xz.img.bin再到project下重新make image打包烧录。