首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • 1684XB-32T

    • 一、简介

      • AIBOX-1684XB-32简介
    • 二、快速上手

      • 初次使用
      • 网络配置
      • 磁盘使用
      • 内存分配
      • 风扇策略
      • 固件升级
      • 交叉编译
      • 模型量化
    • 三、应用开发

      • 开发简介

        • Sophgo SDK开发
        • SOPHON-DEMO简介
      • 大语言模型

        • 部署Llama3示例
        • Sophon LLM_api_server开发
        • 部署MiniCPM-V-2_6
        • Qwen-2-5-VL图片视频识别DEMO
        • Qwen3-chat-DEMO
        • Qwen3-Qwen Agent-MCP开发
        • Qwen3-langchain-AI Agent
      • 深度学习

        • ResNet(图像分类)
        • LPRNet(车牌识别)
        • SAM(通用图像分割基础模型)
        • YOLOv5(目标检测)
        • OpenPose(人体关键点检测)
        • PP-OCR(光学字符识别)
    • 四、资料下载

      • 资料下载
  • 1684X-416T

    • 简介

      • AIBOX-1684X-416简介
    • Demo简单操作指引

      • shimeta智慧监控demo的简单使用说明

交叉编译

1.编译环境

C++程序要在板端运行,是需要对依赖文件进行编译的(也可以直接使用提供的可执行文件)。这里为了节省边缘设备的压力,选择使用一个X86的linux环境进行交叉编译(例子使用WSL进行,关于WSL的使用可以查看官方文档)。

搭建交叉编译环境,这里提供两种方式:

(1)通过apt安装交叉编译工具链:

如果您的系统和目标SoC平台的libc版本相同(可通过ldd --version命令进行查询),那么您可以使用如下命令安装:

sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

卸载方法:

sudo apt remove cpp-*-aarch64-linux-gnu

如果您的环境不满足上述要求,建议使用第(2)种方法。

(2)通过docker搭建交叉编译环境:

可以使用我们提供的docker镜像--stream_dev.tar作为交叉编译环境。

#安装dfss下载工具
pip3 install dfss
#安装docker镜像
python3 -m dfss --url=open@sophgo.com:sophon-demo/common/docker/stream_dev.tar # ubuntu 20.04, gcc-9

如果是首次使用Docker, 可执行下述命令进行安装和配置(仅首次执行需要该操作):

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

在下载好的镜像目录中加载镜像

docker load -i stream_dev.tar

可以通过docker images查看加载好的镜像,默认为stream_dev:latest。

创建容器

docker run --privileged --name stream_dev -v $PWD:/workspace  -it stream_dev:latest
# stream_dev只是举个名字的例子, 请指定成自己想要的容器的名字
#已有docker容器可通过下面命令打开
docker run -v $PWD:/workspace  -it stream_dev:latest

容器中的workspace目录会挂载到您运行docker run时所在的宿主机目录,您可以在此容器中编译项目。workspace目录在根目录下,该目录下的改动会映射到本地目录中对应文件的改动。

注意:创建容器时需要到soc-sdk(依赖编译环境)的父目录以及以上目录

2.打包依赖文件

2.1.打包libsophon

对libsophon_soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压。

文件可在SDK包的该路径下找到:SDK-23.09-LTS-SP4\SDK-23.09-LTS-SP4\sophon-img_20241227_105055,可通过命令下载SDK包

#可通过命令下载SDK包(有libsophon_soc_x.y.z_aarch64.tar.gz文件可跳过此操作)
wget https://sophon-assets.sophon.cn/sophon-prod-s3/drive/24/12/31/10/SDK-23.09-LTS-SP4.zip

# 创建依赖文件的根目录
mkdir -p soc-sdk
# 解压libsophon_soc_x.y.z_aarch64.tar.gz
tar -zxf libsophon_soc_${x.y.z}_aarch64.tar.gz
# 将相关的库目录和头文件目录拷贝到依赖文件根目录下
cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/lib soc-sdk
cp -rf libsophon_soc_${x.y.z}_aarch64/opt/sophon/libsophon-${x.y.z}/include soc-sdk

2.2.打包sophon-ffmpeg和sophon-opencv

