MI调试手册

Version 1.2


1. 概述

使用Linux下的porc文件系统,可以打印出各个模块当前的运行状态,便于调试及分析问题。每个模块都自己特定的路径,部分模块有额外的echo命令。

路径: /proc/mi_modules

表1-1 文件清单

模块名称 说明
SYS SYS模块的信息
AI 音频输入的信息
AO 音频输出的信息
VIF 视频输入的信息
VPE 视频处理引擎的信息
VENC 编码视频的信息
DIVP 去隔行/图像引擎的信息
VDISP 虚拟显示模块的信息
DISP 显示模块的信息
HDMI HDMI的信息
FB Graphic图形层的信息
GFX 图像引擎的信息
REGION OSD的信息
VDEC 解码视频的信息

2. SYS


2.1. common

2.1.1. dump_mmap

  • 调试信息

    # ./config/dump_mmap
    

    图2-1

  • 调试信息分析

    Common下的内容存放的是配置API,之所以会有配置API,有两个目的:

    1. 把iniparser放在用户态做,iniparser的任何开销不带入内核。

    2. 方便调试时确认配置文件的实际内容,因为在parser时打印的内容可能会与实际设置的内容有偏差

    为了达到上面两个目的,导出了一些文件。

    如下是导入config的配置文件:

    图2-2

    Systeminfo.c里面parse好的struct写入config_info里面。

    Pqloader.c里面parse好的struct写入pq_info和*_table里面,这里的table跟MISDK里面的那一份不一样的一点是这里的table是连续的内存摆放,MISDK是一个间接数组指向一列一维数组。

    如下是导入mmap的配置文件:

    图2-3

    Mmapinfo.c里面parse好的struct写入mmap_info和memory_info,因为这里比较简单,所以从mmap_info和memory_info读出来是格式化好的可读信息。

2.1.2. dump_config

  • 调试信息

    # ./config/dump_config
    
    panel size:24
    DBC Value=
            55,30,10
            254,66,0
            72,80,72
    start dump [motion_table](6, 8)
    {0xe8,0xcd,0xab,0x89,0x67,0x45,0x23,0x00,}
    {0xd8,0xbc,0x9a,0x78,0x56,0x34,0x12,0x00,}
    {0xc8,0xab,0x89,0x67,0x45,0x23,0x01,0x00,}
    {0xb8,0x9a,0x78,0x56,0x34,0x12,0x00,0x00,}
    {0xa8,0x89,0x67,0x45,0x23,0x01,0x00,0x00,}
    {0x98,0x78,0x56,0x34,0x12,0x00,0x00,0x00,}
    end dump
    start dump [motion_hdmi_dtv_table](4, 8)
    {0x68,0x45,0x23,0x01,0x00,0x00,0x00,0x00,}
    {0xa8,0x89,0x67,0x45,0x23,0x01,0x00,0x00,}
    {0xc8,0xab,0x89,0x67,0x45,0x23,0x01,0x00,}
    {0xe8,0xcd,0xab,0x89,0x67,0x45,0x23,0x00,}
    end dump
    start dump [motion_comp_pc_table](4, 8)
    {0x68,0x45,0x23,0x01,0x00,0x00,0x00,0x00,}
    {0x98,0x78,0x56,0x34,0x12,0x01,0x00,0x00,}
    {0xa8,0x89,0x67,0x45,0x23,0x12,0x01,0x00,}
    {0xb8,0x9a,0x78,0x56,0x34,0x12,0x01,0x00,}
    end dump
    start dump [misc_param_table](4, 4)
    {0x02,0xff,0x00,0x00,}
    {0x02,0xff,0x01,0x66,}
    {0x03,0x88,0x01,0x66,}
    {0x03,0xaa,0x01,0x66,}
    end dump
    start dump [misc_luma_table](8, 2)
    {0x33,0x08,}
    {0x33,0x07,}
    {0x22,0x06,}
    {0x22,0x05,}
    {0x11,0x04,}
    {0x11,0x03,}
    {0x00,0x02,}
    {0x00,0x01,}
    end dump
    start dump [noise_table](6, 8)
    {0x67,0x45,0x34,0x23,0x12,0x01,0x00,0x00,}
    {0xab,0x89,0x67,0x45,0x23,0x12,0x01,0x00,}
    {0xbc,0x9a,0x78,0x56,0x34,0x23,0x01,0x00,}
    {0xde,0xbc,0x9a,0x78,0x56,0x34,0x12,0x00,}
    {0xef,0xcd,0xab,0x89,0x67,0x45,0x23,0x00,}
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
    end dump
    start dump [misc_table](6, 15)
    {0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0xc0,0x9f,0x00,0x01,0x66,}
    {0x10,0x01,0xc1,0xc1,0xc1,0x04,0x09,0x1f,0x03,0x88,0xc0,0x9f,0x00,0x01,0x66,}
    {0x21,0x02,0xc2,0xc2,0xc2,0x08,0x09,0x1f,0x03,0x99,0x00,0x00,0x00,0x01,0x88,}
    {0x31,0x04,0xc2,0xc2,0xc2,0x0a,0x09,0x1f,0x03,0xaa,0x00,0x00,0x00,0x01,0xaa,}
    {0x41,0x06,0xc3,0xc3,0xc3,0x10,0x19,0x1f,0x03,0xbb,0x00,0x00,0x14,0x01,0xbb,}
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
    end dump
    
  • 调试信息分析

    ./config/dump_config得到的是/proc/mi_modules/common/里各文件的信息,含panel size、DBC Value、motion_table、motion_hdmi_dtv_table、motion_comp_pc_table、misc_param_table、misc_luma_table、noise_table、misc_table等。


