【HISI系列】海思芯片驱动使用方法



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错误码:
在这里插入图片描述


THE END!

在这里插入图片描述