第四章 基于CanMV的C开发环境搭建

1)实验平台:正点原子DNK210开发板

  1. 章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0

3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子K210技术交流企鹅群:605557868

不论是使用CanMV提供的基于C语言和FreeRTOS的应用开发方式开发应用程序或是编译CanMV固件,都需要搭建基于CanMV的C开发环境,用于编译CanMV源码。
本章分为如下几个小节:
4.1 开发环境搭建说明
4.2 安装VMware Workstation Player
4.3 创建虚拟机并安装Ubuntu
4.4 开启SSH服务并进行远程连接
4.5 创建工作目录
4.6 运行开发环境搭建脚本

4.1 开发环境搭建说明
CanMV提供了基于C语言和FreeRTOS的应用开发方式以及基于MicroPython语法的应用开发方式,其中基于C语言和FreeRTOS的应用开发方式依靠直接编译CanMV源码和应用代码来生成应用程序的可执行文件,而基于MicroPython语法的应用开发方式则是需要先编译CanMV源码并得到CanMV固件,然后在目标芯片上运行CanMV固件,以此来解析并运行MicroPython脚本的应用程序。
可以发现,无论使用那种开发方式进行CanMV的应用开发,都是需要编译CanMV的源码,因此本章介绍的开发环境实际上就是CanMV源码的编译环境,因此在搭建好CanMV的源码编译环境后,便可使用基于C语言和FreeRTOS的应用开发方式开发应用程序以及编译CanMV固件。
在CanMV项目仓库源码编译相关的文档(build.md)中有这么一句话,如下所示:

Only support Linux(recommend) and macOS

那么,这意味着CanMV源码的编译只能在Linux或macOS操作系统下完成,在Windows下是无法完成CanMV源码编译的,并且也推荐在Linux操作系统下进行CanMV源码的编译。为此本教程文档将选用Linux操作系统来搭建CanMV的编译环境,具体选用的Linux发行版本是Ubuntu Server 20.04.6。当然,对于具有能够解决所遇到问题的能力的读者,也可以选用其他Linux发行版本或macOS。
至此,确定了使用Ubuntu Server 20.04.6作为开发环境的操作系统,但是可能大部分读者的电脑安装的都是Windows操作系统,身边并没有装有Ubuntu Server 20.04.6操作系统的电脑,那怎么办呢?以下列出一个解决方案:
一, 以购买、租借等方式新增一台安装Ubuntu Server 20.04.6操作系统的电脑
二, 使用Windows下的WLS(适用于Linux的Windows子系统)
三, 使用VMware Workstation Player等应用程序在Windows下创建虚拟机,并运行Ubuntu Server 20.04.6操作系统
四, 其他
本教程文档将就以上解决方案中的第三点(使用VMware Workstation Player等应用程序在Windows下创建虚拟机,并运行Ubuntu Server 20.04.6操作系统)提供详细的教程步骤,具体将介绍在Windows操作系统下使用VMware Workstation Player 17.0.0创建虚拟机并安装运行Ubuntu Server 20.04.6操作系统。
除此了操作系统之外,CanMV源码编译的开发环境,还需要Python、pip、Git、CMake、适用于目标芯片的Toolchain和kflash等软件的支持,下面列出了本教程文档使用的部分软件的版本信息:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.1.1 本教程文档所使用部分软件的版本信息

从本章节开始,将会有很多命令行操作,为了方便读者区分是在Window环境下的命令行操作还是Linux环境下的命令行操作,在此约定,下文中出现的命令都将以所需操作系统环境的名称作为命令的注释,且放置在首行。
例如,Windows环境下的命令行操作,如下所示:

# Windows
echo "Hello, World"

Linux环境下的命令行操作,如下所示:

# Linux
echo "Hello, World"

