hi3559v100 sdk中双系统AMP架构的初步了解
hi3559v100是海思推出的camera soc处理器。采用的是双核处理器。一个是a7,运行的linux3.18内核。一个是a17使用的是huaweiliteos操作系统,Hi3559V100 系统中 Huawei LiteOS 负责系统媒体编解码相关业务。两个操作系统实现amp的构建形式。
首先了解一下sdk中的内容。
分别解压两个sdk包目录如下:
作为嵌入式软件开发来说,重点关注以下两个目录:
- hardware
主要是一些datasheet,demo板的原理图。
- sofaware
板端,pc端,手机端所使用到的开发调试 维护的软件包,工具包和文档
1. sdk的软件架构:
- OSDRV 层主要提供底层系统支持包,如 Bootloader、OS、Rootfs 模板,关键driver 及交叉编译工具链,双核通信驱动等。
- MPP 层和原有监控领域 SDK 保持一致,包含主要的媒体模块驱动相关库,如VI、VPSS、VENC、VO 等,对外提供 MPI 接口。
- Hisyslink 为双核双系统通信组件,用于双系统间的消息通信,数据传递。为了简化降低客户在双系统方面的开发难度,SDK 包提供了 NDK 媒体适配参考代码,供客户参考,客户在实际产品开发过程中,也可以在 MPI 接口上,根据目标市场产品形态,对基础音视频业务功能和数据流进行重新封装。
- Middleware 层主要提供了典型的业务组件,如录像、拍照、文件管理、回放、GUI 及网传等。
2. sdk中的双核业务部署:
- NDK媒体业务在双系统部署。
NDK 即媒体相关的功能模块基本都在 Huawei LiteOS 上具体实现(即 MAPI Local模式),并通过在 linux 侧提供 MAPI client 接口,对外提供媒体服务。MAPI local和 MAPI client 之间通过双核通信组件 Hisyslink 实现通信。
Middleware 和 References 在 Linux 侧部署,便于用户扩展。
硬件资源在双系统部署。
媒体相关硬件部署在 Huawei LiteOS 侧;但外设控制器及其相关中断,内存等硬件资源应该根据产品需要,进行双系统部署。
3. IPCM
在soc上部署的amp构架,一个linux,一个是huawei liteos。两个系统间的通信机制:ICMP
Linux+Huawei LiteOS 双系统业务部署中,媒体业务的硬件资源及功能实现都部署在Huawei LiteOS 端,并通过核间通信,把媒体服务延伸到 Linux 端,Linux 提供和Huawei LiteOS 端相同的接口定义。这就需要 Linux 和 Huawei LiteOS 提供核间通信机制,为媒体业务提供消息通信和大块数据通信机制。核间通信组件IPCM 就是专门为Linux+Huawei LiteOS 双系统核间通信设计的底层组件。
IPCM 的底层通信机制基于共享内存+中断方式实现。
IPCM 是基于共享内存区域实现多核通信的,每个核(OS)拥有一块自己的内存区域(基址+长度),同时知道其它每个核(OS)拥有的内存区域(基址+长度)。
发送消息(带消息头)时,需指定目标核 ID(target)和端口(port),将消息填充到目标的内存区域。
接收消息时,从自己的内存区域读取数据,根据消息头读取一个消息。
双核之间通过 GIC 中断通知对方有消息准备好,需要对方读取。
Hi3559V100 在 IPCM 基础上再封装实现 HisysLink 子系统,一般情况下不直接访问IPCM 接口进行双核通信。这里只介绍 IPCM 模块的初始化动作。
- Linux 端
挂载 hi_ipcm.ko
- Huawei LiteOS 端
调用_ipcm_vdd_init();初始化 IPCM 模块。
由于 IPCM 使用一片内存区域供 Linux 与 Huawei LiteOS 共同访问实现消息通信。当执行 rmmod hi_ipcm 卸载完 Linux 的 IPCM 模块后,也需要在 Huawei LiteOS 调用_ipcm_vdd_cleanup 去初始化 IPCM。如果 Linux 与 Huawei LiteOS 两端初始化与去初始化 IPCM 不一致(比如一端去初始化并再次初始化 IPCM,另一端不执行相应操作),将会导致内部共享内存区域未同步,造成访问异常地址而出现系统挂死。
4. 共享文件系统sharefs:
Huawei LiteOS 上运行的某些应用需要进行一些配置文件的读写和临时中间文件的产生和删除。但 Hi3559V100 的 flash、sd、usb 均部署在 Linux 端,导致 Huawei LiteOS 无法使用 yaffs、FAT 之类文件系统进行文件的访问。因此开发 Sharefs 文件系统,在Huawei LiteOS 端虚拟一个文件系统,利用 IPCM 通信和共享内存,实现其读写 Linux上指定目录下的内容。Sharefs 可以帮助 Huawei LiteOS 从 Linux 端读写文件,类似于NFS。Sharefs 指定访问 Linux 的目录可作为 flash,sd,usb,nfs 等的挂载点。这样,可实现 Huawei LiteOS 通过 Sharefs 访问 yaffs、FAT、NFS 等文件系统。将 Huawei LiteOS 需要访问的文件放在 Linux 端 Sharefs 指定目录,Huawei LiteOS 即可访问其需要的文件。假如共享的目录是liteos这个目录,Huawei LiteOS 端访问/liteos 目录,即为 Linux 端实际目录/liteos。在 Huawei LiteOS 端可使用 open/read/write/lseek/close 等系统调用,也可使用 fopen/fread/fwrite/fclose 等标准 I/O 库访问/liteos 目录。具体的使用如下:
4.1 sharefs的使用:
将 Huawei LiteOS 需要访问的文件放在 Linux 端 Sharefs 指定目录,Huawei LiteOS 即可访问其需要的文件。Sharefs 使用步骤如下:
步骤1. Sharefs 在目录 osdrv/ components/sharefs/sharefs 下,在其目录执行./build.sh 编译出Linux 端使用的库(sharefs/out/linux/ liblinux_sharefs.a)和 APP(sharefs/out/linux/sharefs),Huawei LiteOS 端使用的库(sharefs/out/liteos/ libsharefs.a)。(此步骤已通过顶层 SDK 编译执行完成,可不做)
步骤2. Huawei LiteOS/Linux 使用方法
Huawei LiteOS 端使用方法:sharefs/include/sharefs_client.h 为其使用 Sharefs 用到的头文件。首先执行 IPCM 初始化,调用 _ipcm_vdd_init();再调用HI_ShareFs_Client_Init("/liteos");
完成初始化,其传参"/liteos"为 Sharefs 指定访问的文件目录,在 Linux 端需要有一个与其同名的目录。用户可自行指定 Sharefs 访问目录。可使用 HI_ShareFs_Client_Check()接口查看 Sharefs 是否建立连接。返回 true 表示建立连接。方可执行文件访问。可使用 HI_ShareFs_Client_Get_Path()接口获得 Sharefs 指定访问的目录。此目录实际存在于 Linux 端文件系统中。
Linux 端使用方法:首先加载 IPCM 模块,在单板根文件系统下执行/komod/ipcm 或insmod /komod/hi_ipcm.ko;如果采用 APP 执行:sharefs &,如果采用库,则在用户APP 中调用 HI_ShareFs_Server_Init()。
Sharefs 在 Linux 端使用的是用户态程序,其会与其它用户态程序一起竞争 CPU 资源。当 Linux 端 CPU 使用率太高(大80%)时,Sharefs 的 APP 执行效率会受到一定影响,会引起 Huawei LiteOS 端通过 Sharefs 访问 Linux 端文件效率下降,访问时长增加。此时需要提高 Sharefs 进程的优先级优先抢占 CPU 资源,命令:nice --19 sharefs&。采用 Sharefs 库时,需要提高使用其库的 APP 优先级。
hi3559v100 sdk中双系统AMP架构的初步了解的更多相关文章
- C#中判断系统的架构(32位,还是64位)
一种很简单的方法就是根据IntPtr类型的Size属性来判断, //IntPtr.Size在64位为8,在32位为4 public static Boolean Is64Bit() { ) retur ...
- win7+ubuntu双系统中卸载ubuntu方法
双系统中,如果要卸载ubuntu是不能够直接卸载的,需要使用一些特殊的方法.下面就为大家详细的介绍介绍. Step1 MBR引导区修复: 进入win7,下载个软件MbrFix,放在C:\windows ...
- linux驱动程序之电源管理之新版linux系统设备架构中关于电源管理方式的变更
新版linux系统设备架构中关于电源管理方式的变更 based on linux-2.6.32 一.设备模型各数据结构中电源管理的部分 linux的设备模型通过诸多结构体来联合描述,如struct d ...
- Arch Linux中禁用UTC解决双系统时间问题
原因 Windows双系统时间不统一在于时间表示有两个标准:localtime 和 UTC(Coordinated Universal Time) .UTC 是与时区无关的全球时间标准.尽管概念上有差 ...
- 使用u盘重装双系统中的乌班图
之前的乌班图被我玩坏了,故而想重装一个.由于之前的双系统是同学帮我装的,我便到网上找各种资料,鼓弄了一天,终于完事了.把过程记录一下. window10 64bit ubuntu 14.04 desk ...
- 双系统中ubuntu的安装方法
双系统中ubuntu的安装方法 注意:给电脑安装双系统时,一定要先装Windows系统,再安装Linux系统! 原因是电脑开机后,要先执行一段bootloader引导程序:再由引导程序启动操作系统.W ...
- 如何移除双系统mac中的windows系统
双系统 双系统即在电脑的不同分区中安装两个系统,两个系统不会互相影响,但是同时只能有一个系统正在运行,并且必须通过重启的方式来更换系统. 双系统一般由于解决对不同系统的需求,而且在电脑中直接安装系统也 ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...
- 在移动硬盘中安装win10和macos双系统
本文通过在SSD移动硬盘中安装win10和macos双系统,实现操作系统随身携带 小慢哥的原创文章,欢迎转载 目录 ▪ 目标 ▪ 准备工作 ▪ Step1. 清空分区,转换为GPT ▪ Step2. ...
随机推荐
- 应用InstallShield 2015打包软件打包C#程序
大家都明白,程序员写出的程序与用户直接使用的程序之间还有一个简单的环节,就是打包.今天就简单介绍下用InstallShield 2015打包工具进行程序的打包, 有兴趣的可以看看! 首先前面安装打包工 ...
- 利用keras进行手写数字识别模型训练,并输出训练准确度
from keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.lo ...
- iOS----------iPhone导出手机所有短信
第一步:手机连接到itunes 选择本电脑备份 备份的时候不要加密 然后立即备份 第二步:前往文件夹,找到itunes的备份路径~/Library/Application Support/Mo ...
- 微信小程序——表单验证插件WxValidate的二次封装(二)
在上一篇博客<微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装>中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面 ...
- Android项目模块化/组件化开发(非原创)
文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章 一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...
- linux 性能调优工具参考 (linux performance tools)
之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # li ...
- NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研;
为了了解,上来先看几篇中文博客进行简单了解: 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?(较为优秀的文章) 使用NCCL进行NVIDIA GPU卡之间的通信(GPU卡通信模式 ...
- The 2017 ACM-ICPC Asia Beijing Regional Contest
传送门 C - Graph 题意: 给出一个\(n\)个点\(m\)条边的无向图.现在有多组询问,每组询问给出区间\([l,r]\),问区间\([l,r]\)中有多少点对是连通的. 思路: 若考虑只有 ...
- 201871010116-祁英红《面向对象程序设计(java)》第十周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- C语言解决汉诺塔问题!
很难受,看了很多资料才明白..... 对这个问题分析,发现思路如下:有n个黄金盘,要先把n-1个弄到B柱上,再把第n个弄到C柱上,然后把n-1个借助A柱弄到C柱上. 实现的函数如下: void f(i ...