工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

嵌入式Linux下運(yùn)行 DotNet 應(yīng)用簡(jiǎn)單示例

嵌入式Linux下運(yùn)行 DotNet 應(yīng)用簡(jiǎn)單示例

1). 簡(jiǎn)介

嵌入式 Linux 逐漸成為嵌入式設(shè)備的主流操作系統(tǒng),但是應(yīng)用開(kāi)發(fā)工程師很多更熟悉 Microsoft C# 開(kāi)發(fā),得益于 Microsoft .Net Framework 的跨平臺(tái)支持,本文就簡(jiǎn)單示例在 Embedded Linux 環(huán)境運(yùn)行 .NET 應(yīng)用。

 

本文所演示的平臺(tái)來(lái)自于Toradex Apalis iMX8 嵌入式平臺(tái),基于 NXP iMX8 系列 ARM 處理器,核心為 Cortex-A52/A53 。

 

 

2)硬件準(zhǔn)備

a).  Apalis iMX8 ARM 核心版配合 Apalis Eva Board 載板,并連接調(diào)試串口和網(wǎng)口以便測(cè)試。

 

 

3). 部署 Microsoft .Net Framework 運(yùn)行庫(kù)到 Embedded Linux BSP

a). Apalis iMX8 模塊標(biāo)準(zhǔn) Ycoto Linux BSP 中默認(rèn)沒(méi)有包含 Microsoft .Net Framework 相關(guān) runtime 運(yùn)行庫(kù)支持,可以參考這里 Microsoft 官方文檔通過(guò) script 方式安裝,不過(guò)為了方便管理和部署,本文演示通過(guò) Ycoto Project/Openembedded 編譯方式來(lái)添加相關(guān)庫(kù)文件,Ycoto Project .Net Framework runtime 由下面 meta-dotnet-core layer 來(lái)提供,詳細(xì)說(shuō)明可以參考項(xiàng)目 README 的說(shuō)明。

 

https://github.com/RDunkley/meta-dotnet-core

 

b). 首先需要在 Linux編譯開(kāi)發(fā)主機(jī)部署 Ycoto 編譯環(huán)境,然后參考如下步驟部署。

./ 下載 meta-dotnet-core layer

---------------------------------------

$ cd .../oe_core/layers

$ git clone https://github.com/RDunkley/meta-dotnet-core.git

---------------------------------------

 

./ 修改 build/conf/bblayer.conf 文件添加相關(guān) layer

---------------------------------------

--- a/build/conf/bblayers.conf  2023-03-30 11:13:22.946533642 +0800

+++ b/build/conf/bblayers.conf 2023-11-17 16:03:01.666129480 +0800

@@ -35,6 +35,7 @@

   ${TOPDIR}/../layers/meta-freescale-distro \

   ${TOPDIR}/../layers/meta-toradex-demos \

   ${TOPDIR}/../layers/meta-qt5 \

+  ${TOPDIR}/../layers/meta-dotnet-core \

   \

   \

   ${TOPDIR}/../layers/meta-toradex-distro \

---------------------------------------

 

./修改 build/conf/local.conf 文件,增加 .NET 相關(guān)庫(kù)組件,如果需要可以選擇指定 .NET runtime 版本,本文編譯測(cè)試沒(méi)有指定,默認(rèn)是支持的最高版本,當(dāng)前是 7.0.11 版本

---------------------------------------

# add dotnet runtime

IMAGE_INSTALL:append = " dotnet-core"

# Optional - specify dotnet runtime version

PREFERRED_VERSION_dotnet-core = "6.0.0"

---------------------------------------

 

當(dāng)然也可以選擇添加 ASP .NET (aspnet-core) 和 Visual Studio Remote Debugger (vsdbg) 組件,需要注意 ASP .NET runtime 會(huì)包含 .NET runtime,因此兩者不要同時(shí)添加

---------------------------------------

# add asp dotnet runtime

IMAGE_INSTALL:append = " aspnet-core"

# add VS remote debugger

IMAGE_INSTALL:append = " vsdbg"

---------------------------------------

 

./ 重新編譯生成 Ycoto Linux BSP Image

---------------------------------------

$ MACHINE="apalis-imx8" PARALLEL_MAKE="-j 4" BB_NUMBER_THREADS="4" bitbake tdx-reference-multimedia-image

---------------------------------------

 

