我是靠谱客的博主 哭泣月亮,最近开发中收集的这篇文章主要介绍Hi3516A开发-- 常见问题FAQs,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、查看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 -a -sensor mn34220 -osmem 64
您也可以通过修改mpp/ko目录下load3516a脚本中的mmz模块参数,来修改其起始地址和总大小。
4)请注意MMZ内存地址范围不能与OS内存重叠。


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

##################################################################
注意:
(1)用户在配置启动参数时需要设置OS的管理内存为64M,“setenv bootargs 'mem=64M ...”。 
(2)系统启动后,配置load3516a脚本中指定总内存为512(mem_total=512),加载时指定osmem为64(-osmem 64),则MMZ管理的内存为448M。(如果未指定按照上面分配的)    

(3)如果有特殊应用,可以自行修改load3516a脚本,进行mmz区域划分,如“insmod mmz.ko mmz=anonymous,0,0x84000000,442M:jpeg,0,0x9fa00000,5M anony=1”。


“mmz =” 用来定义 media-mem 的分配池,格式为:
mmz=<name>,<gfp>,<phys_start_addr>,<size>:<name>,<gfp>,<phys_start_addr>:……
<name>:字符串,分配池的名字,例如 ddr。
<gfp>:数字,表示分配池的属性,主要用于在有多种内存的单板上指定 MMZ 位于哪种内存上(比如 DDR、 SDRAM、 DDR2、 DDR3),为 0 表示自动,目前一般都直接将该值置为 0。
<phys_start_addr>: 分配池的物理起始位置, 16 进制数, 如 0x86000000; 注意 MMZ的内存区域不能与 linux 内核的内存区域重叠, MMZ 的物理起始位置就要从“内存起始地址+linux 内核使用的内存大小”开始。 在 Hi353x 平台上,内存的起始地址固定为 0x80000000;举例说明如下:假设单板的 bootargs 为 'mem=96M console=ttyAMA0,115200 root=xxxx', 这表示 linux 内核将使用 96M 的内存空间,那么 MMZ 的起始地址应该配置为 0x80000000+96M = 0x86000000。
<size>:分配池的大小,可以使用如下两种表示方式: 0x100000、 1M。 注意分配池的大小加上 linux 内核的内存大小不能超过物理内存的实际大小。 比如单板上的物理内存是 256M 大小, linux 内核使用了 96M, MMZ 就只能使用最多 256-96=160M。
以上每一个参数都是必需的,参数之间用“ ,”号分隔,可以指定多个分配池,之间用“:”号分隔。 例如: modprobe mmz mmz =ddr,0, 0x86000000,64M:vdec,0, 0x8A000000, 64M。


三、如何查看和修改寄存器
在程序中可以使用 HI_SYS_ReadRegister, HI_SYS_WriteRegister 接口进行寄存器的读写操作。
在单板命令行下,使用工具。
单板/usr/sbin 目录下,有一系列寄存器操作相关的工具,分别介绍如下:

工具       

参数                                

功能

备注                                                     

hmm

参数 1: address,必选
参数 2: value,可选

把 address 对应的地址
改写为 value

如果没有输入 value,himm 会把 address 对
应的值打印出来,然后提示输入新的值。

himd

参数 1: address,必选
参数 2: length,可选

从 address 开始,以大
端方式打印 length 字节
长度的内容。

如果没有输入length, 那么默认打印256 字节。

himd.l

参数 1: address,必选
参数 2: length,可选

从 address 开始,以小
端方式
打印 length 字节
长度的内容。

如果没有输入length, 那么默认打印256 字节。

himc

参数 1: address,必选
参数 2: value,必选
参数 3: length,必选

从 address 开始,把
length 字节长度的内容
全部设置为 value。

一般仅用于物理内存内容的修改。


参数 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, 查看文档 HiMPP IPC V2.0 媒体处理软件开发参考。结果如下:

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



最后

以上就是哭泣月亮为你收集整理的Hi3516A开发-- 常见问题FAQs的全部内容,希望文章能够帮你解决Hi3516A开发-- 常见问题FAQs所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部