Bootstrap

解决QCM6125 UEFI XBL开机Logo文件太大导致XBL编译失败的问题

报错如下

Generate Region at Offset 0x0

   Region Size = 0x200000

   Region Name = FV

Generating FVMAIN_COMPACT FV

###

Generating FVMAIN FV

#########

Generating IMAGEFV FV

Generating IMAGEFV_COMPACT FV

#Return Value = 2

GenFv: ERROR 3000: Invalid

  the required fv image size 0x32e8 exceeds the set fv image size 0x2000

在MSM8953 LK Bootloader中使用splash.img保存开机Logo,由于splash.img镜像使用压缩算法,所以即使是1920x1080 24bpp的开机Logo源文件转化为splash.img镜像也不会超过splsah分区大小。但是在QCM6125 UEFI XBl中,开机Logo只支持8-bit BMP 24-bit BMP 32-bit BMP 8-bit indexed BMP这四种格式,并且不支持压缩(参考boot_images/QcomPkg/Docs/CustomSplashLogo.txt),导致开机Logo源文件在比较大时会出现一些问题。如果对于颜色要求不高,可以使用8-bit BMP文件代替24/32-bit BMP,或者使用小尺寸的开机Logo代替大尺寸的开机Logo。如果这两种方法都无法满足要求的话,可以采用以下方案满足大尺寸开机Logo的需求

首先确定imagefv分区的大小

console:/ # ls /dev/block/by-name/imagefv_* -l

lrwxrwxrwx 1 root root 16 1970-01-01 08:32 /dev/block/by-name/imagefv_a -> /dev/block/sde18

lrwxrwxrwx 1 root root 16 1970-01-01 08:32 /dev/block/by-name/imagefv_b -> /dev/block/sde37

console:/ # cat /proc/partitions

major minor  #blocks  name

 259        2       2048 sde18

 259       21       2048 sde37

可见imagefv分区大小为2048K,所以当前imagefv.elf镜像大小不能超过2048K

boot_images/QcomPkg/SocPkg/NicobarPkg/LAA/ImageFv.fdf.inc

[FV.IMAGEFV_COMPACT]

BlockSize          = 0x200

NumBlocks          = 0x10

0x200 * 0x10 = 0x2000 = 8192 = 8K

生成的imagefv.elf镜像大小为20k(还包含其他logo文件)

修改为

[FV.IMAGEFV_COMPACT]

BlockSize          = 0x200

NumBlocks          = 0xF00

0x200 * 0xF00 = 0x1E 0000 = 1966080 = 1920K < 2048K

生成的imagefv.elf镜像大小为1978368=1932K(还包含其他logo文件)

此时开机Logo源文件可以支持更大的尺寸

如果此时开机Logo大小仍然不能满足要求,可以同时调整NumBlocks大小和imagefv分区大小

;