主要是一些datasheet,demo板的原理图。
板端,pc端,手机端所使用到的开发调试维护的软件包,工具包和文档
在soc上部署的amp构架,一个linux,一个是huaweiliteos。两个系统间的通信机制:ICMP
Linux+HuaweiLiteOS双系统业务部署中,媒体业务的硬件资源及功能实现都部署在HuaweiLiteOS端,并通过核间通信,把媒体服务延伸到Linux端,Linux提供和HuaweiLiteOS端相同的接口定义。这就需要Linux和HuaweiLiteOS提供核间通信机制,为媒体业务提供消息通信和大块数据通信机制。核间通信组件IPCM就是专门为Linux+HuaweiLiteOS双系统核间通信设计的底层组件。
IPCM的底层通信机制基于共享内存+中断方式实现。
IPCM是基于共享内存区域实现多核通信的,每个核(OS)拥有一块自己的内存区域(基址+长度),同时知道其它每个核(OS)拥有的内存区域(基址+长度)。
发送消息(带消息头)时,需指定目标核ID(target)和端口(port),将消息填充到目标的内存区域。
接收消息时,从自己的内存区域读取数据,根据消息头读取一个消息。
双核之间通过GIC中断通知对方有消息准备好,需要对方读取。
Hi3559V100在IPCM基础上再封装实现HisysLink子系统,一般情况下不直接访问IPCM接口进行双核通信。这里只介绍IPCM模块的初始化动作。
挂载hi_ipcm.ko
调用_ipcm_vdd_init();初始化IPCM模块。
由于IPCM使用一片内存区域供Linux与HuaweiLiteOS共同访问实现消息通信。当执行rmmodhi_ipcm卸载完Linux的IPCM模块后,也需要在HuaweiLiteOS调用_ipcm_vdd_cleanup去初始化IPCM。如果Linux与HuaweiLiteOS两端初始化与去初始化IPCM不一致(比如一端去初始化并再次初始化IPCM,另一端不执行相应操作),将会导致内部共享内存区域未同步,造成访问异常地址而出现系统挂死。
HuaweiLiteOS上运行的某些应用需要进行一些配置文件的读写和临时中间文件的产生和删除。但Hi3559V100的flash、sd、usb均部署在Linux端,导致HuaweiLiteOS无法使用yaffs、FAT之类文件系统进行文件的访问。因此开发Sharefs文件系统,在HuaweiLiteOS端虚拟一个文件系统,利用IPCM通信和共享内存,实现其读写Linux上指定目录下的内容。Sharefs可以帮助HuaweiLiteOS从Linux端读写文件,类似于NFS。Sharefs指定访问Linux的目录可作为flash,sd,usb,nfs等的挂载点。这样,可实现HuaweiLiteOS通过Sharefs访问yaffs、FAT、NFS等文件系统。将HuaweiLiteOS需要访问的文件放在Linux端Sharefs指定目录,HuaweiLiteOS即可访问其需要的文件。假如共享的目录是liteos这个目录,HuaweiLiteOS端访问/liteos目录,即为Linux端实际目录/liteos。在HuaweiLiteOS端可使用open/read/write/lseek/close等系统调用,也可使用fopen/fread/fwrite/fclose等标准I/O库访问/liteos目录。具体的使用如下:
将HuaweiLiteOS需要访问的文件放在Linux端Sharefs指定目录,HuaweiLiteOS即可访问其需要的文件。Sharefs使用步骤如下:
步骤1.Sharefs在目录osdrv/components/sharefs/sharefs下,在其目录执行./build.sh编译出Linux端使用的库(sharefs/out/linux/liblinux_sharefs.a)和APP(sharefs/out/linux/sharefs),HuaweiLiteOS端使用的库(sharefs/out/liteos/libsharefs.a)。(此步骤已通过顶层SDK编译执行完成,可不做)
步骤2.HuaweiLiteOS/Linux使用方法
HuaweiLiteOS端使用方法: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执行效率会受到一定影响,会引起HuaweiLiteOS端通过Sharefs访问Linux端文件效率下降,访问时长增加。此时需要提高Sharefs进程的优先级优先抢占CPU资源,命令:nice--19sharefs&。采用Sharefs库时,需要提高使用其库的APP优先级。