黑芝麻A1000-Ubuntu20.04(二)开发板、容器、宿主机之间的hello-demo编译运行

一、 容器(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值