SYS模块调试
1. common¶
1.1. dump_mmap¶
-
调试信息
# ./config/dump_mmap
-
调试信息分析
Common下存放的是配置API,目的如下:
-
在用户态做iniparser,不进入内核。
-
便于调试时确认配置文件的内容,避免在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 path
或store 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操作的结果:
-
MI_SYS提供的针对该device的通用的调试信息,从device、channel、input port、output port四个角度提供;
-
该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 |