一、查看MPP日志信息
目前日志分为 7 个等级,默认设置为等级 3。等级设置的越高,表示记录到日志中的信息量就越多,当等级为 7 时,系统的整个运行状态实时的被记录到日志中,此时的信息量非常庞大,会大大降低系统的整体性能。因此,通常情况下,推荐设置为等级 3,因为此时只有发生错误的情况下,才会将信息记录到日志中,辅助定位绝大多数的错误。
获取日志记录或修改日志等级时用到的命令如下:
查看各模块的日志等级,可以使用命令 cat /proc/umap/logmpp,此命令会列出所有模块日志等级。
修改某个模块的日志等级,可使用命令 echo “venc=4” > /proc/umap/logmpp,其中 venc 是模块名,与 cat 命令列出的模块名一致即可。
修改所有模块的日志等级,可以使用命令 echo “all=4” > /proc/umap/logmpp。
获取日志记录,可以使用命令 cat /dev/logmpp,此命令将打印出所有的日志信息;如果日志已读空,命令会阻塞并等待新的日志信息,可以使用 Ctl+C 退出。
也可以使用 open、 read 等系统调用来操作/dev/logmpp 这个设备节点。
cat /proc/umap/logmpp
-----LOG BUFFER STATE----------------------------------------------------------
MaxLen ReadPos WritePos ButtPos
64(KB) 0 0 65536
-----CURRENT LOG LEVEL---------------------------------------------------------
vb : 3
sys : 3
region : 3
chnl : 3
vpss : 3
venc : 3
vda : 3
h264e : 3
jpege : 3
vou : 3
viu : 3
rc : 3
aio : 3
ai : 3
ao : 3
aenc : 3
adec : 3
isp : 3
ive : 3
tde : 3
vgs : 3
h265e : 3
二、内存使用
1、DDR内存管理说明
1)所有DDR内存中,一部分由操作系统管理,称为OS内存;另一部分由MMZ模块管理,供媒体业务单独使用,称为MMZ内存。
2)OS内存起始地址为0x80000000,内存大小可通过bootargs进行配置,例如第三章中的setenv bootargs 'mem=64M ... ',表示分配给操作系统内存为64M,您可以根据实际情况进行调整。
可使用cat /proc/meminfo 查看内存信息
/mnt/mpp # cat /proc/meminfo
MemTotal: 124164 kB
MemFree: 107540 kB
Buffers: 0 kB
Cached: 5992 kB
SwapCached: 0 kB
Active: 1484 kB
Inactive: 5116 kB
Active(anon): 612 kB
Inactive(anon): 0 kB
Active(file): 872 kB
Inactive(file): 5116 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 632 kB
Mapped: 652 kB
Shmem: 4 kB
Slab: 5212 kB
SReclaimable: 780 kB
SUnreclaim: 4432 kB
KernelStack: 336 kB
PageTables: 124 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 62080 kB
Committed_AS: 1784 kB
VmallocTotal: 892928 kB
VmallocUsed: 10588 kB
VmallocChunk: 870824 kB
使用free查看内存使用情况
/mnt/mpp # free
total used free shared buffers
Mem: 124164 16632 107532 0 0
-/+ buffers: 16632 107532
Swap: 0 0 0
扩展:在/proc/meminfo 显示的 MemTotal 为什么不等于cmdline 里的配置 mem=xxxM?
因为内核在启动时 reserved 了一些内存,如内核的代码段, pmem 里 reserved 的内存。我们看到的 MemTotal 的大小已经减去了内核早期保留的内存块。
3)MMZ内存由MMZ内核模块管理(mpp/ko_hi35xx目录下的mmz.ko),加载mmz模块时,通过模块参数指定其起始地址及大小,load脚本中根据osmem大小来进行计算,例如:load3516a脚本中的mmz模块参数:
####################Variables Definition##########################
SNS_TYPE=mn34220 # sensor type
mem_total=512; # 512M, total mem
mem_start=0x80000000; # phy mem start
os_mem_size=64; # 64M, os mem
mmz_start=0x84000000; # mmz start addr
mmz_size=128M; # 128M, mmz size
##################################################################
注意:(3)如果有特殊应用,可以自行修改load3516a脚本,进行mmz区域划分,如“insmod mmz.ko mmz=anonymous,0,0x84000000,442M:jpeg,0,0x9fa00000,5M anony=1”。
“mmz =” 用来定义 media-mem 的分配池,格式为:
mmz=
以上每一个参数都是必需的,参数之间用“ ,”号分隔,可以指定多个分配池,之间用“:”号分隔。 例如: modprobe mmz mmz =ddr,0, 0x86000000,64M:vdec,0, 0x8A000000, 64M。
三、如何查看和修改寄存器
在程序中可以使用 HI_SYS_ReadRegister, HI_SYS_WriteRegister 接口进行寄存器的读写操作。
在单板命令行下,使用工具。
单板/usr/sbin 目录下,有一系列寄存器操作相关的工具,分别介绍如下:
工具 |
参数 |
功能 |
备注 |
hmm |
参数 1: address,必选 |
把 address 对应的地址 |
如果没有输入 value,himm 会把 address 对 |
himd |
参数 1: address,必选 |
从 address 开始,以大 |
如果没有输入length, 那么默认打印256 字节。 |
himd.l |
参数 1: address,必选 |
从 address 开始,以小 |
如果没有输入length, 那么默认打印256 字节。 |
himc |
参数 1: address,必选 |
从 address 开始,把 |
一般仅用于物理内存内容的修改。 |
参数 address 既可以是寄存器地址,也可以是内存地址,所以以上工具也可以用于内存查看、修改。
所需寄存器在:Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南 查找
~ # himd.l 0x20120004
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:166}cmdstr:himd.l
====dump memory 0x20120004====
0000: 00400000 00525101 00000000 ffffffff
0010: 000f0066 00000000 00000000 00000012
0020: 00001234 00000000 00000000 00000000
0030: 00000000 00000123 00000000 00000000
0040: 00000000 00001234 00000000 00000000
0050: 00000000 26666400 66666112 66266666
0060: 00000011 00000000 00000000 00000000
0070: 00000000 800311a0 029991c5 0009092a
0080: 00000000 00000000 00000000 00000000
0090: 00000000 00000000 00000000 00000000
00a0: 00000000 00000000 00000000 00000000
00b0: 00000000 00000000 00000000 00000000
00c0: 00000000 00f22c2c ff035144 08000001
00d0: 07072424 1e1ec001 24242424 0000000d
00e0: 00000000 00000000 00000000 02020202
00f0: 02020202 00000000 00000000 00000000
[END]
四、查看错误码
hi3516a + bt1120 (hdmi it6604e)
執行 ..../mpp/sample/vio/sample_vio 0
IsSensorInput = 5
bt656
[SAMPLE_COMM_VPSS_StartGroup]-88: HI_MPI_VPSS_CreateGrp failed with 0xa0078010!
[SAMPLE_VIO_1080P_PreView]-184: start VPSS GROUP failed!
0xA0078010 HI_ERR_VPSS_NOTREADY VPSS 系统未初始化
五、查看/proc/umap/目录文件
/proc/umap # ls
acodec aenc ao h264e hifb0 isp jpege rc sys vb venc vi vpss
adec ai chnl h265e higo ive logmpp rgn tde vda vgs vo
cat /proc/umap/vi
[VIU] Version: [Hi3520A_MPP_V1.0.0.0 Debug], Build Time: [Jul 13 2012, 16:36:55]
-----MODULE PARAM--------------------------------------------------------------
detect_err_frame
n
-----VI DEV ATTR---------------------------------------------------------------
Dev IntfM WkM ComMsk0 ComMsk1 ScanM AD0 AD1 AD2 AD3 Seq
0 BT656 4Mux ff000000 0 I -1 -1 -1 -1 UYVY
-----VI HIGH DEV ATTR---------------------------------------------------------------
Dev InputM WkM ComMsk0 ComMsk1 ScanM AD0 AD1 AD2 AD3 Seq CombM CompM ClkM Fix FldP
-----VI PHYCHN ATTR------------------------------------------------------------
PhyChn CapX CapY CapW CapH DstW DstH CapSel Mirror Filp PixFom SrcRat DstRat
0 0 0 720 576 720 576 both N N sp420 -1 -1
-----VI PHYCHN MINOR ATTR------------------------------------------------------------
PhyChn CapX CapY CapW CapH DstW DstH CapSel Mirror Filp PixFom MixCap DwScal
-----VI PHYCHN STATUS 1----------------------------------------------------------
PhyChn Dev IntCnt VbFail LosInt TopLos BotLos BufCnt IntT SendT Field Stride
0 0 10479 0 1 0 1 1 64 55 intl 720
-----VI PHYCHN STATUS 2---------------------------------------------------------
PhyChn ccErrN IntRat
0 1 24
-----VI CHN STATUS-------------------------------------------------------------
ViChn bEnUsrP FrmTime FrmRate SendCnt SwLost
0 N 40000 25 10478 0
# cat /proc/umap/h264e
[H264E] Version: [Hi3520A_MPP_V1.0.0.0 Debug], Build Time[Jul 13 2012, 16:36:53]
-----CHN ATTR------------------------------------------------------------------
ID Width Height profile MainStr RefMode BufSize ByFrame MaxStrCnt
0 720 576 base Yes 1X 829440 Yes 200
-----PICTURE INFO--------------------------------------------------------------
ID EncdStart EncdSucceed Lost Disc Skip BufLeak Recode RlsStr UnrdStr
0 10477 10477 0 0 0 0 0 10477 0
-----STREAM BUFFER-------------------------------------------------------------
ID Base RdTail RdHead WrTail WrHead DataLen BufFree
0 0xcb700000 0x7c40 0x7c40 0x7c40 0x7c40 0 829376
-----ROI INFO------------------------------------------------------------------
ID index bAbsQp Qp width height startx starty
-----Syntax INFO---------------------------------------------------------------
ID slcsplt slcmode slcsize
0 No N/A N/A
-----Inter & Intra prediction INFO---------------------------------------------
ID profile HWsize VWsize P16x16 P16x8 P8x16 P8x8 MvExt I16x16 Inxn Ipcm
0 base 5 2 Yes Yes Yes Yes Yes Yes Yes Yes
-----Syntax INFO--------------------------------------------------------------
ID profile EntrpyI EntrpyP Itrans ptrans QMatrix POC DblkIdc alpha beta
0 base cavlc cavlc 4x4 4x4 No 2 0 5 5
# cat /proc/umap/venc
[VENC] Version: [Hi3520A_MPP_V1.0.0.0 Debug], Build Time[Jul 13 2012, 16:36:54]
-----VENC CHN ATTR-------------------------------------------------------------
NO. Width Height Type Field VIField StreamType ByFrame BlockFlag Sequence Registered LeftBytes LeftFrm CurPacks
0 720 576 96 0 0 1 1 0 10477 1 0 0 1
-----VENC STREAM STATE------------------------------------------------------------
NO. FreeCnt BusyCnt UserCnt UserGet UserRls GetTimes Interval FrameRate
0 8 0 0 11737 11737 10477 5 24