2.2. mi_log_info

2.2.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_log_info
    
    ---------------- Log Path ------------------------
    log path:  
    ---------------- Store Path ----------------------
    store path:  /mnt
    ---------------- Module Log Level ----------------
    Log module        Level
    --------------------------
    mi_ive            2(WRN)
    mi_vdf            2(WRN)
    mi_venc           2(WRN)
    mi_rgn            2(WRN)
    mi_ai             2(WRN)
    mi_ao             2(WRN)
    mi_vif            2(WRN)
    mi_vpe            2(WRN)
    mi_vdec           2(WRN)
    mi_sys            2(WRN)
    mi_fb             2(WRN)
    mi_hdmi           2(WRN)
    mi_divp           2(WRN)
    mi_gfx            2(WRN)
    mi_vdisp          2(WRN)
    mi_disp           2(WRN)
    mi_os             2(WRN)
    mi_iae            2(WRN)
    mi_md             2(WRN)
    mi_od             2(WRN)
    mi_shadow         2(WRN)
    
  • 调试信息分析

    示意了默认的log pathstore path,同时示意了各module的debug_level的值。

  • 参数分析

    表2-1

    参数 描述
    mi_log_info log path 暂时无效果
    store path 暂时无效果
    Log module 各个模块的名称
    Level 打印等级

2.2.2. echo

表2-2

功能 修改模块debug_level
命令 echo [ModID]=[Level] > /proc/mi_modules/mi_log_info
[ModID] 模块的名字
mi_ive mi_vdf mi_venc mi_rgn mi_ai mi_ao mi_vif mi_vpe mi_vdec mi_sys mi_fb mi_hdmi mi_divp mi_gfx mi_vdisp mi_disp mi_os mi_iae mi_md mi_od mi_shadow
参数说明 [Level] 0 无Debug信息 1 只显示error的信息 (MI_DBG_ERR) 2 只显示waring的信息 (MI_DBG_WRN) 3 只显示 info 的信息 (MI_DBG_INFO) 4 显示所有信息
举例 echo mi_sys=2 > /proc/mi_modules/mi_log_info 将mi_sys 的debug_level修改为2

表2-3

功能 修改log的路径
命令 echo log=[Path] > /proc/mi_modules/mi_log_info
参数说明 [Path] 路径
举例 echo log=/mnt > /proc/mi_modules/mi_log_info

表2-4

功能 修改存储log的路径
命令 echo storepath=[Path] > /proc/mi_modules/mi_log_info
参数说明 [Path] 路径
举例 echo storepath=/mnt > /proc/mi_modules/mi_log_info

2.3. mi_global_info

