SYS模块调试

Version 1.3


1. common

1.1. dump_mmap

  • 调试信息

    # ./config/dump_mmap
    

  • 调试信息分析

    Common下存放的是配置API,目的如下:

    1. 在用户态做iniparser,不进入内核。

    2. 便于调试时确认配置文件的内容,避免在parser时打印的内容与实际设置偏差。

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

    Systeminfo.c内parse的struct写入config_info。

    Pqloader.c内parse的struct写入pq_info和*_table,此处的table是连续的内存摆放,MISDK是一个间接数组指向一列一维数组。

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

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

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. mi_log_info

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,同时说明了各模块的debug_level的值。

  • 参数分析

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

2.2. echo

功能 修改模块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
功能 修改log的路径
命令 echo log=[Path] > /proc/mi_modules/mi_log_info
参数说明 [Path] 路径
举例 echo log=/mnt > /proc/mi_modules/mi_log_info
功能 修改存储log的路径
命令 echo storepath=[Path] > /proc/mi_modules/mi_log_info
参数说明 [Path] 路径
举例 echo storepath=/mnt > /proc/mi_modules/mi_log_info

3. mi_global_info

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信息。

  • 参数分析

    参数 描述
    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…


4. mi_bufqueue_status

4.1. cat/echo

  • 调试信息

    # 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的信息。

  • 参数分析

    参数 描述
    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数目


5. debug_level

5.1. cat/echo

  • 调试信息

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

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

    功能 打印警告级别
    命令 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的信息)
    功能 修改警告级别
    命令 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的信息

6. miu_protect

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相关的信息。

  • 参数分析

    参数 描述
    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的实际的名字。


7. mma_help_name

7.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/mma_heap_name0
    
    mma heap name heap_base_cpu_bus_addr length chunk_mgr_avail
    
    mma_heap_name0 25200000 9d00000 79c6000
    
    chunk_mgr info:
    
    pst_chunk_mgr offset length avail
    
    c3545618 0 9d00000 79c6000
    
    each chunk info:
    
    offset length used_flag task_name
    
    0 1000 1 insmod
    
    1000 100000 1 insmod
    
    101000 200000 1 proc_rtsp
    
    301000 3f5000 1 vdisp-dev0
    
    6f6000 3f5000 1 vdisp-dev0
    
    aeb000 3f5000 1 vdisp-dev0
    
    ee0000 1f5000 0 NA
    
    10d5000 1000 1 proc_rtsp
    
    10d6000 64000 1 proc_rtsp
    
    113a000 200000 1 proc_rtsp
    
    133a000 700000 1 proc_rtsp
    
    1a3a000 3f5000 0 NA
    
    1e2f000 3f5000 1 vdisp-dev0
    
    2224000 700000 1 proc_rtsp
    
    2924000 73dc000 NA
    
  • 调试信息分析

    该cat信息对应的是该mma heap的基本信息和当前的一些状态。

  • 参数分析

    参数 描述
    heap basic info mma heap name mma heap的name
    heap_base_cpu_bus_addr heap的起始cpu bus addr
    length heap的length
    heap里的剩余的未用的memory的总量 chunk_mgr_avail
    chunk_mgr info pst_chunk_mgr chunk mgr的指针的值
    offset chunk mgr的offset,由于整个mma heap做为一个chunk mgr,因此该值永远为0
    length chunk mgr的length,由于整个mma heap做为一个chunk mgr,因此该值永远为mma heap length
    avail chunk mgr(即heap)里的剩余的未用的memory的总量
    each chunk info (chunk mgr里各chunk的信息和使用情况) offset 该chunk在chunk mgr里的offset
    length 该chunk的length
    used_flag 该chunk是否allocated。是,该值为1;否, 该值为0
    task_name 如果used flag为1,则task_name存的task使用它;否则该值为无效值NA

7.2. echo

