第四章 基於CanMV的C開發環境搭建
1)實驗平臺:正點原子DNK210開發板
2) 章節摘自【正點原子】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等軟體的支援,下面列出了本教程文件使用的部分軟體的版本資訊:
表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的安裝程式執行安裝程式,並根據提示點選“下一步”按鈕,如下圖所示:
圖4.2.1 VMware Workstation Player 17.0.0安裝程式
認真閱讀該軟體的“終端使用者許可協議”,確認無誤後,即可勾選“我接受許可協議中的條款”核取方塊,隨後點選“下一步”按鈕,如下圖所示:
圖4.2.2 VMware終端使用者許可協議
若提示“更改Windows功能的相容性設定”,則根據需要勾選“自動安裝 Windows Hypervisor Platform (WHP)”核取方塊,隨後點選“下一步”按鈕,如下圖所示:
圖4.2.3 更改Windows功能的相容性設定
接著自定義安裝選項,包括軟體的位置、是否安裝增強型鍵盤驅動程式、是否將軟體的控制檯工具新增到系統環境變數,配置好這些自定義安裝選項後,點選“下一步”按鈕,如下圖所示:
圖4.2.4自定義安裝選項
接著是一些使用者體驗的配置項,讀者可根據自己的喜好進行配置,配置好後點選“下一步”按鈕,如下圖所示:
圖4.2.5 使用者體驗設定選項
再接著就是配置是否建立快捷方式的介面,讀者可根據需要進行配置,配置好後點選“下一步”按鈕,如下圖所示:
圖4.2.6 快捷方式配置選項
接下來,點選“安裝”按鈕,安裝程式便會自動安裝VMware Workstation Player,如下圖所示:
圖4.2.7 確認安裝VMware Workstation Player
隨後安裝程式便會自動安裝VMware Workstation Player,靜靜等待安裝完成即可,如下圖所示:
圖4.2.8 正在安裝VMware Workstation Player
安裝程式完成VMware Workstation Player安裝後,讀者若擁有軟體的許可證金鑰,可點選“許可證”按鈕新增許可證木金鑰,若無軟體的許可證金鑰,直接點選“完成”按鈕即可,如下圖所示:
圖4.2.9 完成安裝VMware Workstation Player
至此,VMware Workstation Player安裝完成,讀者可在軟體的安裝路徑中找到並執行軟體,或透過安裝程式建立的快捷方式執行軟體,如下圖所示:
圖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”進行下載,如下圖所示:
圖4.3.1 釋出網站下載映象檔案
讀者也可以在A盤軟體資料軟體Ubuntu Server安裝映象下找到Ubuntu Server 20.04.6的系統安裝映象檔案。
準備好映象檔案後,開啟VMWare Workstation Player並點選“建立新虛擬機器(N)”按鈕開啟新建虛擬機器嚮導,如下圖所示:
圖4.3.2 新建虛擬機器嚮導
開啟新建虛擬機器嚮導後,選擇“安裝程式光碟映像檔案(iso)(M)”,並瀏覽選中Ubuntu Server 20.04.6的系統安裝映象檔案,如下如所示:
圖4.3.3 選擇映像檔案
點選“下一步”按鈕後,填寫簡易安裝資訊,如下圖所示:
圖4.3.4 填寫簡易安裝資訊
簡易安裝資訊的說明,如下表所示:
表4.3.1 簡易安裝資訊說明
點選“下一步”按鈕後,填寫虛擬機器的名稱和位置,如下圖所示:
圖4.3.5 填寫虛擬機器資訊
點選“下一步”按鈕後,填寫虛擬機器的磁碟容量等資訊,如下圖所示:
圖4.3.6 配置虛擬機器磁碟資訊
虛擬機器的磁碟將佔用虛擬機器安裝位置磁碟的空間,因此確保主機的磁碟空間足夠。讀者可以根據自己的實際情況來確定虛擬機器的磁碟大小,另外,虛擬機器的磁碟大小是可以在建立好虛擬機器後再次調整的。
點選“下一步”按鈕後,自定義虛擬機器的硬體資訊,如下圖所示:
圖4.3.7 自定義硬體資訊
主要自定義的硬體資訊有記憶體、處理器、網路介面卡,其餘的硬體資訊,讀者也可以根據實際情況進行調整。
硬體資訊中的記憶體、處理器、網路介面卡說明,如下表所示:
表4.3.2 部分硬體資訊說明
點選“完成”按鈕後,虛擬機器建立完畢,勾選“建立後開啟此虛擬機器”核取方塊,虛擬機器將自動開啟。
開啟虛擬機器後,Ubuntu Server 20.04.6的安裝程式將自動執行,安裝程式啟動後,首先進入“選擇語言”介面,讀者可根據實際情況選擇語言,但建議選擇“English”,如下圖所示:
圖4.3.8 選擇語言
回車確認後,若此時安裝程式已經連線網路,且檢測到有新發布的Ubuntu Server安裝程式,則彈出更新介面,建議選擇“Continue without updating”,如下圖所示:
圖4.3.9 不更新安裝程式
回車確認後,進入鍵盤配置介面,鍵盤配置一般保持預設即可,如下圖所示:
圖4.3.10 配置鍵盤
回車確認後,進入網路配置介面,讀者請根據實際的網路情況配置網路,或等待DHCP伺服器自動分配IP地址,如下圖所示:
圖4.3.11 配置網路
回車確認後,進入網路代理配置介面,讀者請根據實際情況配置網路代理,若無需網路代理,留空即可,如下圖所示:
圖4.3.12 配置網路代理
回車確認後,進入軟體映象源配置介面,讀者可以根據實際的網路情況填寫軟體映象源,也可保持預設,如下圖所示:
圖4.3.13 配置軟體映象源
常用的軟體映象源,如下表所示:
表4.3.3 常用軟體映象源
回車確認後,進入磁碟分割槽佈局的選擇介面,讀者可根據實際情況進行選擇,一般保持預設即可,如下圖所示:
圖4.3.14 磁碟分割槽佈局
回車確認後,進入磁碟分割槽介面,讀者可根據實際情況進行分割槽配置,一般保持預設即可,如下圖所示:
圖4.3.15 配置磁碟分割槽
回車確認後,彈出磁碟分割槽確認提示,磁碟分割槽會擦除磁碟且無法恢復,確認無誤後,選擇“Continue”並回車,如下圖所示:
圖4.3.16 確認磁碟分割槽
隨後進入系統資訊配置介面,讀者可根據實際情況配置系統資訊,如下圖所示:
圖4.3.17 配置系統資訊
系統配置資訊的說明,如下表所示:
表4.3.4 系統配置資訊說明
回車確認後,進入SSH配置介面,SSH服務用於遠端連線Ubuntu Server,本教程將在Ubuntu Server安裝完成後手動安裝SSH服務,因此這裡無需重複配置,如下圖所示:
圖4.3.18 配置SSH
回車確認後,進入熱門軟體安裝介面,讀者可自行選擇安裝與否,如下圖所示:
圖4.3.19 安裝熱門軟體
回車確認後,安裝程式便自動開始安裝Ubuntu Server,如下圖所示:
圖4.3.20 Ubuntu Server安裝中
等待安裝程式安裝Ubuntu Server完成後,會出現“Reboot Now”選項,如下圖所示:
圖4.3.21 Ubuntu Server安裝完成
選中“Reboot Now”並回車後,虛擬機器會重新啟動,直到彈出Ubuntu Server的登入介面後,根據提示輸入上文系統資訊配置中輸入的“Your name”和“Choose a password”分別作為使用者名稱和使用者密碼登入Ubuntu Server系統,如下圖所示:
圖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) 設定”,如下圖所示:
圖4.3.23 開啟系統安裝映象設定
接著找到並取消勾選“啟動時連線”核取方塊後點選“確認”按鈕,如下圖所示:
圖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中使用者的密碼,成功連線後,如下圖所示:
圖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,具體如下表所示:
表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
有能力的讀者可以自行閱讀該指令碼檔案,有需要的話也可以根據需求修改該指令碼檔案。