对sophon-mw-soc_x.y.z_aarch64.tar.gz,x.y.z表示版本号,并进行解压。

文件可在SDK包的该路径下找到:SDK-23.09-LTS-SP4\SDK-23.09-LTS-SP4\sophon-mw_20241223_163201

# 解压sophon-mw-soc_x.y.z_aarch64.tar.gz
tar -zxf sophon-mw-soc_${x.y.z}_aarch64.tar.gz
# 将ffmpeg和opencv的库目录和头文件目录拷贝到soc-sdk目录下
cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/lib soc-sdk
cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-ffmpeg_${x.y.z}/include soc-sdk
cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/lib soc-sdk
cp -rf sophon-mw-soc_${x.y.z}_aarch64/opt/sophon/sophon-opencv_${x.y.z}/include soc-sdk

3.进行交叉编译

bmcv模式

交叉编译环境搭建好后,使用交叉编译工具链编译生成可执行文件,这里以sophon-demo中的YOLOv5的C++例程为例。

cd cpp/yolov5_opencv
mkdir build && cd build
#请根据实际情况修改-DSDK的路径,需使用绝对路径。
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk/ ..
make

编译完成后在对应的目录会生成.soc文件,例如如:cpp/yolov5_bmcv/yolov5_bmcv.soc。

sail模式

如果您使用sophon-sail接口,需要先给soc环境(即开发板环境)配置sophon-sail。配置方法如下:

配置sail环境

通过交叉编译的方式(这里例子使用WSL进行),编译出包含bmcv,sophon-ffmpeg,sophon-opencv的SAIL。

如编译平台libc版本与目标版本不同则需要进入docker环境

docker run -v $PWD:/workspace  -it stream_dev:latest
#解压sophon-sail_3.8.0.tar.gz
tar -zvxf sophon-sail_3.8.0.tar.gz
#进入到sophon目录下:cd sophon
mkdir build && cd build

cmake -DBUILD_TYPE=soc -DBUILD_PYSAIL=OFF -DCMAKE_TOOLCHAIN_FILE=../cmake/BM168x_SOC/ToolChain_aarch64_linux.cmake -DLIBSOPHON_BASIC_PATH=../../libsophon_soc_0.5.1-LTS_aarch64/opt/sophon/libsophon-0.5.1/ -DFFMPEG_BASIC_PATH=../../sophon-mw-soc_0.12.0_aarch64/opt/sophon/sophon-ffmpeg_0.12.0/ -DOPENCV_BASIC_PATH=../../sophon-mw-soc_0.12.0_aarch64/opt/sophon/sophon-opencv_0.12.0/ ..

make sail

安装SAIL动态库及头文件,程序将自动在源码目录下创建build_soc,编译结果将安装在build_soc下面

make install

将build_soc文件夹下的sophon-sail拷贝至目标SOC的/opt/sophon目录下,即可在soc上面进行调用。

交叉编译环境搭建好后,使用交叉编译工具链编译生成可执行文件。

cd cpp/yolov5_sail
mkdir build && cd build
#请根据实际情况修改-DSDK和-DSAIL_PATH的路径,需使用绝对路径。
cmake -DTARGET_ARCH=soc -DSDK=/path_to_sdk/soc-sdk -DSAIL_PATH=/wrokspace/sophon-sail/build_soc/sophon-sail ..
make

编译完成后,会在yolov5_sail目录下生成yolov5_sail.soc。

因为这里移动sophon-sail到的是/opt/sophon目录,如果使用ssh连接进行文件传送需要进入root账户下。root账户无初始密码,使用前需要先用linaro账户做sudo passwd root设置密码。

一般linux系统是默认禁止远程登录root用户,需要进行下面操作:

编辑配置文件

sudo vim /etc/ssh/sshd_config
#文件中加入
PermitRootLogin yes

退出并保存,重启ssh

sudo service sshd restart

在您按照教程将sophon-sail的库文件拷贝到目标soc上之后,您还需要设置以下环境变量:

echo 'export LD_LIBRARY_PATH=/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
在 GitHub 上编辑此页
上次更新:
贡献者: xwdong
Prev
固件升级
Next
模型量化