Synopsys MetaWare for Linux 安装与编译指南
Posted 17岁boy想当攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Synopsys MetaWare for Linux 安装与编译指南相关的知识,希望对你有一定的参考价值。
目录
MetaWare简介
MetaWare是一个针对ARC架构处理器的一款开发框架,它类似于Zephyr、FreeRtos,但它不是一个操作系统,它是一个针对于ARC架构上的开发解决方案,通过它可以快速构建AI项目或音频项目以及其它嵌入式项目,让开发者们快速上手ARC架构开发,由Synopsys公司专为ARC架构开发的解决方案,Synopsys有许多基于ARC架构的芯片,为了快速建立芯片程序开发了一套解决方案。
安装与编译前准备
安装GCC7.3
如果想要编译MetaWare项目需要“linux_gcc7_default.tar.gz”(GCC7.3)
你可以在这里下载到它:linux_gcc7_default.tar.gz-C文档类资源-CSDN下载
首先你需要卸载当前环境的gcc
下载完成之后解压:
tar -xvf linux_gcc7_default.tar.gz
解压之后会在解压目录里生成一个“linux”的文件夹,这个文件夹中包含了所需的gcc可执行文件
然后我们设置需要设置一个环境变量:VG_GNU_PACKAGE,这个环境变量指向gcc7存在的目录
export VG_GNU_PACKAGE=~/linux
然后执行source设置环境
source $VG_GNU_PACKAGE/source_me_gcc730.sh
然后使用gcc --version可以查看一下是否有7.3版本
zhihao@zhihao-Z590-UD-AC:~/ARC$ gcc --version
gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MetaWare安装
你可以在官网中进行申请于购买安装媒介:dw_arc_metaware_ev
MetaWare是收费方案,不是免费的。
下载后你会得到四个文件:
文件名 | 作用 |
---|---|
mwev_S-2021_06_linux_x64_install.bin | 安装程序 |
mwev_S-2021_06_linux_x64_install.001 | 安装文件 |
mwev_S-2021_06_linux_x64_install.002 | 安装文件 |
mwev_S-2021_06_linux_x64_install.003 | 安装文件 |
将这四个文件放入同一文件夹中,并在Linux中给予可执行权限:
chmod +x mwev_S-2021_06_linux_x64_install.bin
然后执行:
./mwev_S-2021_06_linux_x64_install.bin
可以看到如下界面,然后点击“Next”
选中“I accept the terms of the License Agreement”然后点击Next
然后输入你购买的密钥,最后一直“Next”就可以自动安装了
然后选择好安装路径,在点击“Next”
这一步选择你需要的TOOLS,不需要的可以去掉,根据需求来定,一般全部选中。
这一步点击“Install”即可开始自动化安装,点击之后就可以等待安装完毕了。
安装完成之后进入安装目录,执行setup.sh
cd ~/ARC
source setup.sh
正常情况下会出现如下输出:
Setup EV Runtime environment...
OCV_HOME is set to '/home/zhihao/ARC/opencv'
Setup EV CNN SDK environment...
EV_CNNSDK_HOME is set to '/home/zhihao/ARC/cnn_tools'
WARING: Synopsys models not found. EV_CNNMODELS_HOME is not defined.
Please clone latest release Synopsys Caffe models repository using Git LFS from:
https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models
INFO: MWEV ASIP tools set-up success for Tofino.
INFO: MWEV ASIP tools set-up success for Toronto.
INFO: MWEV ASIP tools set-up success for Vancouver.
EV_CAFFE_HOME is set to '/home/zhihao/ARC/synopsys_caffe'
EVSS_RT_HOME is set to '/home/zhihao/ARC/ev_runtime/software'
Setup EV CNN SDK environment... DONE!
Checking tools in EV CNN SDK environment...
Found Python version is 3.6.5 : OK
Found cmake version is 3.18.2 : OK
Found make version is 4.2.1 : OK
Found ccac version is 2021.06 : OK
Found gcc version is 7.3.0 : OK
Found g++ version is 7.3.0 : OK
All checked tools are available and have proper versions
Setup EV CNN SDK environment... DONE!
==================================================
可能会出现这个问题:
Setup EV CNN SDK environment...
EV_CNNSDK_HOME is set to '/<install_dir>/cnn_tools'
ERROR: Synopsys Caffe models not found. EV_CNNMODELS_HOME is not defined.
Please clone latest release Synopsys Caffe models repository using Git LFS from:
https://github.com/foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models
这个原因是因为EVSS_RT_HOME路径没有设置,你可以先设置这个环境变量指向安装路径里的“ev_runtime/software”就可以了
export EVSS_RT_HOME=~/ARC/ev_runtime/software
然后在重新执行一次“source setup.sh”即可,这个环境变量我下面会介绍一下它的作用是什么。
增加你的芯片文件
在MetaWare安装目录的“/ev_runtime/software/config/set”里可以看到不同的架构信息,这些芯片都是基于ARC架构,如EV系列是Synopsys公司开发的。
这些目录的作用就是描述芯片信息,如果你有新的框架,那么需要将它放入到这个目录中
zhihao@zhihao-Z590-UD-AC:~/ARC/ev_runtime/software/config/set$ ls
common EV64_full
EV61_2mpy EV64_full_cnn3520
EV61_base EV64_full_cnn880
EV61_base_cnn1760 EV64_full_dnn1760
EV61_base_cnn880 EV64_full_dnn3520
EV61_base_dnn1760 EV64_full_dnn3520_nhvdk
EV61_base_dnn3520 EV64_full_dnn880
EV61_base_dnn880 EV64_full_opencl
EV61_full EV71_base
EV61_full_cnn1760_demo EV71_full
EV61_full_cnn880 EV71_full_dnn880_12b_demo
EV61_full_cnn880_demo EV71_full_dnn880_12b_demo_nhvdk
EV61_full_cnn880_hsdkev_xio EV71_full_dnn880_8b_demo
EV61_full_dnn1760 EV71_full_dnn880_8b_demo_nhvdk
EV61_full_dnn1760_demo EV71_full_nhvdk
EV61_full_dnn3520_demo EV71_vfpu
EV61_full_dnn880 EV72_base
EV61_full_dnn880_demo EV72_full
EV61_full_dnn880_hsdkev EV72_vfpu
EV61_full_dnn880_nhvdk EV74_armlinux_vdk
EV61_vfpu EV74_full
EV62_base ev_native
EV62_base_dnn1760 host_aarch64-linux_vdk
EV62_base_dnn880 host_arclinux_hsdk
EV62_full host_native_vdk
EV62_full_cnn880 intel_mcf_ev71_dnn880
EV62_full_dnn1760 native
EV62_full_dnn1760_demo vpx5_integer_base
EV62_full_dnn3520 vpx5_integer_full
EV62_full_dnn3520_hsevvdk vpx5_max
EV62_full_dnn3520_nhvdk vpx5_vfpu_base
EV62_full_dnn880 vpx5_vfpu_full
EV62_full_dnn880_demo vpx5x2_integer_base
EV62_vfpu vpx5x2_vfpu_full
EV64_base vpx5x4_integer_base
EV64_base_dnn880 vpx5x4_vfpu_full
这些芯片描述目录一般由4个文件,1个文件夹组成
arc.met arc.tcf defs.cmake evss evss_config.mk
其中“arc.met”是最关键的文件,里面包含了芯片的内存信息,打开以后可以看到相关内存配置,如果是基于ARC架构的芯片,我们通常修改这个配置文件就可以了,将里面的内存地址信息修改成我们的架构就可以了。
_STACKSIZE = 0x0020_0000;
__INTV_BASE = 0x0000_0000;
__HOSTCOM_OFFSET = 0x0000_1000;
# __AUX_VOL_START and __AUX_VOL_SIZE need to be multiple of 256 MiB
__AUX_VOL_START = 0x4000_0000; __AUX_VOL_SIZE = 0xC000_0000;
# Coherent aperture size needs to be power of 2, >= 4096
# Coherent aperture start address needs to be a multiple of its size
__STU_COH0_START = 0x0000_0000; __STU_COH0_SIZE = 0x4000_0000;
__STU_COH1_START = 0x0000_0000; __STU_COH1_SIZE = 0x0000_0000;
__HEAP_AREA_START = 0x1000_0000; _HEAPSIZE = 0x3000_0000;
__AUX_APP_DATA_AREA_START = 0x4000_0000; __AUX_APP_DATA_AREA_SIZE = 0x1000_0000;
__UNCACHED_AREA_START = 0x5000_0000; __UNCACHED_AREA_SIZE = 0x3000_0000;
__CNDC_AREA_START = 0x0000_0000; __CNDC_AREA_SIZE = 0x0000_0000;
__CSM_HEAP_START = 0x0000_0000; __CSM_HEAP_SIZE = 0x0000_0000;
#__CNN_DMA_COH_START
MEMORY
DRAM : ORIGIN = 0x0000_0000, LENGTH = 0x8000_0000
CSM : ORIGIN = 0xA000_0000, LENGTH = 0x0008_0000
VCCM : ORIGIN = 0x9000_0000, LENGTH = 0x0002_0000
SECTIONS
.ivt __INTV_BASE SIZE(1024) (TEXT): > DRAM # Interrupt table
.ivh (TEXT): > DRAM # Interrupt handlers
shr_mem __HOSTCOM_OFFSET (TEXT): > DRAM # Host/device shared ctl data
# Loadable sections
GROUP:
.text? ALIGN(64): *('.text$crt*')
* (TEXT) ALIGN(64):
* (LIT) ALIGN(64):
.rodata ALIGN(64):
.sdata? ALIGN(64):
.sbss? ALIGN(64):
* (DATA) ALIGN(64):
> DRAM
如果你想为你的项目加一些编译选项,可以在“arc.tcf”文件中增加
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
if(__DEFS_CMAKE__)
return()
endif()
set(__DEFS_CMAKE__ TRUE)
set(EVSS_VDSP 1)
set(EVSS_CFG_HAS_OCL 1)
add_definitions("-DMSS_CLKCTRL_CLOCK_RATIO_ENABLE")
set(EVCNN_VERSION 5)
set(VDSP_ONLY 1)
set(DEVSS_CFG_NUM_SLICE 0)
set(EVSS_CFG_NUM_CORE 1)
编译ev_runtime
首先我们需要编译“ev_runtime/software”项目,这个项目是为解决方案提供底层API,最终编译会生成一个.a的静态库
首先需要设置一个环境变量:
EVSS_RT_HOME:指向ev_runtime/software的完整路径
export EVSS_RT_HOME=~/ARC/ev_runtime/software
设置完成之后cd到ev_runtime/software
cd ev_runtime/software
然后使用make命令直接编译
make -j14 install EVSS_CFG=EV61_full_cnn880
这条命令的参数:
-j14:多线程编译,使用14个线程编译当前项目(根据你机器性能而定)
install:编译后安装到当前环境
EVSS_CFG:芯片描述目录,就是刚刚说到的“ev_runtime/software/config/set”里的描述目录,注意芯片描述目录只能放入到这个文件夹里,不能是绝对路径
编译cnn_tools
如果你的项目需要用到CNN人工智能方面的API,那么需要编译这个TOOLS
编译cnn_tools需要Synopsys Caffe的模型
你可以在: GitHub - foss-for-synopsys-dwc-arc-processors/synopsys-caffe-models: Caffe models for use with Synopsys DesignWare EV6x Processors 下载到它,可以使用git clone下来,文件比较大,因为包含了ssd等不同的模型集合。
下载下来以后你可以看到如下文件体系:
zhihao@zhihao-Z590-UD-AC:~/synopsys-caffe-models$ ls
archived_models caffe_models git_sparse_download.bat git_sparse_download.sh README.md
其中的“caffe_models”目录就是Synopsys Caffe的模型文件,打开这个文件夹可以看到许多不同的文件模型:
zhihao@zhihao-Z590-UD-AC:~/synopsys-caffe-models/caffe_models$ ls
alexnet facedetect_v1 icnet inception_v2 mtcnn_v1 resnet_152 retinanet srgan yolo_tiny
DAN facedetect_v2 imagenet_mean inception_v3 openpose resnet_50 segnet ssd yolo_v1
deeplab face_net images inception_v4 pspnet resnet50_ssd shufflenet_v1 ssd_mobilenet_v2_coco yolo_v2_coco
denoiser faster_rcnn_resnet101 inception_resnet_v1 lenet pvanet ResNeXt_101 shufflenet_v2 unet yolo_v2_tiny
densenet fcn inception_resnet_v2 mobilenet README.md ResNeXt_152 squeeze vdsr yolo_v2_voc
evgen_util.bash googlenet inception_v1 mobilenet_ssd resnet_101 ResNeXt_50 srcnn vgg16 yolo_v3
其中可以看到facedetect人脸,以及yolo物体识别方面的模型,这些模型文件是转化为Synopsys Caffe模型格式后的模型文件。
我们将这个“caffe_models”文件夹copy到cnn_tools文件夹中
首先在cnn_tools目录下创建一个"cnn_models"文件夹
mkdir cnn_models
然后将caffe_models文件夹copy到刚刚创建的cnn_models文件夹中
cp -r ~/synopsys-caffe-models/caffe_models ./cnn_models
然后设置两个环境变量:
EV_CNNMODELS_HOME:这个环境变量指向模型文件存在的文件夹,在编译cnn时,cmake脚本会自动读取这个变量获取models的地址
EV_CNNSDK_HOME:指向cnn_tools的完整路径
export EV_CNNMODELS_HOME=~/ARC/cnn_tools/cnn_models
export EV_CNNSDK_HOME==~/ARC/cnn_tools
设置完成之后cd进入到cnn_tools的目录中
cd cnn_tools
然后输入如下命令:
make -j14 install EVSS_CFG=EV61_full_cnn880
编译examples
我们可以编译一个cnn_tools里的一个演示项目
首先cd到examples目录中
cd cnn_tools/
然后ls可以查看下面有多少演示项目
zhihao@zhihao-Z590-UD-AC:~/ARC/cnn_tools/examples$ ls
classification common demos detection face_recognition getting_started image_processing Makefile pose_estimation README.md scene_segmentation
我这里编译getting_started里的项目
这里编译FaceDetect-V1项目,是一个面部识别的项目
zhihao@zhihao-Z590-UD-AC:~/ARC/cnn_tools/examples/getting_started$ ls
FaceDetect-V1 FaceDetect-V2 LeNet
cd进入这个目录
cd FaceDetect-V1
然后输入如下命令
make build EVSS_CFG=intel_mcf_ev71_dnn880 CNN_ABSTRACTION=host_fixed
编译完成之后会在当前目录下生成build目录,进去之后就可以看到生成的out文件:
CMakeCache.txt cmake_install.cmake cnn_src evgencnn Makefile run_arc.args
CMakeFiles cnn_obj compile_commands.json facedetect_v1.out map.txt run_arguments.mk
facedetect_v1.out就是可以烧录到芯片里去的文件
如果你想重新编译库的话,可以加上“EVSS_PROFILE=small”就可以快速编译,不需要完全重新编译,这个情况只在没有特别大的改动的情况下。
如果想要编译Debug版本的话可以加上“EVSS_DBG=1”
如果不想每次编译都重新设置环境变量,可以将你的环境变量添加到bashrc文件中:
export LM_LICENSE_FILE=密钥
export SNPSLMD_LICENSE_FILE=密钥
export VG_GNU_PACKAGE=~/linux
source $VG_GNU_PACKAGE/source_me_gcc730.sh
source ~/ARC/setup.sh
export EV_CNNMODELS_HOME=~/ARC/cnn_tools/cnn_models
export EVSS_RT_HOME=~/ARC/ev_runtime/software
export EV_CNNSDK_HOME=~/ARC/cnn_tools
以上是关于Synopsys MetaWare for Linux 安装与编译指南的主要内容,如果未能解决你的问题,请参考以下文章