DATE: 2019-2-22
前言
在调试不同海思芯片的编码器时,遇到了需要加载和卸载驱动的情况,并且调试过程中出现不同硬件层面和编码的错误,特将问题定位方法记录一下以供后续参考。
1、海思芯片驱动使用方法
设备SDK包中的ko文件夹中存放了海思硬件运行需要的不同模块驱动,设备正常运行需要加载相应的驱动程序才可以。
HISI芯片驱动加载和卸载方法:
以Hi3559AV100为例:
cd ko
./load3559av100 -a -sensor imx334
查看已经安装的驱动模块:
lsmod
注意事项:不同模块驱动之间存在依赖关系,卸载模块驱动时存在先后顺序。
模块KO之间的依赖关系:参考文档:《HiMPP 媒体处理软件 FAQ.pdf》
- 每个加载上去的KO模块,有显示依赖关系的,lsmod查看时,会有Used by的标识。存在这种关系的KO之间需要按照顺序加载和相反顺序卸载。
- 有些模块KO是隐形依赖的,比如公共基础KO模块mmz.ko、hi_media.ko等需要先加载,这些KO模块若中途单独卸载再加载可能引起一些异常。
2、调试和问题定位方法
在运行海思编码器demo时,编码报错一般是由于编码API使用不当造成的,比如参数超出合法范围,系统驱动没有加载等。
2.1、MPP API调试工具
问题定位方法:
1、首先根据错误码(如下图6.5所示)大致定位问题的原因和方向。
2、查看mpp log信息:
cat /dev/logmpp
注:mpp log信息中会具体指定错误类型以及错误的原因和位置。
调用HISI SDK API接口出现错误怎么办?
下面参考自:https://blog.csdn.net/listener51/article/details/87891633
【现象】
需要查看日志和调整 log 日志的等级。
【分析】
Log 日志记录 SDK 运行时错误的原因、大致位置以及一些系统运行状态等信息。因此可通过查看 log 日志,辅助错误定位。
目前日志分为 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 退出。如果不想阻塞等待日志信息,可以使用命令 echo wait=0 > /proc/umap/logmpp 取消
阻塞等待。也可以使用 open 、 read 等系统调用来操作 /dev/logmpp 这个设备节点。
参考文档:《HiMPP 媒体处理软件 FAQ.pdf》
2.2、模块和内存调试工具
- OS内存分配
cat /proc/meminfo
- MMZ内存分配
/proc/media-mem
这里记录了当前MMZ内存被分配至哪些模块,被谁使用了。
- 各个模块调试信息
/proc/umap/*
各个模块的调试信息,当然也包括内存的一些使用情况。
比如:
/proc/umap/rc //查看码率控制模块调试信息
/proc/umap/h264e //查看H.264编码通道模块调试信息
/proc/umap/h265e //查看H.265编码通道模块调试信息
/proc/umap/vb //查看视频缓存池模块的调试信息
附录:视频编码API错误码:
系统控制 SYS API错误码:
视频缓存池 VB API错误码: