一、问题现象

从导出的/dev/logfs中的UefiLog日志中存在乱码,且日志不全

乱码

C3F项目正常、C3F2项目异常

二、问题分析

  1. 从现象来看存在的乱码其实是‘0’,所以有可能是因为初始化的log buffer过大 大于实际的log buffer size,导致初始化的补0 打印了出来

  2. 数据乱序

    line 88: B -  24877312 - Bootup frequency set to 1555200
    下一句日志跑到了第一行
    line 1 : 5937 - do_ddr_training, Delta
    
    

下面从以上两个怀疑点验证问题

2.1 怀疑XBL log buffer size设置异常

xbl log buffer size
memoryMap中的xbl log buffer

2.1.1 follow C3F项目

从C3F2的代码来看,当前有问题的版本关于XBL log buffer的初始化 走在了静态分配的函数里,我check了C3F项目的代码,发现C3F走在了132行里面,故更改逻辑让代码走入132行

https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/723596

删除memorymap中的xbl log buffer

验证结果:现象一致,排除

2.1.2 增大XBL Log buffer

https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/720217/2

增大xbl log buffer

验证结果:现象一致,排除

2.1.2 减少XBL Log buffer

https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/720217/3

减少xbl log buffer

验证结果:现象一致,排除

2.2.3 改为动态分配XBL log buffer

https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/721722

验证结果:现象一致,排除

2.2 怀疑SBL log buffer初始化过小

SBL Log buffer初始化大小

初始化流程不详细介绍,主要是这块,受SCL_SBL1_BOOT_LOG_BUF_SIZE控制

C3F2:

C3F2项目的SBL BOOT log buffer size

C3F:

C3F项目SBL BOOT log buffer size

同时,复制正常C3F SBL阶段到ddr_training的log 保存到一个新文件,可以得到这个阶段的log正好为4KB,看起来确实是因为限制了size为4KB 导致超过4KB大小的sbl log从开头开始覆盖了。

4KB

change: https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/724392/2

更改为SIZE_8KB

验证结果:进EDLmode 长按电源键开机也是直接进EDLmode,没有串口log输出

change: https://gerrit.odm.mioffice.cn/c/platform/vendor/qcom/non-hlos/+/724392

更改为SIZE_6KB

验证结果:正常开机,导出的UefiLog0.txt无乱序问题

修复方案的uefi开头日志

修复方案的中间日志

尽管打开还有乱码,但是log已经没有出现丢失,覆盖等现象。下方为对应的串口输出

串口日志