2.3.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_global_info
    
    miu_and_lx_info:
    ARM_MIU0_BUS_BASE 0x20000000        ARM_MIU0_BASE_ADDR 0x0
    ARM_MIU1_BUS_BASE 0x60000000        ARM_MIU1_BASE_ADDR 0x80000000
    ARM_MIU2_BUS_BASE 0xffffffff            ARM_MIU2_BASE_ADDR 0xffffffff
    lx_mem_addr  0x20c00000         lx_mem_size  0xe300000
    lx_mem2_addr 0xffffffff             lx_mem2_size 0xffffffff
    lx_mem3_addr 0xffffffff             lx_mem3_size 0xffffffff
    
    KernelProtect IP white list:
    clientId    name
                43                   MIU_CLIENT_MIPS_RW
                50                   MIU_CLIENT_NAND_RW
                82              MIU_CLIENT_USB_UHC0_RW
                83              MIU_CLIENT_USB_UHC1_RW
                84              MIU_CLIENT_USB_UHC2_RW
                18                    MIU_CLIENT_G3D_RW
            140                   MIU_CLIENT_USB3_RW
            129                   MIU_CLIENT_SDIO_RW
            165                   MIU_CLIENT_SATA_RW
            133              MIU_CLIENT_USB_UHC3_RW
            225               MIU_CLIENT_USB30_1_RW
            226               MIU_CLIENT_USB30_2_RW
                5                   MIU_CLIENT_BDMA_RW
                14                   MIU_CLIENT_EMAC_RW
    
    PAGE_OFFSET - the virtual address of the start of the kernel image
    PAGE_OFFSET=0xc0000000
    TASK_SIZE - the maximum size of a user space task
    TASK_SIZE=0xbf000000
    MStar SDK version: commit.build_time 0be783c.2017121315
    CHIP_VERSION  U02
    
  • 调试信息分析

    该调试信息提供了全局global的一些信息。

  • 参数分析

    表2-5

    参数 描述
    miu_and_lx_info(以只有一个MIU为例) ARM_MIU0_BUS_BASE Miu0 bus base
    ARM_MIU0_BASE_ADDR Miu0 base addr
    lx_mem_addr Linux镜像占的memory的起始地址(属于cpu bus address)
    lx_mem_size Linux镜像占的memory的size
    kernelProtect IP white list clientId Miu protect的IP白名单里的IP的id(从未分group的角度看的全局的id)
    name 与clientId对应的该IP的实际的名字
    MStar SDK version: commit.build_time commit sdk对应的commit
    build_time sdk的build时间
    CHIP_VERSION CHIP_VERSION 当前chip的版本,版本号是U01,U02,U03…


2.4. mi_bufqueue_status

2.4.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_bufqueue_status
    
    dump Queues in input port only for enabled port:
    
    ModId DevId ChnId PassId InPortId UsrInjectQ_cnt BindInQ_cnt
    
    12 0 0 0 0 0 0 0
    
    dump Queues in output port only for enabled port:
    
    ModId DevId ChnId PassId OutPortId DrvBkRefFifoQ_cnt DrvBkRefFifoQ_size
    UsrGetFifoQ_cnt
    
    12 0 0 0 0 0 0 0 0
    
  • 调试信息分析

    Dump当前各modules的enable input/output port 相关Queue的信息。

  • 参数分析

    表 2‑6

    参数 描述
    dump Queues in input port(only dump enabled Input port) ModId 该input port所在的module id
    DevId 该input port所在的device id
    ChnId 该input port所在的channel id
    PassId 该input port所在的pass id
    InPortId 该input port的id
    UsrInjectQ_cnt 该InputPort 里的UsrInjectBufQueue里的buff的总的size
    BindInQ_cnt 该InputPort 里的UsrPipeInBufQueue里的buff的总的size
    InputPendingQueueSize 该InputPort 里的WorkingQueue里的buff的总的size
    dump Queues in output port(only dump enabled output port) ModId 该output port所在的module id
    DevId 该output port所在的device id
    ChnId 该output port所在的channel id
    PassId 该output port所在的pass id
    OutPortId 该output port的id
    DrvBkRefFifoQ_cnt 该OutputPort的DrvBkRefFifoQueue里的buffer数目
    DrvBkRefFifoQ_size 该OutputPort的DrvBkRefFifoQueue里的buffer的总size
    UsrGetFifoQ_cnt 该OutputPort的UsrGetFifoBufQueue里的buffer数目


