一、 容器(a1000b-sdk-fad-2.3.1.2)
SDK下载:从黑芝麻官网上下载BST A1000 Linux SDK发布包(前提:登录黑芝麻团队给的账号密码)。在SDK发布网页有很多版本,这里我下载的是V2.3.1.2版本。
1 第一种方法
1)解压
解压下载的BST-HS-Linux-SDK-v2.3.1.2压缩包后放进主目录(路径随意)中:
进入BST-HS-Linux-SDK-v2.3.1.2文件夹,将sdk中的SDK-Docker-fad-2.3.1.2.zip解压。这里我将解压后文件夹内的文件a1000b-sdk-fad-2.3.1.2.tar和run_docker.sh,直接放进sdk目录中
2)运行
在 BST-HS-Linux-SDK-v2.3.1.2/sdk 中进入终端:
chmod +x ./run_docker.sh && sudo ./run_docker.sh
容器就创建运行成功了。
3)查看
终端输入:
docker images
就可以看到刚生成的镜像名称、标识(版本)、镜像ID;容器名:a1000b-sdk-fad-2.3.1.2。
如果对镜像和容器关系有不明白的可以看看这篇博客Docker中容器和镜像的关系
2 第二种方法
在VScode中安装BST FADStudio插件(同上从黑芝麻网站下载)。
这里我选择的版本是v3.5.63,解压后根据文件夹内documents中的《BST-FADStudio用户使用手册.html》,安装符合需求的VScode版本和bst-fad-studio-linux-3.5.63.vsix插件。
根据《BST-FADStudio用户使用手册.html》中 “BST-FADStudio-应用构建管理工具-用户指南“这一节配置好容器,成功运行界面如下:
二、宿主机(Ubuntu20.04)
台式电脑,操作系统Ubuntu20.04
三、开发板(A1000)
四、访问A1000
一共有三种访问开发板方法,这里我使用A1000开发板USB接口与电脑主机USB接口连接,如下图所示:
1.安装adb
终端输入:
sudo apt install adb
2.设置权限
终端输入adb devices
时可能会有如下权限问题
修改:
插上usb和不插usb,两次终端输入命令 lsusb
多出来的就是要找的usb接口信息
创建rules文件
sudo gedit /etc/udev/rules.d/51-android.rules
在弹出的文件中写入:
SUBSYSTEM=="usb", ATTR{idVendor}=="3415", ATTRS{idProduct}=="0308", MODE="0666", GROUP="plugdev"
保存,并赋予权限
sudo chmod a+r /etc/udev/rules.d/51-android.rules
重新拔插一次usb :adb devices
进入shell访问A1000:abd shell
五、测试hello demo
先确认容器在运行状态、开发板在宿主机访问状态。
1.在宿主机中创建hello工程
在宿主机中创建一个hello的cmake工程
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(HelloWorld)
add_executable(HelloWorld hello_world.cpp)
hello_world.cpp:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
2.将hello工程从宿主机复制到容器中
将hello工程从宿主机复制到容器中:
docker cp /home/stk/hello a1000b-sdk-fad-2.3.1.2:opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src
在容器运行终端界面,进入/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src目录:
cd /opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src
查看该目录下的文件:
ls
此时我们看到容器的/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src目录中已经有hello工程。
3.在容器中编译hello工程
进入容器中的hello工程目录中:
cd hello
编译:
mkdir build
cd build
cmake ..
make
4.再将容器中编译好的hello工程复制到宿主机上
再将容器中编译好的hello复制到宿主机上:
docker cp a1000b-sdk-fad-2.3.1.2:opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/hello /home/stk/hello
5.将编译好的hello工程从宿主机中复制到开发板上
将编译好的hello工程从宿主机中复制到开发板上:
adb push /home/stk/hello/hello /userdata
在设备的开发板上,输入指令
sync
确保传输过来的文件写入到外存(这步做不做都不影响运行)
此时在设备中userdata文件夹目录下就有了hello工程
6.在开发板中运行hello工程
进入hello中的build文件夹中,cd hello/build
,给HelloWorld赋予权限并运行
chmod a+x HelloWorld
./HelloWorld
题外话:宿主机与容器、宿主机与开发板之间的文件拷贝语法
1.宿主机与容器之间的文件拷贝语法
1)从容器中拷贝文件到宿主机
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
以hello工程为例:
容器名:a1000b-sdk-fad-2.3.1.2 (通过docker images查看你的容器名)
要从容器里面拷贝的文件路径为:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/hello
要拷贝到宿主机的相应路径:/home/fei/hello
那么拷贝指令就为:
docker cp a1000b-sdk-fad-2.3.1.2:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/hello /home/fei/hello
2)从宿主机中拷贝文件到容器
与上相反
docker cp 要拷贝的文件在宿主机的路径 容器名:要拷贝到容器的相应路径
以hello工程为例:
要拷贝的文件在宿主机的路径:/home/fei/hello
容器名:a1000b-sdk-fad-2.3.1.2
要拷贝到容器的相应路径:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/hello
那么拷贝指令就为:
docker cp /home/fei/hello a1000b-sdk-fad-2.3.1.2:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/hello
2.宿主机与开发板之间的文件拷贝语法
1)从宿主机中拷贝文件到开发板
adb push 要拷贝的文件在宿主机的路径 要拷贝到开发板的相应路径
以hello工程为例:
要拷贝的文件在宿主机的路径:home/stk/hello/hello
要拷贝到开发板的相应路径:/userdata
那么拷贝指令就为:
adb push /home/stk/hello/hello /userdata
2)从开发板中拷贝文件到宿主机
adb pull 要拷贝的文件在开发板的路径 要拷贝到宿主机的相应路径
以hello工程为例:
要拷贝的文件在开发板的路径:/userdata/hello
要拷贝到宿主机的相应路径:/home/stk/hello
那么拷贝指令就为:
adb pull /userdata/hello /home/stk/hello