昇腾Atlas 200I DK A2 C++交叉编译和远程调试教程
一、概述
由于昇腾Atlas 200I DK A2进行开发时存在以下问题:
- 编译速度慢;
- 存储空间有限;
- vscode插件安装较多时启动缓慢,特别是使用GitHub Copilot经常会出现插件重启,断连等问题(现在GitHub Copilot越来越好用了,已经离不开了)。
因此考虑使用交叉编译的方式进行昇腾Atlas 200I DK A2软件开发。
二、环境说明
| 项目 | 开发环境 | 运行环境 |
|---|---|---|
| 架构 | x86-64 工作站 | aarch64 Atlas 200I DK A2 开发套件 |
| 操作系统 | Ubuntu 24.04 | Ubuntu 22.04 |
| 说明 | 用于代码开发、编译和调试的环境 | 用于部署和实际运行的嵌入式设备环境 |
| 软件依赖 | vscode、build-essential、cmake、 gdb-multiarch、gcc-11-aarch64-linux-gnu g+±11-aarch64-linux-gnu | CANN7.0.RC1、openssh-server、gdbserver |
注: 实际代码编写可以在Windows,通过vscode的远程开发插件连接到开发环境进行开发和编译。
三、交叉编译环境搭建
1. 运行环境端
CANN安装在默认路径:/usr/local/Ascend/下,并安装官方要求配置环境变量,具体安装教程可以参考官方教程。
其他依赖软件比如opencv、ffmpeg等无论通过apt安装还是通过源码make install安装,相关的库和头文件都应该在/usr/lib/、/usr/include/下。或者根据官方要求,第三方软件也可以安装在/usr/local/Ascend/thirdpart/aarch64/路径下。
调试是使用gdbserver因此需要安装openssh-server、gdbserver
sudo apt install openssh-server gdbserver
2. 开发环境端
2.1 安装依赖
sudo apt update
sudo apt instll build-essential \cmake \gdb-multiarch \gcc-11-aarch64-linux-gnu \g++-11-aarch64-linux-gnu
2.2 同步环境
创建一个路径来同步运行环境的库和头文件,比如我这里创建/opt/ascend/sysroot。
sudo mkdir -p /opt/ascend/sysroot
export SYSROOT=/opt/ascend/sysroot
同步环境,这里同步了所有的库,第一次同步会花一些时间,如果你明确需要哪些库也可以只同步指定的库,但如果不知道还是推荐同步所有的库和头文件。
rsync -a root@200DK_IP:/usr/lib/ $SYSROOT/usr/lib/
rsync -a root@200DK_IP:/usr/include/ $SYSROOT/usr/include/
rsync -a root@200DK_IP:/usr/local/Ascend/ $SYSROOT/usr/local/Ascend/
注: 1. 这里运行环境我用了root,也可以用其他用户比如HwHiAiUser等;2. 200DK_IP为运行环境的IP地址,请确保可以和开发环境ping通,并安装ssh
2.3 创建环境变量
export CPU_ARCH=aarch64
export SYSROOT=/opt/ascend/sysroot
export INSTALL_DIR=$SYSROOT/usr/local/Ascend/ascend-toolkit/latest
export THIRDPART_PATH=$SYSROOT/usr/local/Ascend/thirdpart/aarch64
四、开发实例
以官方例子,中的YOLOV3_coco_detec