2.5. debug_level

2.5.1. cat/echo

  • 调试信息

    # cat /proc/mi_modules/mi_sys/debug_level
    
    2
    
  • 调试信息分析

    每个module(包括sys这个module)都有各自的debug level,是为了控制打印级别,各自的打印级别分别在/proc/mi_modules/mi_modulename/debug_level控制,其中modulename形如disp,divp,rgn等等。上面只是以/proc/mi_modules/mi_sys/debug_level为例。

    表 2‑7

    功能 打印警告级别
    命令 cat /proc/mi_modules/[ModuleName]/debug_level
    参数说明 [ModuleName] 模块的名字 mi_disp mi_gfx mi_rgn mi_vdec mi_vpe mi_ai mi_divp mi_shadow mi_vdisp mi_ao mi_hdmi mi_sys mi_venc mi_bar mi_vif
    举例 cat /proc/mi_modules/mi_sys/debug_level 2 mi_sys 的警告级别为2(只显示waring的信息)

    表 2‑8

    功能 修改警告级别
    命令 echo [Level] > /proc/mi_modules/[ModuleName]/debug_level
    参数说明 [Level] 0 无Debug信息 1 只显示error的信息 (MI_DBG_ERR) 2 只显示waring的信息 (MI_DBG_WRN) 3 只显示 info 的信息 (MI_DBG_INFO) 4 显示所有信息
    [ModuleName] 模块的名字 mi_disp mi_gfx mi_rgn mi_vdec mi_vpe mi_ai mi_divp mi_shadow mi_vdisp mi_ao mi_hdmi mi_sys mi_venc mi_bar mi_vif
    举例 echo 1 > /proc/mi_modules/mi_vdec/debug_level 将mi_vdec 模块的警告级别修改为只显示error的信息

2.6. miu_protect

2.6.1. cat

  • 调试信息

    cat /proc/mi_modules/mi_sys_mma/miu_protect
    
    =================== start miu_protect_info ================================
    
    kernel protect enabled
    
    LX :
    
    cpu_start_addr:0x20c00000 size:0xe300000
    
    miu_index miuBlockIndex start_cpu_bus_pa length
    
    0x0 0x00 0x20c00000 0x460000
    
    KernelProtect IP white list:
    
    clientId name
    
    43 MIU_CLIENT_MIPS_RW
    
    50 MIU_CLIENT_NAND_RW
    
    82 MIU_CLIENT_USB_UHC0_RW
    
    83 MIU_CLIENT_USB_UHC1_RW
    
    84 MIU_CLIENT_USB_UHC2_RW
    
    18 MIU_CLIENT_G3D_RW
    
    140 MIU_CLIENT_USB3_RW
    
    129 MIU_CLIENT_SDIO_RW
    
    165 MIU_CLIENT_SATA_RW
    
    133 MIU_CLIENT_USB_UHC3_RW
    
    225 MIU_CLIENT_USB30_1_RW
    
    226 MIU_CLIENT_USB30_2_RW
    
    5 MIU_CLIENT_BDMA_RW
    
    14 MIU_CLIENT_EMAC_RW
    
  • 调试信息分析

    该命令显示了miu protect相关的信息。

  • 参数分析

    表 2‑9

    参数 描述
    kernel protect 值是enabled或者disabled,表示是否有enable kernel protect,默认是需要enable kernel protect的。
    LX(以只有一个LX为例,LX表示linux 镜像对应的memory) cpu_start_addr 该LX对应的起始CPU addr。
    size 该LX对应的size。
    某个kernel protect 的range的相关信息 miu_index 编号。
    miuBlockIndex 总共4个miu范围的编号信息。
    start_cpu_bus_pa 该range的起始cpu bus addr。
    length 该range的length。
    KernelProtect IP white list clientId Miu protect的IP白名单里的IP的id(从未分group的角度看的全局id)。
    name 与clientId对应的该IP的实际的名字。

2.7. mma_help_name

2.7.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/mma_heap_name0
    
    mma heap name heap_base_cpu_bus_addr length chunk_m