4.2 安装VMware Workstation Player
本教程使用的VMware Workstation Player版本为17.0.0,VMware Workstation Player是一个能够在Windows操作系统下创建虚拟机并在所创建虚拟机上运行Ubuntu Server 20.04.6操作系统的程序软件,该软件的下载地址为https://www.vmware.com/cn/products/workstation-player.html,读者也可以在A盘软件资料软件VMware Workstation Player安装程序下找到该软件的安装程序。
在Windows操作系统下双击打开VMware Workstation Player 17.0.0的安装程序运行安装程序,并根据提示点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.1 VMware Workstation Player 17.0.0安装程序

认真阅读该软件的“最终用户许可协议”,确认无误后,即可勾选“我接受许可协议中的条款”复选框,随后点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.2 VMware最终用户许可协议

若提示“更改Windows功能的兼容性设置”,则根据需要勾选“自动安装 Windows Hypervisor Platform (WHP)”复选框,随后点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.3 更改Windows功能的兼容性设置

接着自定义安装选项,包括软件的位置、是否安装增强型键盘驱动程序、是否将软件的控制台工具添加到系统环境变量,配置好这些自定义安装选项后,点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.4自定义安装选项

接着是一些用户体验的配置项,读者可根据自己的喜好进行配置,配置好后点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.5 用户体验设置选项

再接着就是配置是否创建快捷方式的界面,读者可根据需要进行配置,配置好后点击“下一步”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.6 快捷方式配置选项

接下来,点击“安装”按钮,安装程序便会自动安装VMware Workstation Player,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.7 确认安装VMware Workstation Player

随后安装程序便会自动安装VMware Workstation Player,静静等待安装完成即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.8 正在安装VMware Workstation Player

安装程序完成VMware Workstation Player安装后,读者若拥有软件的许可证密钥,可点击“许可证”按钮添加许可证木密钥,若无软件的许可证密钥,直接点击“完成”按钮即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.9 完成安装VMware Workstation Player

至此,VMware Workstation Player安装完成,读者可在软件的安装路径中找到并运行软件,或通过安装程序创建的快捷方式运行软件,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.2.10 VMware Workstation Player主界面

4.3 创建虚拟机并安装Ubuntu
要使用VMware Workstation Player创建虚拟机并安装Ubuntu Server 20.04.6操作系统,请读者先根据4.2小节在Windows主机下正确安装VMware Workstation Player。
安装Ubuntu Server 20.04.6操作系统需要使用Ubuntu Server 20.04.6的系统安装镜像文件,该镜像文件可前往其官方的发布网站进行下载,网址为:https://releases.ubuntu.com/focal,进入网站后,在“Select an image”处选择“Server install image”进行下载,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.1 发布网站下载镜像文件

读者也可以在A盘软件资料软件Ubuntu Server安装镜像下找到Ubuntu Server 20.04.6的系统安装镜像文件。
准备好镜像文件后,打开VMWare Workstation Player并点击“创建新虚拟机(N)”按钮打开新建虚拟机向导,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.2 新建虚拟机向导

打开新建虚拟机向导后,选择“安装程序光盘映像文件(iso)(M)”,并浏览选中Ubuntu Server 20.04.6的系统安装镜像文件,如下如所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.3 选择映像文件

点击“下一步”按钮后,填写简易安装信息,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.4 填写简易安装信息

简易安装信息的说明,如下表所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.3.1 简易安装信息说明

点击“下一步”按钮后,填写虚拟机的名称和位置,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.5 填写虚拟机信息

点击“下一步”按钮后,填写虚拟机的磁盘容量等信息,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.6 配置虚拟机磁盘信息

虚拟机的磁盘将占用虚拟机安装位置磁盘的空间,因此确保主机的磁盘空间足够。读者可以根据自己的实际情况来确定虚拟机的磁盘大小,另外,虚拟机的磁盘大小是可以在创建好虚拟机后再次调整的。
点击“下一步”按钮后,自定义虚拟机的硬件信息,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.7 自定义硬件信息

主要自定义的硬件信息有内存、处理器、网络适配器,其余的硬件信息,读者也可以根据实际情况进行调整。
硬件信息中的内存、处理器、网络适配器说明,如下表所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.3.2 部分硬件信息说明