功能 即dump 指定offset和length的data到指定的路径
命令 echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/mma_heap_name[Num]
参数说明 [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。
[Offset] 从该mma heap的offset开始dump data,必须4KB对齐。
[Length] 在该mma heap里dump的总数据量, 必须4KB对齐
[Num] mma head 对应的数字,目前 mma_heap_name0 可通过 cat /proc/cmdline 查看
举例 echo /mnt/ 0 4096 > /proc/mi_modules/mi_sys_mma/mma_heap_name0
在 /mnt下产生 mma__mma_heap_name0__0__4096.bin 文件

8. imi_mma_heap

8.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/imi_mma_heap
    
    mma heap name heap_base_cpu_bus_addr length chunk_mgr_avail mmuEnable
    
    mma_heap_name0 22000000 1f80000 1c8a000 1
    
    chunk_mgr info:
    
    offset length avail
    
    0 10000000 fd0a000
    
    each chunk info:
    
    offset length used_flag task_name pid Module
    
    0 20000 0 NA -1 mi_sys
    
  • 调试信息分析

    该cat信息对应的是该mma heap的基本信息和当前的一些状态。

  • 参数分析

    参数 描述
    heap basic info mma heap name mma heap的name
    heap_base_cpu_bus_addr 该allocator里的allocations中未被使用的数目。
    length heap的length
    chunk_mgr_avail heap里的剩余的未用的memory的总量
    mmuEnable Mma heap是否支持HW_MMU。该值为1表示支持,为0表示不支持
    chunk_mgr info offset chunk mgr的offset,由于整个mma heap做为一个chunk mgr,因此该值永远为0。
    allocator里的逻辑offset。
    length chunk mgr 的 length,由于整个 mma heap 做为一个 chunk mgr,因此该值永远为 mma heap length。
    avail chunk mgr 的 length,由于整个 mma heap 做为一个chunk mgr,因此该值永远为 mma heap length。
    each chunk info (chunk mgr里各chunk的信息和使用情况) offset 该chunk在chunk mgr里的offset
    length 该chunk的length
    used_flag 该chunk是否allocated。是,该值为1;否, 该值为0
    task_name 如果used flag为1,则task_name存的task使用它;否则该值为无效值NA
    pid 该chunk所属的current->tgid
    Module 该chunk所属的模块


9. vb_pool_qlobal

9.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/vb_pool_global
    

  • 调试信息分析

    如果通过MI_SYS_IMPL_ConfGloPubPools API或者MI_SYS_ConfGloPubPools API配置了global public pools, 则有/proc/mi_modules/mi_sys_mma/vb_pool_global文件;如果没有配置的话,那么没有该文件。

  • 调试信息分析

    参数 描述
    collection_size 该pools的allocator个数
    其中某个vbpool_allocator 的info each_allocation_size 该allocator里的allocation的size(同一个vbpool allocator的不同allocation的size是相同的,同一个pools里的不同的allocator的不同的allocations的size可能不同)
    total_allocation_count 该allocator里的allocations的数目
    total_not_used_allocation_count 该allocator里的allocations中未被使用的数目
    kern_map_ptr 该allocator的offset0位置的kernel space va;如果没有的话,该值为NULL
    指定的vbpool_allocator的某个vbpool_allocation的 info offset_in_vb_pool 该allocation在对应的allocator里的逻辑offset
    real_used_flag 是否被使用中,否的话则后续参数为无效值NA
    u64Pts 如果有效,该值为pts
    u64SidebandMsg 如果有效,该值为SidebandMsg
    bEndOfStream 如果有效,该值为是否是end stream的flag
    bUsrBuf 如果有效,该值为表示是否是UsrBuf
    eBufType 如果有效,该值表示buf的type


9.2. echo

功能 即dump 指定offset和length的data到指定的路径
命令 echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/ vb_pool_global
参数说明 [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。
[Offset] 从该pools的哪个offset开始dump data,是pools的逻辑offset。
[Length] 在该pools里dump的总的数据量的大小。
举例 /# echo /mnt/ 0 1024 > /proc/mi_modules/mi_sys_mma/vb_pool_global
在 /mnt 下产生 vb_pool__global__0__1024.bin

10. vb_pool

10.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/vb_pool_mi_divp0
    

  • 调试信息分析

    如果配置了某个device的vb pool, 则会生成/proc/mi_modules/mi_sys_mma/vb_pool_modnamedevid文件, (modname,如divp,vpe等,devid,如0,1等。)它对应的是该device, vb_pool_global对应全局共享的vb pool。

    上面以vb_pool_mi_divp0为例,cat命令显示各种信息,有且只有”echo path offset length >”来dump数据,这都和vb_pool_global类似。

10.2. echo

功能 即dump 指定offset和length的data到指定的路径
命令 echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/[ModID]
参数说明 [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。
[Offset] 从该pools的哪个offset开始dump data,是pools的逻辑offset。
[Length] 在该pools里dump的总的数据量的大小。
[ModID] vb_pool的文件名, 如 vb_pool_mi_divp0
举例 echo /mnt/ 0 4096 >  /proc/mi_modules/mi_sys_mma/vb_pool_mi_divp0
在/mnt/下 产生vb_pool__mi_divp0__0__4096.bin

11. meta

11.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma/meta
    
    =================== start meta_info ================================
    
    basic info:
    
    total page count:16 each meta data size:256 total_count_with_metadatasize 256
    total_free_count_with_metadatasize:254
    
    meta info :
    
    ref_cnt=3
    
    each allocation info:
    
    offset_in_pool length phy_addr va_in_kern real_used_flag
    
    0x0 0x100 0x2336000 c1736000 0
    
    0x100 0x100 0x2336100 c1736100 0
    
    0x200 0x100 0x2336200 c1736200 0
    
    0x300 0x100 0x2336300 c1736300 0
    
    0x400 0x100 0x2336400 c1736400 0
    
    0x500 0x100 0x2336500 c1736500 0
    
    0x600 0x100 0x2336600 c1736600 0
    
    0x700 0x100 0x2336700 c1736700 0
    
    0x800 0x100 0x2336800 c1736800 0
    
    0x900 0x100 0x2336900 c1736900 0
    
    0xa00 0x100 0x2336a00 c1736a00 0
    
    ……
    
    =================== end meta_info ================================
    
  • 调试信息分析

    只要用过meta allocator(只有一个meta allocator),就会生成/proc/mi_modules/mi_sys_mma/meta,且其对应的memory就会完全alloc,等待被使用。

11.2. echo

功能 即dump 指定offset和length的data到指定的路径
命令 echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/ vb_pool_global
参数说明 [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。
[Offset] 从该allocator的哪个offset开始dump data,是allocator的逻辑offset。
[Length]在该allocator里dump的总的数据量的大小。
举例 echo /mt 0 1024 > /proc/mi_modules/mi_sys_mma/meta
在 /mnt 下产生 meta__0__1024.bin

12. mi_modulenamedevid

12.1. cat

  • 调试信息

    cat /proc/mi_modules/mi_disp/mi_disp0
    

  • 调试信息分析

    cat操作的结果:

    1. MI_SYS提供的针对该device的通用的调试信息,从device、channel、input port、output port四个角度提供;

    2. 该device私有的信息。私有的信息各module的内容别处会阐述,这里SYS角度只阐述通用的信息。

    cat /proc/mi_modules/mi_vdisp/mi_vdisp0为例,得到上面的结果。

  • 参数说明

    参数 描述
    Common info for device ChnNum 该device的总的channel 的数目
    EnChnNum 该device的enabled了的channel的数目
    InPortNum 该device的input port的数目
    OutPortNum 该device的output port的数目
    CollectSize 该dev对应的AllocatorCollection含有的allocator的数目总和
    Common info for channel(only dump enabled channel) ChnId Channel 的id值
    EnInPNum 该channel的enabled input port数量
    EnOutPNum 该channel的enabled output port数量
    MMAHeapName 如果设置了SetChnMMAConf,该值为对应的mma heap name;如果没有,该值为NULL
    chn pass pipeline delay in us Flow 流程点:
    OnPreProcessInputTask:MI PASS判断是否需要处理当前task,如果可以给output buffer配置;
    EnqueueInputTask:将input task 交由MI PASS开始处理;
    BarrierInputTask:插入CMDQ同步指令(比如waitevent, polling engine done);
    CheckInputTaskStatus:检查input task是否完成,及完成状态(成功,失败,etc);
    DequeueInputTask:通知MI PASS释放input task相关联的资源;
    OnPollingAsyncOutputTaskConfig:对于输入输出不同步的MI Pass,或者只有输出没有输入的MI Pass,MI SYS查询是否有独立output buf request需求;
    EnqueueAsyncOutputTask:将非同步输出的output task交由MI PASS做处理;
    BarrierAsyncOutputTask:对非同步output task插入cmdq同步指令;
    CheckOutputTaskStatus:检查output task是否完成,及完成状态(成功,失败,etc);
    DequeueOutputTask:通知MI PASS释放output task相关联的资源;
    FinDMADispatch:MI SYS将MI PASS的output task中的buffer传递到绑定的下级MI PASS的input queue。
    Min Buffer产生到该MI PASS对应Flow所经过的最小延时。
    Max Buffer产生到该MI PASS对应Flow所经过的最大延时。
    Avg Buffer产生到该MI PASS对应Flow所经过的平均延时。
    Diff Buffer产生到该MI PASS对应Flow所经过的当前延时。
    Input port common info(only dump enabled Input port) ChnId 该input port所在的channel id
    PortId 该input port的id
    SrcFrmrate Src帧率
    DstFrmrate Dst帧率
    user_buf_quota 该InputPort的buff数目的Quota
    UsrInjectQ_cnt 该InputPort 里的UsrInjectBufQueue里的buff数目
    UsrInjectQ_size 该InputPort 里的UsrInjectBufQueue里的buff的总的size
    BindInQ_cnt 该InputPort 里的BindInputBufQueue里的buff数目
    BindInQ_size 该InputPort 里的BindInputBufQueue里的buff的总的size
    WorkingQ_cnt 该InputPort 里的WorkingQueue里的buff数目
    WorkingQ_size 该InputPort 里的WorkingQueue里的buff的总的size
    usrLockedInjectCnt 用户当前拿到了多少个buf
    Input port bind info(only dump enabled Input port) ChnId 该input port所在的channel id
    PortId 该input port的id
    bind_module_id 与该input port 进行了binded的output port所在的module的id
    bind_module_name 与该input port 进行了binded的output port所在的module的name
    bind_ChnId 与该input port 进行了binded的output port所在的channel的id
    bind_PortId 与该input port 进行了binded的output port的id
    Output port common info (only dump enabled Output port) ChnId 该output port所在的channel的id
    PortId 该output port的id
    BufCntQuota 该OutputPort的 buff数目的Quota
    usrLockedCnt 从UsrGetFifoBufQueue里用户实际拿走了多少个buffer
    totalOutPortInUsed totalOutputPortInUsedBuf数目
    DrvBkRefFifoQ_cnt 该OutputPort的DrvBkRefFifoQueue里的buffer数目
    DrvBkRefFifoQ_size 该OutputPort的DrvBkRefFifoQueue里的buffer的总size
    UsrGetFifoQ_cnt 该OutputPort的UsrGetFifoBufQueue里的buffer数目
    UsrGetFifoQ_size 该OutputPort的UsrGetFifoBufQueue里的buffer的总size
    WorkingQ_cnt 该OutputPort的WorkingQueue里的buffer数目
    WorkingQ_size 该OutputPort的WorkingQueue里的buffer的总size
    Output port BindPeerInputPortList info(only dump enabled Output port) ChnId 该output port所在的channel的id
    PortId 该output port的id
    bind_module_id 与该output port 进行了binded的input port list中的其中一个input port(以下简称该binded input port)所在的module的id
    bind_module_name 该binded input port所在的module的name
    bind_ChnId 该binded input port所在的channel id
    bind_PortId 该binded input port的id

12.2. echo

功能 获得模块的help信息
命令 echo help > /proc/mi_modules/[ModName]/[ModID]
参数说明 [ModName] 模块的名字 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
[ModID] 模块中对应的文件, 一般为Module name +数字
如mi_disp0 / mi_gfx0 / mi_rgn0
举例 echo help > /proc/mi_modules/mi_disp/mi_disp0 ; 得到mi_disp0 节点文件的帮助信息
功能 Dump Port 的信息
命令 echo dump_buffer [ChnID] [PortType] [PortID] [QueueName][Path] [EndMethod] > /proc/mi_modules/[ModName]/[ModID]
参数说明 [ChnID] 通道的ID
[PortType] iport 或 oport 分别代表input port output port
[PortID] 该port的id
[QueueName] 如果是input port,值只能是"UsrInject" 或者"BindInput" , 如果是output port,值只能是"UsrGetFifo"
[Path] 数据保存的文件路径。注意是绝对路径,系统会根据参数自动生成文件名,不同的buffer保存在不同的文件
[EndMethod] dump buffer的结束方法。仅支持三类:
(1). "bufnum=xxx":dump指定数目的buffer
(2) "time=xxx"(unit: ms):dump过程持续time对应的时间
(3). "start/end" pair:用start开始dump,用end结束dump,使用时其他5个参数需完全一致。
[ModName] 模块的名字 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
[ModID] 模块中对应的文件, 一般为Module name +数字
举例 echo dump_buffer 0 iport 0 BindInput /mnt bufnum=1 > /proc/mi_modules/mi_disp/mi_disp0
dump disp模块 iport 的数据

13. mi_dump_buffer_delay_worker

13.1. cat

  • 调试信息

    cat /proc/mi_modules/mi_dump_buffer_delay_worker
    
    delay_worker_id module_name force_stop dev_id chn_id port_type port_id
    
    0 mi_disp 0 0 0 inport 0
    
    Queue_name stored_dir dump_method dump_method_value
    
    BindInput /mnt bunfnum 2
    
  • 调试信息分析

    /proc/mi_modules/mi_dump_buffer_delay_worker是和mi_modulenamedevid相连的概念,采用delay worker的方式dump device Queue里的buffer,可以通过对mi_dump_buffer_delay_worker的cat操作查看还有哪些delay worker正在进行中,echo force_stop_dump delay_worker_id是强制结束指定的一个delay worker。

  • 参数说明

    参数 描述
    delay_worker_id 该delay worker 的id。如果delay worker完成的话,该id会回收,给后续其他的delay worker作为id使用。
    module_name 该delay worker对应的module的id。
    force_stop 该delay worker是否在强制结束阶段。1:是,0:否。
    dev_id 该delay worker对应的device id。
    chn_id 该delay worker对应的channel id。
    port_type 该 delay worker 所对应的port的type,是 input port,还是 output port
    port_id 该delay worker对应的port的id
    Queue_name 该delay worker对应的Queue的name
    stored_dir 该delay worker对应的要dump的data所要存放的绝对路径(不含最终存放的文件名)
    dump_method 该delay worker对应的dump方法:bufnum,还是time,还是start
    dump_method_value Dump方法对应的值.

13.2. echo

功能 强制结束delay worker
命令 echo force_stop_dump [WorkID] >/proc/mi_modules/mi_dump_buffer_delay_worker
参数说明 [WorkID] delay_work 的ID
举例 echo force_stop_dump 0 > /proc/mi_modules/mi_dump_buffer_delay_worker 强制停止 delay_work 0

14. module version

14.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_ai/module_version_file
    
    MStar Module version: project_commit.sdk_commit.build_time
    c1799df.fd2d52b.20171225180033
    
    # cat /proc/mi_modules/mi_global_info
    
    ..
    
    MStar Module version: project_commit.sdk_commit.build_time
    cb68bfd.44aca45.20171226100257
    
    ..
    
  • 调试信息分析

    xxxx_version_file提供了version信息,/proc/mi_modules/mi_global_info里我们也提供了version信息,不过其本质上指的是mi_sys模块的version信息, 上面只是以mi_vi 和 mi_global_info 为例子,每个模块都有自己对应的version file。

  • 参数说明

    参数 描述
    Version Info project_commit 模块编译ko时的整包project commit,如果单独替换ko,模块基于的commit有变化,ko version里得到的commit也会变更。
    sdk_commit 模块编译ko时的整包sdk commit,如果单独替换ko,模块基于的commit有变化,ko version里得到的commit也会变更。
    build_time 实际的build时间,精确到秒,即使make clean;make image整体来build的话,各个ko的时间也会有差别。


15. show threads

15.1. echo

  • 调试信息

    # echo show_threads > /proc/mi_modules/mi_sys/mi_sys0
    
    <3>printk in _MI_SYS_IMPL_Common_WriteProc
    
    <6>  task                PC stack   pid father
    
    <6>busybox         S    1      0 0x00000000
    
    <3>[<c01d3a6f>] (__schedule) from [<c01d3bb7>] (schedule+0x57/0x64)
    
    <3>[<c01d3bb7>] (schedule) from [<c001bfbd>] (do_wait+0xed/0x134)
    
    <3>[<c001bfbd>] (do_wait) from [<c001c367>] (SyS_wait4+0x69/0x7e)
    
    <3>[<c001c367>] (SyS_wait4) from [<c000d2a1>] (ret_fast_syscall+0x1/0x54)
    
    <6>kthreadd        S    2      0 0x00000000
    
    <3>[<c01d3a6f>] (__schedule) from [<c01d3bb7>] (schedule+0x57/0x64)
    
    <3>[<c01d3bb7>] (schedule) from [<c002b077>] (kthreadd+0x6d/0xf6)
    
    <3>[<c002b077>] (kthreadd) from [<c000d381>] (ret_from_fork+0x11/0x30)
    
    <6>ksoftirqd/0     S    3      2 0x00000000
    
    <3>[<c01d3a6f>] (__schedule) from [<c01d3bb7>] (schedule+0x57/0x64)
    
    <3>[<c01d3bb7>] (schedule) from [<c002c9af>] (smpboot_thread_fn+0xff/0x12c)
    
    <3>[<c002c9af>] (smpboot_thread_fn) from [<c002a911>] (kthread+0xa1/0xb4)
    
    <3>[<c002a911>] (kthread) from [<c000d381>] (ret_from_fork+0x11/0x30)
    
    ……
    
    ……
    
    <6>du              R  running task     3641   3640 0x00000000
    
    <3>[<c01d3a6f>] (__schedule) from [<c01d3c5b>] (preempt_schedule_common+0x1b/0x28)
    
    <3>[<c01d3c5b>] (preempt_schedule_common) from [<c00a0c7f>] (__find_get_block+0x159/0x176)
    
    <3>[<c00a0c7f>] (__find_get_block) from [<c00a1013>] (__getblk_gfp+0x11/0x1e2)
    
    <3>[<c00a1013>] (__getblk_gfp) from [<c00a1a4d>] (__bread_gfp+0x7/0x86)
    
  • 调试信息分析

    打印当前所有线程的call stack。

  • 参数说明

    参数 描述
    show_threads task 线程名p->comm
    state 线程运行状态
    pid 线程的pid
    father 线程的父进程id
    flags low level flags


16. debug_frc

16.1. echo

  • 调试信息

    # echo debug_frc on 12 0 0 0 0 "out" > /proc/mi_modules/mi_sys/mi_sys0
    
    printk in _MI_SYS_IMPL_Common_WriteProc
    
    Switch enable debug FRC, Modid:12, Dev:0, Chn:0, Pass:0, Port:0, BufType:1
    
    参数 描述
    命令 Switch enable debug FRC:echo debug_frc on [Modid] [Devid] [Chnid] [Passid] [Portid] \"in/out\" > /proc/mi_modules/mi_sys/mi_sys0 Switch disable debug FRC:echo debug_frc \"off\" > /proc/mi_modules/mi_sys/mi_sys0
    参数说明 [Modid] : module id。
    [Devid] : device id。
    [Chnid] : channel id。
    [Passid] : pass id。
    [Portid] : port id。

17. mi_deadlock_info

17.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_deadlock_info
    
    thread_name:divp0_P0_MAIN pid:601 
    owned_lock_name:mi_sys_global_devLastCmdqLock 
    caller_func_name:mi_sys_internal_main_worker_thread 
    caller_func_line:10157
    
  • 调试信息分析

    打印出可能造成deadlock的位置。

  • 参数说明

    参数 描述
    deadlock Info thread_name 造成deadlock的线程名字
    pid 线程的task pid
    owned_lock_name 锁的名字
    caller_func_name 拿锁的function name
    caller_func_line 拿锁的具体位置


18. mem_stat

18.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sys_mma # cat mem_stat
          mi_sys
        CMDMEM               c0000
     sys-logBuffer               40000
     sys-logConfig                1000
         TotalSize              101000
      AllTotalSize              101000
    
  • 调试信息分析

    打印出mi sys 内存状态

  • 参数说明

    参数 描述
    Mem_stat mi_sys 所属mi_sys模块
    CMDMEM Cmd的内存大小 pid
    sys-logBuffer Sys log最大可申请的buf大小
    sys-logConfig 分配(申请)给sys log的buf大小
    TotalSize ModuleUsdTotalSize 模块使用的size
    AllTotalSize 总的size


19. mi_infer_graph.py

19.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_infer_graph.py
    

  • 调试信息分析

    将其拷贝到文本里,然后在Linux server上使用pyhton2运行,会输出两张图片,默认的图片格式是简化版,一张是“infer_DAG”,一张是“perf_static”,其中一张输出的图片如下:

    矩形框中表示的是 channel pass name;线上的label表示的是从哪个input port到哪个output port,以及bind type,和source frame rate、dest frame rate。


20. mi_graph_contrl

20.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_graph_contrl
    

  • 调试信息分析

    命令的dump bind字段表示mi_infer_graph.py脚本输出的样式,off表示输出简化绑定关系图,on 表示输出详细绑定关系图。


20.2. echo

功能 控制python脚本输出的图片样式
命令 echo [command] >/proc/mi_modules/mi_graph_contrl
参数说明 [command] 命令:
dump bind on:控制输出详细绑定关系图
dump bind off:控制输出简化绑定关系图
举例 输出详细绑定关系图:
# echo dump bind on > /proc/mi_modules/mi_graph_contrl
# cat /proc/mi_modules/mi_infer_graph.py