c). 參考這里的說(shuō)明將上述修改下重新編譯生成的 Ycoto Linux Image 通過(guò) Toradex Easy Installer 更新到 Apalis iMX8 模塊。

 

 

4). 生成 .NET 7.0 Console 測(cè)試應(yīng)用

a). 可以通過(guò) Virtual Studio 或者 Virtual Studio Code IDE 來(lái)生成這個(gè) Hello World Console 應(yīng)用,本文參考這里的說(shuō)明使用 VS Code來(lái)生成,VS Code Terminal 操作如下

---------------------------------------

$ dotnet --list-sdks

7.0.114 [/usr/lib/dotnet/sdk]

 

$ dotnet new console -f net7.0

歡迎使用 .NET 7.0!

---------------------

SDK 版本: 7.0.114

----------------

已安裝 ASP.NET Core HTTPS 開(kāi)發(fā)證書(shū)。

若要信任該證書(shū),請(qǐng)運(yùn)行 "dotnet dev-certs https --trust" (僅限 Windows 和 macOS)。

了解 HTTPS: https://aka.ms/dotnet-https

----------------

編寫你的第一個(gè)應(yīng)用: https://aka.ms/dotnet-hello-world

查找新增功能: https://aka.ms/dotnet-whats-new

瀏覽文檔: https://aka.ms/dotnet-docs

在 GitHub 上報(bào)告問(wèn)題和查找源: https://github.com/dotnet/core

使用 "dotnet --help" 查看可用命令或訪問(wèn): https://aka.ms/dotnet-cli

--------------------------------------------------------------------------------------

已成功創(chuàng)建模板“控制臺(tái)應(yīng)用”。

正在處理創(chuàng)建后操作...

正在還原 /home/simon/local/project/vscode/DotNetExample/DotNetExample.csproj:

  Determining projects to restore...

  Restored /home/simon/local/project/vscode/DotNetExample/DotNetExample.csproj (in 95 ms).

已成功還原。

 

$ dotnet run

Hello, World!

 

$ dotnet publish

MSBuild version 17.4.8+6918b863a for .NET

  Determining projects to restore...

  All projects are up-to-date for restore.

  DotNetExample -> /home/simon/local/project/vscode/DotNetExample/bin/Debug/net7.0/DotNetExample.dll

  DotNetExample -> /home/simon/local/project/vscode/DotNetExample/bin/Debug/net7.0/publish/

---------------------------------------

 

 

5). Apalis iMX8 Embedded Linux 下測(cè)試 .NET 7.0 Console 應(yīng)用

a). 通過(guò) scp 將 publish 的 .NET 7.0 應(yīng)用傳輸?shù)?nbsp;Apalis iMX8 模塊

./ Apalis iMX8 測(cè)試上面章節(jié)部署的 .NET runtime 環(huán)境

---------------------------------------

root@apalis-imx8-06738378:~# dotnet --info

Host:

  Version:      7.0.11

  Architecture: arm64

  Commit:       ecb34f85ec

 

.NET SDKs installed:

  No SDKs were found.

 

.NET runtimes installed:

  Microsoft.NETCore.App 7.0.11 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

 

Other architectures found:

  None

 

Environment variables:

  Not set

 

global.json file:

  Not found

 

Learn more:

  https://aka.ms/dotnet/info

 

Download .NET:

  https://aka.ms/dotnet/download

---------------------------------------

 

./ 將示例 .NET 應(yīng)用從開(kāi)發(fā)主機(jī)復(fù)制到 Apalis iMX8

---------------------------------------

### create app folder on Apalis iMX8 ###

root@apalis-imx8-06738378:~# cd ~

root@apalis-imx8-06738378:~# mkdir DotNetExample

### scp published app to apalis iMX8 ###

$ scp -r /home/simon/local/project/vscode/DotNetExample/bin/Debug/net7.0/publish/* root@:/home/root/DotNetExample

---------------------------------------

 

b). 運(yùn)行測(cè)試應(yīng)用

---------------------------------------

root@apalis-imx8-06738378:~# cd DotNetExample/

root@apalis-imx8-06738378:~/DotNetExample# dotnet DotNetExample.dll

Hello, World!

---------------------------------------

 

 

6). 總結(jié)

本文基于嵌入式 Linux 簡(jiǎn)單演示了 .NET runtime 的部署和示例應(yīng)用運(yùn)行。

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測(cè)試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計(jì)算機(jī)模塊

Verdin iMX8MP 調(diào)試串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 測(cè)試