点击“完成”按钮后,虚拟机创建完毕,勾选“创建后开启此虚拟机”复选框,虚拟机将自动开启。
开启虚拟机后,Ubuntu Server 20.04.6的安装程序将自动运行,安装程序启动后,首先进入“选择语言”界面,读者可根据实际情况选择语言,但建议选择“English”,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.8 选择语言

回车确认后,若此时安装程序已经连接网络,且检测到有新发布的Ubuntu Server安装程序,则弹出更新界面,建议选择“Continue without updating”,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.9 不更新安装程序

回车确认后,进入键盘配置界面,键盘配置一般保持默认即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.10 配置键盘

回车确认后,进入网络配置界面,读者请根据实际的网络情况配置网络,或等待DHCP服务器自动分配IP地址,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.11 配置网络

回车确认后,进入网络代理配置界面,读者请根据实际情况配置网络代理,若无需网络代理,留空即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.12 配置网络代理

回车确认后,进入软件镜像源配置界面,读者可以根据实际的网络情况填写软件镜像源,也可保持默认,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.13 配置软件镜像源

常用的软件镜像源,如下表所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.3.3 常用软件镜像源

回车确认后,进入磁盘分区布局的选择界面,读者可根据实际情况进行选择,一般保持默认即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.14 磁盘分区布局

回车确认后,进入磁盘分区界面,读者可根据实际情况进行分区配置,一般保持默认即可,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.15 配置磁盘分区

回车确认后,弹出磁盘分区确认提示,磁盘分区会擦除磁盘且无法恢复,确认无误后,选择“Continue”并回车,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.16 确认磁盘分区

随后进入系统信息配置界面,读者可根据实际情况配置系统信息,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.17 配置系统信息

系统配置信息的说明,如下表所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.3.4 系统配置信息说明

回车确认后,进入SSH配置界面,SSH服务用于远程连接Ubuntu Server,本教程将在Ubuntu Server安装完成后手动安装SSH服务,因此这里无需重复配置,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.18 配置SSH

回车确认后,进入热门软件安装界面,读者可自行选择安装与否,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.19 安装热门软件

回车确认后,安装程序便自动开始安装Ubuntu Server,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.20 Ubuntu Server安装中

等待安装程序安装Ubuntu Server完成后,会出现“Reboot Now”选项,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.21 Ubuntu Server安装完成

选中“Reboot Now”并回车后,虚拟机会重新启动,直到弹出Ubuntu Server的登录界面后,根据提示输入上文系统信息配置中输入的“Your name”和“Choose a password”分别作为用户名和用户密码登入Ubuntu Server系统,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.22 登入Ubuntu Server

至此,完成Ubuntu操作系统在虚拟机上的安装,由于在创建虚拟机的时候选择了Ubuntu Server 20.04.6的系统安装镜像文件,因此虚拟机在每次开机时都会加载该镜像文件,为了避免在之后的虚拟机开机时再次自动进入Ubuntu Server的安装程序,导致无法正常进入已安装好的Ubuntu Server 20.04.6操作系统,因此需要关闭系统安装镜像文件的“启动时连接”,具体方法为:在VMware Workstation Player软件中选择创建好的Ubuntu虚拟机并依次点击菜单栏的“Player可移动设备CD/DVD 2(SATA) 设置”,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.23 打开系统安装镜像设置

接着找到并取消勾选“启动时连接”复选框后点击“确认”按钮,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.3.24 取消勾选“启动时连接”复选框

4.4 开启SSH服务并进行远程连接
为了方便开发操作以及主机与虚拟机之间的文件传输,建议在Ubuntu Server下开启SSH服务,这样一来,并可在Windows下使用Visual Studio Code、Windows Terminal等软件访问Ubuntu Server。
首先在Ubuntu Server下安装openssh-server:

# Linux
sudo apt update
sudo apt install openssh-server -y

