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

目錄

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

一,遺憾的嘗試

前些天看到了張隊公眾推送的《》,聯想到上一周與朋友在龍芯搗鼓 .NET Core,就想寫一下關於 .NET Core 在龍芯下的資料。

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

上一周與朋友在龍芯上面為了部署 .NET 項目,頗費心機。朋友公司中標政府項目,開發好 .NET Core 做的項目后,才發現要部署的服務器是龍芯的,.NET Core 無法在上面運行。

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

.NET Core 自然不用想了,完全無法編譯,通過 Google 查詢資料,要重寫 C++ 部分(移植),才能在 龍芯 下編譯出 CoreCLR。

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

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

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

之前筆者為了在 Armel 的 CPU 下運行 .NET Core ,花了很多時間手動編譯 .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 支持的系統如下:

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 查看

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

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.

還有另一個大神的作品

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

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

您可能也會喜歡…