帶有嵌入式Linux Arm裝置的Visual Studio 2017

文章來源:帶有嵌入式Linux Arm裝置的Visual Studio 2017 — CNX SOFTWARE中文站—嵌入式開發者的知識庫!

本文共計2911字,預計閱讀8分鐘

備註:這是一篇無贊助的客座文章,由微軟首席專案經理Marc Goodner和Toradex創新工程師Jeremias Cordoba撰寫。

今天,有很多嵌入式裝置都將Linux作為其主要作業系統。這一點對於在開發機器上執行 Windows 的開發人員來說構

成了挑戰。本文我們將介紹一種新方法,讓使用者可以在嵌入式Arm裝置上使用新版的Visual Studio進行C++開發,並在Windows主機電腦上使用容器來構建環境。我們要部署的裝置是來自Toradex Colibri系列的系統模組,使用的是搭載了Arm Cortex A-7的恩智浦i。MX 6ULL SoC。接下來我們將使用Toradex Colibri模組連線藍芽感測器從而來進行專案演示。

請注意,Visual Studio對這種專案的支援還處於早期的開發狀態,未來幾個月大家會看到微軟和Toradex在不斷改進。

前提條件

配備Wi-Fi/BT的Colibri i。MX 6ULL和 Aster載板

TI SensorTag(低功耗藍芽)

安裝了Linux workload(版本不限)的Visual Studio 2017

適用於Windows系統的Docker

設定Toradex Colibri系統模組(SOM)

按照

指南一步步進行安裝,直到你可使用Toradex Easy installer安裝作業系統。(如下圖所示,可以選擇任意一個Toradex Embedded Linux Dem

o映象)

在裝置上執行以下指令:

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

帶有嵌入式Linux Arm裝置的Visual Studio 2017

可選圖中任意一個Toradex Embedded Linux Demo映象進行安裝

現在應該可以開始了!

建立一個Visual Studio專案

首先建立一個空白Linux專案。轉到

File > New > Project

,然後選擇

Visual C++ > Cross Platform > Linux

並選擇空白模板。在這裡,我們將專案命名為imx6-Bluetooth。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

為Linux建立一個Visual Studio專案

建立一個構建容器

對於該專案演示,我們會使用容器來設定構建環境。首先,從登錄檔本地拉取容器映象。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

我們首先建立了專案,所以我們有了原始碼所在的路徑。我們將把它對映到容器中。我的儲存路徑是:

C:\source\repos\imx6-Bluetooth\imx6-Bluetooth

。請注意,這是專案路徑,而不是上層解決方案的路徑。在下一個指令中,大家記得調整該值與儲存專案的路徑一致。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

到了這一步,你的系統上應該有一個名為colibri_sdk的容器正在執行,其中包含構建工具,還有一個供Visual Studio發出指令的開放SSH埠。

將Visual Studio連線到容器和裝置。在Visual Studio中,轉到

Tools > Options > Connection Manager。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

轉到Tools > Options > Connection Manager

點選“新增”並輸入,如下圖:

主機名:本地主機

埠:2222

使用者:root

密碼:toradex_sdk

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Visual Studio輸入使用者名稱及密碼介面

Visual Studio會自動查詢編譯器,從而來獲得包含路徑和編譯器標記等資訊,這可以為裝置提供專屬的IntelliSense。然而,我們所使用的交叉編譯器並不包含這些內容。不過我們可以透過手動設定來提供路徑等內容。連線完成後,展開Connection Manager選項卡,選擇Remote Headers IntelliSense Manager。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Remote Headers IntelliSense Manager對話方塊

選擇

Explore

。這將會開啟Windows Explorer(資源管理器)。複製檔案

settings。xml。unused

並將其命名為

settings。xml

。在文字編輯器中開啟檔案並將

useCompiler

的值

更改

為false。現在將以下路徑新增到CDATA塊開頭的

includeDirs

中:

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

