×
分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

搭建MLU220-SOM交叉编译环境及BSP源码包编译验证 opabinia2022-08-25 10:43:01 回复 查看 经验交流
搭建MLU220-SOM交叉编译环境及BSP源码包编译验证
分享到:

mlu220-som

MLU220-SOM交叉编译工具集


1. 概述

工具集主要用于搭建基于寒武纪MLU220-SOM的交叉编译环境以及一些常用实例的交叉编译与验证。

此工具集开发宗旨是"一键编译与验证", 力求压缩环境搭建与功能验证的时间成本, 以便更快上手MLU220-SOM

mlu220-som

功能说明

此工具包集成了如下功能:

  • 基于Dockerfile自动编译Docker镜像 >> 启动Docker容器

  • 系统完整源码包交叉编译与验证

  • CNStream交叉编译与验证

  • CNRT交叉编译与验证

  • FFmpeg-MLU交叉编译与验证

  • CNCodec交叉编译与验证

  • EasyDK交叉编译与验证

  • 单独交叉编译第三方常用工具: GFlags、Glogs、OpenCV、FFMpeg、Live555、FreeType、Perf

硬件环境准备:

名称数量备注
开发主机/服务器一台主流配置即可
MLU220SOM一台
电源适配器一套12V 2A DC电源输出
USB转TTL串口线一条

软件环境准备:

名称版本/文件备注
Linux OSUbuntu16.04/Ubuntu18.04/CentOS7宿主机操作系统
MLU220-SOM交叉编译工具集mlu220-cross-compile-docker-imageMLU220-SOM交叉编译工具集
Driver_MLU270neuware-mlu270-driver-dkms_4.9.2_all.debMLU270驱动安装包(依操作系统选择)
CNToolkit_MLU270cntoolkit_1.7.3-2.ubuntu16.04_amd64.debNeuware SDK For MLU270(依操作系统选择)
CNToolkit_MLU220EDGEcntoolkit-edge_1.7.3-1_arm64.tar.gzNeuware SDK For MLU220
GCC_LINARO_MLU220EDGEgcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tgzARM64 交叉编译器
GCC_ARMM0_MLU220EDGEgcc-arm-none-eabi-8-2018-q4-major.tar.gzM0 交叉编译器

注: 以上软件环境中文件名词, 如有版本升级及名称变化, 可以在 env.sh 中进行修改。

下载地址:

Ubuntu16.04: http://mirrors.aliyun.com/ubuntu-releases/16.04

MLU220-SOM交叉编译工具集: https://github.com/CambriconKnight/mlu220-cross-compile-docker-image

Neuware SDK: https://cair.cambricon.com/#/home/catalog?type=SDK%20Release

其他开发资料, 可前往寒武纪开发者社区注册账号按需下载。也可在官方提供的专属FTP账户指定路径下载。

预装软件

以下软件/工具已经安装到Docker容器中了:

  • curl

  • git

  • wget

  • vim

  • cmake

  • make

  • opencv(x86)

  • glog(x86)

  • ssh

  • tree

  • minicom

  • tftpd

  • nfs

  • net-tools

  • cndev

  • cndrv

  • cnrt

  • cncodec

  • gcc-linaro

  • gcc-arm-none-eabi

  • cntoolkit-edge

环境变量

以下环境变量在Docker容器中已经设置:

  • BIN_DIR_GCC_Linaro=/opt/work/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/bin

  • BIN_DIR_GCC_ARM=/opt/work/gcc-arm-none-eabi-8-2018-q4-major/bin

  • PATH=BINDIRGCCLinaro:BIN_DIR_GCC_ARM:$PATH

  • NEUWARE_HOME=/opt/work/neuware/pc

2. 目录结构

.
├── build-image-mlu220-cross-compile.sh     (编译出MLU220交叉编译开发环境的脚本)
├── clean.sh                                (清理Build出来的临时目录或文件,包括镜像文件,已加载的镜像,已加载的容器等)
├── cncodec                                 (cncodec的交叉编译开发目录,未完......待自测验证后提交)
├── cnrt                                    (cnrt的交叉编译开发目录,未完......待自测验证后提交)
├── cnstream                                (cnstream的交叉编译开发目录,已完)
├── docker                                  (存储dockerfile相关文件)
├── easydk                                  (easydk的交叉编译开发目录,未完......待自测验证后提交)
├── ffmpeg-mlu                              (ffmpeg-mlu的交叉编译开发目录)
├── 3rdparty                                (3rdparty的交叉编译开发目录,未完......待自测验证后提交)
├── load-image-mlu220-cross-compile.sh      (加载docker镜像)
├── README.md                               (readme)
├── res                                     (readme文档中涉及到的图片资源存放路径)
├── run-container-mlu220-cross-compile.sh   (启动docker容器)
└── tools                                   (交叉编译中常用的小工具和脚本)