安装好openssh-server后便自动开启了SSH服务,这么一来,同局域网的SSH客户端便可通过Ubuntu Server的IP地址与Ubuntu Server建立SSH连接。
查看Ubuntu Server的IP地址:

# Linux
hostname -I

接下来便可在Windows主机下通过Windows PowerShell、Windows Terminal、Visual Studio Code等软件的终端与Ubuntu Server建立SSH连接:

# Windows

# ssh user@host
ssh alientek@192.168.6.666

其中“user”是Ubuntu Server中用户的用户名,“host”是Ubuntu Server的IP地址,若Ubuntu Server的SSH服务配置正确且网络连接正常,便会提示输入“password”,即Ubuntu Server中用户的密码,成功连接后,如下图所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
图4.4.1 使用Windows PowerShell进行SSH连接

关于Windows PowerShell、Windows Terminal、Visual Studio Code等工具软件的安装和使用介绍不是本教程文档的重点,请读者在使用中遇到问题时,善用搜索引擎。
至此,便可在Windows下通过SSH服务直接访问Ubuntu Server,非常方便操作

4.5 创建工作目录
Ubuntu Server 20.04.6安装完成后,便可在Ubuntu Server 20.04.6下安装相关的软件以搭建CanMV的开发环境,但为了方便文件管理,本教程文档将创建三个目录来存放CanMV,具体如下表所示:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建-小白菜博客
表4.5.1 工作目录说明

创建以上三个目录:

# Linux
mkdir -p ~/Kendryte_K210/Resources
mkdir -p ~/Kendryte_K210/Tools
mkdir -p ~/Kendryte_K210/Workspace

为了方便访问这三个目录,接着将这三个目录的路径添加到环境变量:

# Linux
echo 'export RESOURCES='"$HOME"'/Kendryte_K210/Resources' >> ~/.bashrc
echo 'export TOOLS='"$HOME"'/Kendryte_K210/Tools' >> ~/.bashrc
echo 'export WORKSPACE='"$HOME"'/Kendryte_K210/Workspace' >> ~/.bashrc
source ~/.bashrc

这么一来,便可在命令行中直接使用“$RESOURCES”、“$TOOLS”、“$WORKSPACE”来分别访问以上三个目录了,例如:

# Linux
cd $RESOURCES

4.6 运行开发环境搭建脚本
为方便开发环境的搭建,本教程文档是使用脚本程序来搭建开发环境,读者可在A盘软件资料软件CanMV固件开发环境搭建脚本中找到该脚本文件,脚本文件的文件名为“canmv_dev_env_setup.sh”。
该脚本文件是在Ubuntu Server下运行的脚本程序,因此首先需要将该脚本文件传输到Ubuntu Server的文件系统中。主机与虚拟机之间传输文件的方法有很多,本文档教程将介绍使用SSH的方式进行文件传输。
在Windows环境下可以借助scp命令发送文件至SSH服务器或从SSH服务器复制文件,使用起来就和cp命令一样方便。将脚本文件从Windows的文件系统传输到Ubuntu Server的文件系统,如下:

# Windows
# scp source ... target
scp ./canmv_dev_env_setup.sh alientek@192.168.6.666:/tmp

接着到Ubuntu Server下运行该脚本程序:

# Linux
chmod +x /tmp/canmv_dev_env_setup.sh
/tmp/canmv_dev_env_setup.sh
rm /tmp/canmv_dev_env_setup.sh

脚本程序运行过程中可能需要输入用户密码,脚本程序运行完毕后,需重启以生效所有配置:

# Linux
sudo reboot

至此,基于CanMV的C开发环境基本搭建完成。
下面列出脚本程序的运行流程:
1,检查脚本运行环境
2,更新软件源和软件
3,创建python软链接
4,安装pip
5,安装Git
6,安装CMake
7,安装Toolchain
8,安装kflash
9,安装build-essential
有能力的读者可以自行阅读该脚本文件,有需要的话也可以根据需求修改该脚本文件。