儲存檔案。不要關閉該資源管理器視窗,因為你們在後面的說明中會需要此路徑。對於某些Windows 使用者名稱較長的使用者,可能需要使其CDATA塊僅包含上述路徑。此更改將防止在以後的步驟中出現長檔案路徑錯誤。

在Visual Studio的Remote Headers IntelliSense Manager視窗中單擊

Update(上圖)

。你們會注意到這比我們建立連線時花費的時間更長,因為我們現在正在等待整套headers返回。完成後單擊

Connection Manager

並將連線新增到自己的裝置中。使用IP地址,使用者為root,密碼留空。這時,你們會收到如下錯誤訊息,顯示Visual Studio找不到編譯器,需要從目標路徑獲取headers。這種情況沒關係,因為我們不會在這個裝置上進行編譯,只需要進行部署。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

為IntelliSense升級的headers

直接忽略該錯誤資訊,點選Close,再點選OK退出Options對話方塊。

新增一些原始碼並在容器中對其進行交叉編譯

我們正在使用名稱為

durovsky/SensorTag2650的SensorTag儲存庫中的示例。我們僅使用此處的原始碼與SensorTag對話,並不是整個專案。將src\senortag。cpp和include\filepaths。h在本地複製到你的Visual Studio專案路徑中。右鍵

單擊Solution Explorer中的專案,然後單擊

add > existing item

。選擇你剛剛新增的檔案。這時候,你的專案應該會如下圖所示:

帶有嵌入式Linux Arm裝置的Visual Studio 2017

imx6-Bluetooth(Linux)專案對話方塊

檢視檔案

filepaths。h

,並確保裝置的儲存路徑裡存在該檔案。

現在我們需要知道Visual Studio如何編譯ARM Target Board。右鍵單擊專案並單擊“屬性”。因為之前我們已經將我們的專案路徑對映到了容器中,所以選擇“copy sources” 選項卡並將預設值改為no。我們使用的構建容器已經將gcc對映到交叉編譯器,所以我們不需要在這個專案中覆蓋編譯器的預設值。展開C++選項卡,選擇Command line。新增以下指令。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

展開Linker選項卡並在General選項下將Copy Output更改為No。選擇Command line並新增與上述相同指令。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

以驗證此時系統的設定情況,現在來嘗試構建專案。如果有任何不妥之處,請仔細依照上述內容檢查你的設定。

到目前為止,我們已經設定了一個構建容器,將它和我們的裝置連線到Visual Studio,並在容器中交叉編譯了一個可以在ARM開發板上執行的可執行檔案。下面,我們需要將輸出複製到裝置上。

將交叉編譯輸出複製到Colibri i。MX 6ULL裝置上

我們新增另一個專案從而將交叉編譯的輸出複製到我們的遠端裝置上。在Solution Explorer中,右鍵單擊Solution,然後點選

Add > New Project

。在對話方塊中選擇 Makefile Project(Linux)。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Visual Studio> Solution Explorer >Add > New Project對話方塊

目前我們正在完善我們的解決方案,以便有一個專案可以用於構建和除錯原始碼(imx6-Bluetooth),也有另一個專案(CopyFiles)可以用於複製輸出到遠端ARM目標裝置。這裡的訣竅是,我們使用x64配置進行構建,使用ARM進行除錯。右擊Solution,選擇屬性,在Solution屬性中的Project Dependencies,我們將把專案CopyFiles設定為依賴CrossCompileProject。現在選擇Project Dependencies,並將CopyFiles設定為依賴imx6-Bluetooth。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Project Dependencies設定對話方塊

現在Configuration Properties將 CopyFiles更改為使用ARM,但其他所有屬性都保留為x64。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Configuration Properties設定對話方塊

在這裡,我們將Platform更改為ARM,如果選 Build並取消所有屬性內容。這允許我們將imx6-Bluetooth平臺更改為ARM平臺以除錯裝置,但不會啟動構建。這就是我們的x64專案在容器中使用交叉編譯器的目的。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

Configuration Properties設定對話方塊內為Build取消所有屬性

關閉Solution property(解決方案屬性)頁面。

