DFX子系统

    由于芯片平台资源有限,且硬件平台多样,因此需要针对不同硬件架构和资源提供组件化且可定制的DFX框架。根据RISC-V、Cortex-M、Cortex-A不同硬件平台,提供两种不同的轻量级DFX框架,以下简称mini、featured。

    • mini框架:针对处理架构为Cortex-M或同等处理能力的硬件平台,系统内存一般低于512KB,无文件系统或者仅提供一个可有限使用的轻量级文件系统,遵循CMSIS接口规范。

    • featured框架:处理架构为Cortex-A或同等处理能力的硬件平台,内存资源大于512KB,文件系统完善,可存储大量数据,遵循POSIX接口规范。

    目录

    表 1 轻量级DFX子系统源代码目录结构

    mini框架整体代码使用标准C开发,对外的接口依赖统一通过util封装,如软硬件平台不同需要适配,需要在vendor下实现适配处理。

    使用-mini框架

    DFX-mini是一套简单小巧的DFX设计,对外提供log功能:

    • 以下以A模块为例说明如何添加模块并进行日志打印。

      1. 第一步添加模块ID

        在interfaces/kits/hilog_lite/hiview_log.h的HiLogModuleDef中添加HILOG_MODULE_A定义。

      2. 第三步调整DFX框架静态配置

        的g_hiviewConfig全局参数配置。默认情况下不用修改,日志默认输出到串口。

      3. 第四步日志打印

        在需要打印日志的.c文件中 #include “log.h”,调用如下接口:

        HILOG_INFO(HILOG_MODULE_SAMGR, “log test: %d”, 88);

        接口参数说明:

    DFX featured框架提供完整的DFX特性,对外提供log接口:

    Native C/C++接口

    hilog 可用API

    使用介绍

    首先需要定义TAG,DOMAIN需要找DFT申请,未经申请的DOMAIN,日志打印不出来。

    本地调试,可以临时使用domain数值 0。

    包含头文件:#include

    在BUILD.gn中添加依赖库 libhilog。

    接口规则介绍:

    1. 格式化字符串默认是非隐私 HILOGI(“Hello World\n”); >> Hello World

    2. 格式化参数默认是隐私 HILOGI(“Age is %d\n”, 10); >> Age is

    3. %{private}标识的参数是隐私 HILOGI(“Age is %{private}d\n”, 10); >> Age is

    4. %{public}标识的参数是非隐私 HILOGI(“Age is %{public}d\n”, 10); >>Age is 10

    接口参数介绍

    日志查看

    1. debug版本hilog日志会保存到/storage/data/log/hilogs 目录下面。

    2. 可以执行hilogcat实时查看hilog日志。

    日志系统架构

    1. hilogtask流水日志的内核任务。

      • 此功能是一个linux内核的任务或者线程,在系统启动时初始化。
      • 当用户态调用日志接口,将格式化好的日志内容通过ioctl调用写入驱动节点,驱动节点再将日志内容发送到hilogtask,hilogtask将日志内容存储到环形缓冲区中。
    2. hilogcatd用户态日志存储服务。

      • 这是一个用户态的进程,负责定时将内核的ringbuffer读取出来,存储到日志文件中。
      • 日志文件输出支持gzip压缩,使用zlib
      • 每个类型的ringbuffer分开存储。
      • 存储文件的单个文件大小,文件个数可在编译时配置。
    3. hilogcat日志查看命令行工具。

      从内核驱动接口读取ringbuffer内容,输出到标准输出。

    4. 支持日志缓冲区可配置。

      • 编译时可以配置日志缓冲区的大小。
      • 编译时可以指定日志缓冲区的类型,类型个数就是ringbuffer的个数。

    涉及仓

    hiviewdfx_frameworks_hievent_lite

    hiviewdfx_frameworks_ddrdump_lite

    hiviewdfx_frameworks_hilog_lite

    hiviewdfx_interfaces_innerkits_hilog

    hiviewdfx_interfaces_innerkits_hievent_lite

    hiviewdfx_interfaces_kits_hilog

    hiviewdfx_interfaces_kits_hilog_lite

    hiviewdfx_services_hiview_lite

    hiviewdfx_utils_lite