.NET Core 對龍芯的支持狀況和對 .NET Core 開發嵌入式的思考

.NET Core 對龍芯的支持狀況和對 .NET Core 開發嵌入式的思考

一,遺憾的嘗試

前些天看到了張隊公衆推送的《Asp.Net終於能夠在龍芯服務器上運行啦:Jexus成功完成對國產系列CPU的適配》,聯想到上一週與朋友在龍芯搗鼓 .NET Core,就想寫一下關於 .NET Core 在龍芯下的資料。ios

Jexus Web Server 可以在龍芯服務器上跑,可是 ASP.NET 呢?.NET Core 呢?安裝什麼版本的 Mono ?Jexus 做者的文章表達有點模糊呀~git

上一週與朋友在龍芯上面爲了部署 .NET 項目,頗費心機。朋友公司中標政府項目,開發好 .NET Core 作的項目後,才發現要部署的服務器是龍芯的,.NET Core 沒法在上面運行。github

服務器有什麼有 Mono 4.x,能夠建立簡單的 Proparm.cs ,編譯出程序,使用 mono xx.exe 運行,但是把項目放進去編譯不出來~想編譯安裝 Mono 6.x 也不行,中間有些過程報錯。服務器

.NET Core 天然不用想了,徹底沒法編譯,經過 Google 查詢資料,要重寫 C++ 部分(移植),才能在 龍芯 下編譯出 CoreCLR。架構

官方 CoreCLR 源碼庫,能夠看到一些腳本和編譯工具鏈。app

https://github.com/dotnet/coreclr/工具

RISV-C 是精簡指令集,MIPS 是指 基於 RISC-V 的 CPU 架構,龍芯服務器使用 MIPS 架構。學習

最終,沒法部署 .NET 軟件,朋友公司改用 Java 開發。。。測試

以前筆者爲了在 Armel 的 CPU 下運行 .NET Core ,花了不少時間手動編譯 .NET Core,最終仍是失敗。我將編譯過程詳細寫了一篇文章,地址《瞎折騰實錄:構建 Armel 版本的 .NET Core 教程和資料資源》。

二,.NET Core在嵌入式下的幾點不足

18年7月張隊來我校組織了大灣區 .NET 交流會,從那時起開始學習 .NET ,19 年三月月份進入敢爲實習轉正至此。

使用 .NET Core 開發半年的時間裏,在嵌入式開發中,我我的總結當前 .NET Core 在嵌入式領域有幾個問題/建議。

1,不支持前幾年的CPU

.NET Core 沒法在樹莓派 Zero上運行(Arm v6);

沒法在華爲海思A9芯片上運行(Armel Armv7);

這兩種芯片雖然說是幾年前出的芯片,可是 .NET Core 大張旗鼓的說要搞 IoT,卻不兼容舊一些的 CPU,目前不少舊式設備依然會在將來一段時間內是主流的存在 。

微軟官方也說了:

Note: .NET Core 2.1 is supported on Raspberry Pi 2+. It isn’t supported on the Pi Zero or other devices that use an ARMv6 chip. .NET Core requires ARMv7 or ARMv8 chips, like the ARM Cortex-A53.

Arm 方面的支持仍是不夠廣。

2,測試的硬件設備較少

官方對嵌入式設備的測試,主要在 樹莓派 2 / 3,還有不少開發板沒有測試~

3,支持兼容的系統版本較少

.NET Core 支持不少 Linux 系統,可是對應這些系統的支持,都是以最新版本的系統爲主,例如 .NET Core 3.0 在Ubuntu 上是支持 16.x、18.x,14.x 和 17.x 被無情的拋棄了。

.NET Core 3.0 支持的系統以下:

https://github.com/dotnet/core/blob/master/release-notes/3.0/3.0-supported-os.md

4,體積依然太大

對於嵌入式開發來講, .NET Core 的體積依然太大,.NET Core 3.0 也拯救不了。。。哪怕只有一行 Hello World,也要 70MB+ 以上。

5,依賴庫比較傷腦筋

常常會出現 ICU、libssl、gcc 等依賴庫版本不一致或沒有安裝這些庫時的報錯信息,石頭哥曾經被這些問題搞得掉頭髮。

三,.NET Core 龍芯移植的進展和資料

根據大佬們的移植,在 11 月 9 號時,已經實現了 在龍芯上面運行 .NET Core 的 Hello World 實例,

The code base was upgraded to 3.0. Hello World and serveral tests in coreclr can run on MIPS64 now.

這是對於 CoreCLR 的移植,還有不少問題等待大神解決。

對於 .NET Core 在 MIPS 上的移植討論,能夠到 Issue 查看

https://github.com/dotnet/coreclr/issues/969#issuecomment-550129085

不過,微軟官方目前沒有移植計劃,只能靠社區去完成了。

Microsoft currently has no plans or work in progress to support MIPS. Of course, we would be willing to accept external contributions towards that goal as appropriate. Note that it is, certainly, a significant amount of work to port .NET Core to a new platform.

還有另外一個大神的做品

https://github.com/reignstudios/IL2X

This project will focus on translating .NET IL for non-supported .NET targets. Portibility is a huge focus.

  • .NET Standard compatibility
  • Native C performance
  • C89: modern, legacy and embedded platforms (x86, MIPS, SPARK, RISC-V, PPC, AVR, etc)
  • CC65: 6502 platforms (Atari, C64, NES, Apple II, etc) [CS2X may be better suited]]
  • SDCC: Many targets (ColecoVision, etc) [CS2X may be better suited]
  • Assembly: CP1610 (Intellivision) [CS2X may be better suited]]
  • Retarget: Custom assembly targets via plugin system (FPGA CPU, 16bit bytes, etc)
  • Custom Standard lib(s) for various targets.
  • Documentation
相關文章
相關標籤/搜索