ULOG使用参考
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 09/11/2025 |
1. 概述¶
本文档介绍了SigmaStar平台ULOG功能的使用方法。ULOG是Uart Log的缩写,该模块可以将U-Boot的串口日志保存到emmc里。当U-Boot发生异常时,可以将日志数据dump出来协助debug。
2. 功能描述¶
ULOG功能,可以将U-Boot的串口日志保存到emmc的某个指定分区中。该模块运行时,会将uart log先保存到内存buffer中,在满足下列条件之一时会将buffer里的数据写入emmc:
-
条件1:当buffer里的数据超过指定的size时
-
条件2:当U-Boot处于console空闲状态的时间超过指定的timeout时
此外,也可以调用特定API来主动将buffer里的数据立刻写入emmc。
请注意:由于U-Boot是单线程且没有中断的,如果U-Boot在执行某个task时卡死,一段时间后被watchdog reset,这种情况下卡死前的日志无法写入emmc中。可以在执行关键task后主动调用ulog_flush()将buffer中的日志写入emmc。
当日志写满ULOG分区时,会自动从ULOG分区开头位置以覆盖旧数据的方式继续写入新日志数据。
3. U-Boot用法介绍¶
3.1. U-Boot Config配置¶
在编译U-Boot时需要选择的配置如下:
make menuconfig # [*] SigmaStar drivers ---> # [*] SigmaStar Uart Log Driver ---> # [*] Ulog Default Status On # (ulog) Ulog Partition Name # (512) Ulog Flush Size (byte) # (100) Ulog Flush Timeout (ms) # Command line interface ---> # SigmaStar common commands ---> # -*- ulog # General setup ---> # -*- Enable malloc() pool before relocation # (0x4000) Size of malloc() pool before relocation
配置项说明:
| CONFIG | 说明 |
|---|---|
| CONFIG_SSTAR_ULOG | ULOG模块的总开关 |
| CONFIG_SSTAR_ULOG_DEFAULT_ON | U-Boot启动时ULOG功能的默认状态(开启/关闭) |
| CONFIG_SSTAR_ULOG_PARTITION_NAME | 保存U-Boot日志的分区名 |
| CONFIG_SSTAR_ULOG_FLUSH_SIZE | 日志buffer超过多大会自动写入emmc |
| CONFIG_SSTAR_ULOG_FLUSH_TIMEOUT | U-Boot处于console空闲状态超时多久会自动写入emmc |
| CONFIG_CMD_SSTAR_ULOG | 是否使能U-Boot命令行ulog命令 |
| CONFIG_SYS_MALLOC_F | 是否使能early malloc()功能 |
| CONFIG_SYS_MALLOC_F_LEN | early malloc() pool的大小,ULOG功能需要至少0x1000字节 |
3.2. U-Boot命令行参考¶
| 命令 | 功能 |
|---|---|
| ulog enable | 开启ULOG功能,后面的U-Boot日志会写入emmc |
| ulog disable | 关闭ULOG功能,后面的U-Boot日志不会写入emmc |
3.3. U-Boot API参考¶
| API名 | 功能 |
|---|---|
| ulog_enable | 开启ULOG功能 |
| ulog_disable | 关闭ULOG功能 |
| ulog_flush | 将buffer里的日志数据立刻写入emmc |
3.3.1. ulog_enable¶
-
功能
开启ULOG功能,后面的U-Boot日志会写入emmc。
-
语法
ulog_enable();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/ulog/drv_ulog.h
-
注意
无
3.3.2. ulog_disable¶
-
功能
关闭ULOG功能,后面的U-Boot日志不会写入emmc。
-
语法
ulog_disable();
-
形参
无
-
返回值
无
-
依赖
- 头文件:drivers/sstar/ulog/drv_ulog.h
-
注意
无
3.3.3. ulog_flush¶
-
功能
将buffer里的日志数据立刻写入emmc
-
语法
ret = ulog_flush();
-
形参
无
-
返回值
-
0: 表示成功地将buffer里的所有日志数据写入emmc。
-
-1: 表示buffer里没有日志数据需要写入emmc。
-
-
依赖
- 头文件:drivers/sstar/ulog/drv_ulog.h
-
注意
无
4. 新增ULOG分区¶
ULOG分区的名字要和U-Boot中CONFIG_SSTAR_ULOG_PARTITION_NAME的值相同。CONFIG_SSTAR_ULOG_PARTITION_NAME的默认值是"ulog"。
在分区配置文件中新增ulog分区
-
修改IMAGE_LIST
IMAGE_LIST = boot riscvfw kernel rootfs misc miservice pstore vendor_storage ulog customer
-
新增ulog分区
# ulog ulog$(FSTYPE) = ulog ulog$(PATSIZE) = 0x200000 ulog$(PATNAME) = ulog ulog$(MOUNTTG) = /dev/mmcblk0p8
5. Dump日志数据¶
5.1. Dump方法¶
当U-Boot发生异常时,可以将U-Boot日志数据从ULOG分区中dump出来,协助debug。下面介绍dump的步骤:
Step 1. 确定ULOG分区在emmc中的位置。可以在U-Boot里执行mmc part命令来查看:

上图显示ULOG分区(即ulog分区)在emmc中的起始地址是1070080,分区size是2MB。
Step 2. 使用Flash Tool将ULOG分区的数据dump到本地PC:
请注意:dump前要先关闭SoC的串口(U-Boot下敲"debug"并按回车,Linux下敲"11111"),并且断开PC的终端连接(Xshell/MobaXterm)。

Dump成功的界面如下图所示:

Dump成功后,数据会保存在Flash Tool目录里的EMMC_DATA_UDA.bin文件里。
Step 3. 使用strings命令将数据转换成文本文档
strings EMMC_DATA_UDA.bin > log.txt
5.2. 日志内容格式¶
ULOG功能会在每份U-Boot日志里添加一个id,用来标记日志的产生时间顺序。每次U-Boot启动该id会自动加一。用strings命令转换出来的文本文档,第一行的"LASTULOG:XXXXXX"记录了最新的日志id,方便开发人员快速定位到最新的日志。
