跳转至

自建环境搭建

1、概述

控制器相关应用程序的开发需要在 ubuntu 主机上先进行交叉编译,才能在控制器上运行,因此在进行项目开发前,需要创建好相关开发环境。

Linux系统通常情况下有三种安装方式:真机双系统、真机单系统、虚拟机。本文提供了在Windows环境下虚拟机开发环境的搭建详细说明,您也可以根据实际情况自行选择其他方案。系统版本推荐使用Ubuntu20.04。

注意

其它Linux版本未经过严格全面测试,在程序开发编译过程中可能会产生不可预知的问题,若您对Linux系统及嵌入式开发不熟悉,建议您使用本文推荐的系统版本。

本文所介绍的虚拟机环境基于VirtualBox,VirtualBox 是由 Oracle 公司开发的一款开源免费的虚拟化软件,它可以在主机操作系统(如 Windows、macOS、Linux)中创建和运行一个或多个“虚拟机”(Virtual Machine, VM),每台虚拟机都可以运行不同的操作系统。

2、VirtualBox安装

控制器虚拟开发环境基于VirtualBox虚拟机,因此需要先行安装好虚拟机软件。

下载VirtualBox虚拟机安装程序,下载完成后双击启动安装程序。

官网下载页面
官网下载页面

安装程序启动后,点击“下一步”,选择“我接受授权协议中条款”,进入下一步

同意授权协议
同意授权协议

选择软件安装目录,其他保持默认即可,然后进入下一步

选择安装目录
选择安装目录

后续选择下一步直到安装结束即可。

3、创建新的开发环境

3.1、创建虚拟机

本文使用的开发环境系统是Ubuntu20.04,因此需要先获取20.04镜像

打开VirtualBox软件,点击“新建”,在页面中填写基本信息,在虚拟光盘处单击右侧“下箭头”,选择“其它”,在文件选择中找到下载的Ubuntu镜像,然后单击“下一步”

选择系统镜像
选择系统镜像

分配虚拟机的内存大小及CPU数量,推荐4G、2核,您也可以根据电脑的实际情况自行更改,然后单击“下一步”

设置虚拟机硬件
设置虚拟机硬件

分配虚拟机硬盘空间,推荐40G,您也可以根据电脑的实际情况自行更改,然后单击“下一步”

设置虚拟机硬盘空间
设置虚拟机硬盘空间

浏览当前虚拟机信息,确认无误后单击“完成”返回。

确认虚拟机信息
确认虚拟机信息

3.2、系统配置

在VirtualBox管理器中选择刚刚创建的虚拟机,单击“启动”,等待虚拟机启动并自动安装系统。

启动虚拟机
启动虚拟机

在用户界面创建用户,等待系统安装完成。

虚拟机系统桌面
虚拟机系统桌面

系统启动完成后,安装增强功能,以便后续可以进行全屏虚拟机、共享剪贴板、设置共享文件夹等操作设置。点击顶部菜单栏中“设备——安装增强功能”

设备菜单
设备菜单

在弹出框中选择Run”,此时左侧Dock中可以看到一个光盘图标,单击“光盘”图标,然后点击“Run Software”,此时会自动执行安装增强功能,等待安装结束即可。

运行增强功能安装
运行增强功能安装

然后在“设备”菜单栏中配置共享文件夹,共享文件夹可以方便的在主机与虚拟机之间共享文件

设备菜单
设备菜单

文件夹路径选择主机上您想共享的文件夹即可,此后该文件夹下的内容虚拟机也可以直接访问

选择共享文件夹路径
选择共享文件夹路径

设置完成后打开终端,输入 ls /share应该会列出共享文件夹下的内容,如果出现权限问题,可以执行如下命令

注意

挂载点路径即为在虚拟机中访问的路径,如上图所示,此时在Linux虚拟机中的共享文件路径为 /share

sudo usermod -aG vboxsf $(whoami)

然后重启系统,此时应该可以正常访问共享文件夹。

3.2、编译环境配置

开发环境需要一些基础工具库的支持,首先要安装更新系统工具库,执行如下命令:

sudo apt-get update
sudo apt-get install openssh-server vim git fakeroot make automake \
autoconf libtool libssl-dev bc dosfstools mtools parted iproute2 kmod \
libyaml-dev device-tree-compiler python flex bison build-essential \
u-boot-tools libncurses-dev lib32stdc++6 lib32z1 libc6:i386

根据设备类型,下载并配置对应的编译环境

警告

建议您不要在虚拟机外部解压下载的gcc压缩包,尤其是在Windows系统下,外部解压有可能造成编译工具链接失效,导致无法进行编译。

BK1000、BK2000

点击下载BK1000、BK2000编译工具,将下载好的交叉编译工具放到共享文件夹目录中,通过如下命令移动编译工具到系统目录并解压

sudo mv /share/BK1000-2000-gcc.zip /opt/
cd /opt
sudo unzip BK1000-2000-gcc.zip

配置Shell 环境变量,将编译工具添加到系统环境变量中

nano ~/.bashrc
export PATH=/opt/BK1000-2000-gcc/bin:$PATH
source ~/.bashrc

然后通过查看version检验编译工具是否安装成功

BK1000-2000 gcc版本
BK1000-2000 gcc版本

BK3000

点击下载 BK3000编译工具,将下载好的交叉编译工具放到共享文件夹目录中,通过如下命令移动编译工具到系统目录并解压

sudo mv /share/BK3000-gcc.zip /opt/
cd /opt
sudo unzip BK3000-gcc.zip

配置Shell 环境变量,将编译工具添加到系统环境变量中

nano ~/.bashrc
export PATH=/opt/BK3000-gcc/bin:$PATH
source ~/.bashrc

然后通过查看version检验编译工具是否安装成功

BK3000 gcc版本
BK3000 gcc版本

4、编译测试程序

4.1、编译程序

在虚拟机任意目录中创建 test.c文件,其内容如下:

#include <stdio.h>
int main(){
    printf("hello world!\n");
    return 0;
}

在终端中进入到 test.c所属目录,输入如下命令编译 test.c文件

#BK1000-2000
arm-linux-gnueabi-gcc -o Test test.c
#BK3000
aarch64-none-linux-gnu-gcc -o Test test.c

编译结束后,会在当前文件夹下生成 Test可执行文件。

4.2、文件上传

4.2.1、 SFTP命令上传

控制器开机默认启动了SFTP服务,SFTP(SSH File Transfer Protocol)是基于 SSH 的安全文件传输协议,用于在本地和远程服务器之间加密传输文件。 打开终端,在终端中通过 sftp命令连接到控制器

sftp root@192.168.10.100

根据提示输入密码(BK1000-2000密码为 root,BK3000密码为 rpdzkj),连接成功后即可进行文件传输操作。 SFTP常用操作命令如下:

  • cd:切换目录
  • put:上传文件
  • get:下载文件

通过如上指令上传编译后的文件,以上传到控制器系统 /root目录下为例

sftp> cd /root
sftp> put Test
SFTP指令上传
SFTP指令上传

4.2.2、运维系统上传

如果您对sftp相关指令不熟悉或者倾向于使用图形化界面工具进行文件上传下载,您可以使用控制器内部的运维系统管理文件,详细说明参见运维系统——文件管理

4.3、执行测试程序

登录到控制器系统中,具体操作方法可以查看串口登录网口登录章节,登录成功后,进入到文件上传目录,执行程序

测试程序执行
测试程序执行