嵌入式Linux下運行 DotNet 應(yīng)用簡單示例
1). 簡介
嵌入式 Linux 逐漸成為嵌入式設(shè)備的主流操作系統(tǒng),但是應(yīng)用開發(fā)工程師很多更熟悉 Microsoft C# 開發(fā),得益于 Microsoft .Net Framework 的跨平臺支持,本文就簡單示例在 Embedded Linux 環(huán)境運行 .NET 應(yīng)用。
本文所演示的平臺來自于Toradex Apalis iMX8 嵌入式平臺,基于 NXP iMX8 系列 ARM 處理器,核心為 Cortex-A52/A53 。
2). 硬件準(zhǔn)備
a). Apalis iMX8 ARM 核心版配合 Apalis Eva Board 載板,并連接調(diào)試串口和網(wǎng)口以便測試。
3). 部署 Microsoft .Net Framework 運行庫到 Embedded Linux BSP
a). Apalis iMX8 模塊標(biāo)準(zhǔn) Ycoto Linux BSP 中默認(rèn)沒有包含 Microsoft .Net Framework 相關(guān) runtime 運行庫支持,可以參考這里 Microsoft 官方文檔通過 script 方式安裝,不過為了方便管理和部署,本文演示通過 Ycoto Project/Openembedded 編譯方式來添加相關(guān)庫文件,Ycoto Project .Net Framework runtime 由下面 meta-dotnet-core layer 來提供,詳細(xì)說明可以參考項目 README 的說明。
https://github.com/RDunkley/meta-dotnet-core
b). 首先需要在 Linux編譯開發(fā)主機部署 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)庫組件,如果需要可以選擇指定 .NET runtime 版本,本文編譯測試沒有指定,默認(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 會包含 .NET runtime,因此兩者不要同時添加
---------------------------------------
# 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). 參考這里的說明將上述修改下重新編譯生成的 Ycoto Linux Image 通過 Toradex Easy Installer 更新到 Apalis iMX8 模塊。
4). 生成 .NET 7.0 Console 測試應(yīng)用
a). 可以通過 Virtual Studio 或者 Virtual Studio Code IDE 來生成這個 Hello World Console 應(yīng)用,本文參考這里的說明使用 VS Code來生成,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 開發(fā)證書。
若要信任該證書,請運行 "dotnet dev-certs https --trust" (僅限 Windows 和 macOS)。
了解 HTTPS: https://aka.ms/dotnet-https
----------------
編寫你的第一個應(yīng)用: https://aka.ms/dotnet-hello-world
查找新增功能: https://aka.ms/dotnet-whats-new
瀏覽文檔: https://aka.ms/dotnet-docs
在 GitHub 上報告問題和查找源: https://github.com/dotnet/core
使用 "dotnet --help" 查看可用命令或訪問: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------
已成功創(chuàng)建模板“控制臺應(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 下測試 .NET 7.0 Console 應(yīng)用
a). 通過 scp 將 publish 的 .NET 7.0 應(yīng)用傳輸?shù)?nbsp;Apalis iMX8 模塊
./ Apalis iMX8 測試上面章節(jié)3 部署的 .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)用從開發(fā)主機復(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@
---------------------------------------
b). 運行測試應(yīng)用
---------------------------------------
root@apalis-imx8-06738378:~# cd DotNetExample/
root@apalis-imx8-06738378:~/DotNetExample# dotnet DotNetExample.dll
Hello, World!
---------------------------------------
6). 總結(jié)
本文基于嵌入式 Linux 簡單演示了 .NET runtime 的部署和示例應(yīng)用運行。
提交
Verdin AM62 LVGL 移植
基于 NXP iMX8MM 測試 Secure Boot 功能
隆重推出 Aquila - 新一代 Toradex 計算機模塊
Verdin iMX8MP 調(diào)試串口更改
NXP iMX8MM Cortex-M4 核心 GPT Capture 測試