3. 下载源码

git clone https://github.com/CambriconKnight/mlu220-cross-compile-docker-image.git

4. 编译镜像

#编译完成后,会在本地生成一个docker镜像。
#编译Docker镜像:安装 gcc-linaro + cntoolkit-edge
./build-image-mlu220-cross-compile.sh -l 1 -c 1
#编译Docker镜像:安装 Neuware + gcc-linaro + gcc-arm
#./build-image-mlu220-cross-compile.sh -n 1 -l 1 -a 1
#编译Docker镜像:安装 Neuware + gcc-linaro
#./build-image-mlu220-cross-compile.sh -n 1 -l 1
#编译Docker镜像:安装 Neuware + gcc-arm
#./build-image-mlu220-cross-compile.sh -n 1 -a 1

编译后会在docker目录下生存一个镜像文件。$VERSION版本以实际为准

......
====================== save image ======================
-rw-rw-r-- 1 root root 3785447424 7月  27 18:35 ./docker/image-ubuntu16.04-mlu220-cross-compile-$VERSION.tar.gz

5. 加载镜像

#加载Docker镜像
./load-image-mlu220-cross-compile.sh

6. 启动容器

#启动Docker容器
./run-container-mlu220-cross-compile.sh

7. 环境验证

#执⾏以下命令,确认aarch64-linux-gnu-gcc版本信息:
aarch64-linux-gnu-gcc -v
#执⾏以下命令,确认arm-none-eabi-gcc版本信息:
arm-none-eabi-gcc -v

8. 源码包编译与验证

8.1. 完整编译

#进入默认目录
cd /opt/work
mkdir opensrc
#拷贝源码包(非必要)。拷贝在driver 包的release/neuware/opensrc ⽬录下有opensrc.tar.gz 压缩⽂件
#cp /home/ftp/mlu220/IVA-1.6.106/mlu220edge/release/neuware/opensrc/opensrc.tar.gz ./
#(直接)解压源码包。源码包以实际共享目录为准,解压后,可以得到开源的源码。
tar zxf /home/ftp/mlu220/IVA-1.6.106/mlu220edge/release/neuware/opensrc/opensrc.tar.gz -C /opt/work/opensrc
#编译完整源码包
cd /opt/work/opensrc/mlu220_build/build/
make plat=edge
  • 常见问题-1:

问题描述:如果遇到如下错误。

......./ramdisk_recovery.img
./tools/generate_bsp_pkg.sh: 35: ./tools/generate_bsp_pkg.sh: pushd: not found
md5sum: ./bsp.tar.gz: No such file or directory
./tools/generate_bsp_pkg.sh: 37: ./tools/generate_bsp_pkg.sh: popd: not found
./tools/generate_bsp_pkg.sh: 39: ./tools/generate_bsp_pkg.sh: popd: not found
Makefile:197: recipe for target 'linux-sys' failed
make: *** [linux-sys] Error 127

解决措施:可以增加[#!/bin/bash]内容到脚本首行/opt/work/opensrc/mlu220_build/build/tools/generate_bsp_pkg.sh

#手动编辑增加[#!/bin/bash]内容到脚本首行
#vi /opt/work/opensrc/mlu220_build/build/tools/generate_bsp_pkg.sh
#命令方式增加[#!/bin/bash]内容到脚本首行
sed -i '1i\#!/bin/bash' /opt/work/opensrc/mlu220_build/build/tools/generate_bsp_pkg.sh

修改脚本后,再次编译源码包即可。

#编译完整源码包
cd /opt/work/opensrc/mlu220_build/build/
make plat=edge
#查看编译后的文件
/opt/work/opensrc/mlu220_build/build/out/


8.2. 编译结果

编译完成后在/opt/work/opensrc/mlu220_build/build/out/ ⽬录下⽣成如下⽂件:

out
|-- bsp
|-- bsp.tar.gz
|-- bsp_md5.txt
|-- cambricon
|-- cambricon.tar.gz
|-- cambricon_md5.txt
`-- upgrade.sh


版权所有 © 2022 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