現在,右鍵單擊 imx6-Bluetooth專案並選擇屬性。確保 x64 平臺處於啟用狀態。轉到Build events > Post Build Events並新增以下指令行。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

帶有嵌入式Linux Arm裝置的Visual Studio 2017

轉到Build events > Post Build Events並新增指令

這樣做的目的是將輸出的二進位制檔案儲存在預設路徑,以便我們稍後除錯時由 gdb使用。如果已經覆蓋ARM平臺配置的專案屬性中的預設值,則可以跳過此步驟。

現在,在CopyFiles的專案屬性中的General頁面上,可以遠端構建裝置並更改為你自己的裝置了。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

General頁面上將遠端構建裝置更改為自己的裝置

現在轉到

Build Events > Pre-Build Event

。並確保ARM平臺已啟用。將以下指令新增到Additional Files to Copy欄框內。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

帶有嵌入式Linux Arm裝置的Visual Studio 2017

將指令新增到Additional Files to Copy欄框內

帶有嵌入式Linux Arm裝置的Visual Studio 2017

將指令新增到Additional Files to Copy欄框內

現在,在Remote Post-Build Event頁面,我們需要為二進位制檔案設定執行指令。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

帶有嵌入式Linux Arm裝置的Visual Studio 2017

為二進位制檔案設定執行指令

我們先確認所有構建和複製設定都正確無誤。右鍵單擊Solution,然後單擊Build Solution。

如果你收到錯誤提示,提示你路徑無效、無法複製x64 專案輸出,請在Explorer中開啟專案位置並在bin資料夾下建立子目錄ARM\Debug。

一旦一切都可以構建之後,我們開始進行除錯。

在Colibri i。MX 6ULL裝置上部署和除錯

首先開啟SensorTag,連線到 Colibri IMX6ULL 裝置,並執行以下指令:

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

記下從SensorTag返回的路徑內容。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

前往“CNX Software中文站”官網,檢視完整資訊

現在,在Visual Studio中將平臺選項更改為 ARM。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

在Visual Studio中將平臺選項更改為ARM

現在,在General選項卡內imx6-Bluetooth 的Project Properties中,將遠端計算機從本地主機更改為你的裝置。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

將本地主機更改為自己的裝置

要設定Debugging,請轉到Debugging Property頁。在程式引數欄中提供你的 SensorTag地址。裝置沒有安裝gdb,因此將Debugging Mode更改為gdbserver。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

將Debugging Mode更改為gdbserver

由於此連線沒有Headers,因此你的裝置不會有IntelliSense。如果你想取回它,需要轉到 VC++ Directories的Project Properties。轉到為容器連線儲存Headers的路徑。然後導航到子目錄

usr\local\oecore-x86_64\sysroots\armv7at2hf-neon-angstrom-linux-gnueabi\usr\include

。現在複製整個路徑並將其值放入Include Directories欄。

帶有嵌入式Linux Arm裝置的Visual Studio 2017

複製整個路徑至Include Directories欄

在清除new_measurement標記的第319行附近設定一個間斷點。現在按F5鍵啟動偵錯程式。這時候,你應該會看到如下圖所示的內容:

帶有嵌入式Linux Arm裝置的Visual Studio 2017

結論

雖然這是一個相當小的專案,但它確實突出了在Windows上進行嵌入式開發的未來前景。隨著時間的推移,從 Visual Studio將應用程式部署和除錯到Linux嵌入式裝置的能力將得到提升。嵌入式裝置的未來似乎牢牢地紮根於Linux了,但目前的情況來說,人們還無需放棄其 Windows環境。

更多優質文章推薦:

1。3。5英寸的Atom x6000E嵌入式SBC,具有3個GbE千兆網口、2個SATA - CNX Software中文站

2。Smart Power 3,一個面向嵌入式系統開發人員的智慧電源分析工具 - CNX Software中文站

3。廣積科技推出基於AMD銳龍嵌入式V2000處理器的3。5英寸SBC - CNX Software中文站