.NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考

一,遗憾的尝试

Jexus Web Server 能够在龙芯服务器上跑,但是 ASP.NET 呢?.NET Core 呢?安装什么版本的 Mono ?Jexus 作者的文章表达有点模糊呀~

下面是宇内的回复:


作者写得很实在,说的大实话。.NET Core目前对龙芯不支持,或者说支撑龙芯的操作系统不支持.NET Core,对国产龙芯的软件生态来说是一大缺陷,毕竟 C# 与 .NetCore/Mono 也是全球几大主流的编程语言和运行平台之一。希望龙芯厂商、支持龙芯的国产操作系统厂商能高度重视这个问题,主动加入 .Net Core 社区,积极提供代码,尽快做好适配工作。

  对本文需要提示的一点是:Jexus支持龙芯,就是指Jexus能在支持龙芯的Linux操作系统上跑ASP.NET。如果希望跑 Asp.net Core,应该能找到某种变通的办法,目前我在忙其它的事,暂时没有时间尝试它。



上一周与朋友在龙芯上面为了部署 .NET 项目,颇费心机。朋友公司中标政府项目,开发好 .NET Core 做的项目后,才发现要部署的服务器是龙芯的,.NET Core 无法在上面运行。

服务器有什么有 Mono 4.x,可以创建简单的 Proparm.cs ,编译出程序,使用 mono xx.exe 运行,可是把项目放进去编译不出来~想编译安装 Mono 6.x 也不行,中间有些过程报错。

.NET Core 自然不用想了,完全无法编译,通过 Google 查询资料,要重写 C++ 部分(移植),才能在 龙芯 下编译出 CoreCLR。

官方 CoreCLR 源码库,可以看到一些脚本和编译工具链。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

China .NET Conf 2019-.NET技术架构下的混沌工程实践

这个月的8号、9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题《.NET技术架构下的混沌工程实践》,给广大的.NET开发小伙伴介绍混沌工程和高可用性改造实践。会后大家伙聚餐的时候,陈计节老师建…

分布式应用框架 Dapr

微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合和独立部署,但是这种方法的成本很高,需要了解和熟练掌握分布式系统。为了使用所有开发人员能够使用任何语言和任何框架轻松…

使用ASP.NET Core 3.x 构建 RESTful API - 3.1 API资源命名

为了与RESTful API进行交互,API消费者需要使用到三个概念: 资源的标识。也就是可以找到资源的URI。 HTTP方法。例如GET,POST等等,这些方法是HTTP协议的一部分。 有效载荷(可选),英文就是Payload…

HM编码架构

首先进入编码encmain.cpp里的int main 函数,主函数的入口,里面包含的重要函数是时间计数函数和encode()函数。 在encode函数中开始编码。encode函数中,首先输入YUV序列,初始化内部类和成员变量,转换色彩空间&#xff0…

你可能不知道的 docker 命令的奇淫怪巧

你可能不知道的 docker 命令的奇淫怪巧Intro分享一些可能会用到的一些简单实用却可能是你不知道的 docker 命令dangling imagesbuild 自己的 docker 镜像的时候,有时会遇到用一个甚至多个中间层镜像,这会一定程度上减少最终打包出来 docker 镜像的大小&a…

C++ 快速排序算法

快速排序算法最坏的时间复杂度时o(n*n),期望的运行时间为o(nlgn)。 逻辑分析: 1 先从数组中选取一个数作为基数,可随机选择; 2 将数组中大于该基数的放在该基数右边,小于该基数的放在该基数左边; 3对左…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

更新记录:-- 2019-11-16 增加Docker容器监控系列文章// 此外,今天是11月17日,我又老了一岁,祝我自己生日快乐!近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给…

C++插入排序算法

插入排序的时间复杂度为o(n*n)。 逻辑分析: 将数组第一个元素认为是有序数组,然后比较第二个元素的关键字与第一个元素关键字的大小,有序排列。 将数组后面一个元素的关键字插入到前面的有序数组中,一直重复至排序完成。 代码…

身边的设计模式(一):单例 与 RedisCacheManager

大家好,以后我会用23篇文章,来给大家讲解设计模式,当然如果你看过我的项目,很多设计模式已经很会了,只是没有注意到,我这里会讲解一下,大家就会发现,如果你看懂了我的项目&#xff0…

插入排序 希尔排序 C++

最优时间复杂度为o(n),又称缩小增量排序。 逻辑分析: 1、希尔排序首先是确定增量,默认的希尔增量(不一定是最优)为length/2。 2、根据增量分组,将分组的元素利用直接插入法排序。 3、增量增量/2&#x…

Kubernetes包管理器Helm发布3.0版本

Helm 3.0 已经发布,该版本是 CLI 工具的最新主要版本,主要关注简单性、安全性和可用性,内容如下:新特性移除 Tiller(Helm 2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Ti…

冒泡排序法 C++

实在是想感叹一下,因为一个很简单的东西,自己在网上找了半天反而弄的很复杂,逻辑性太强,小白实在是看不懂。因此,下面是一个最小白的冒泡排序的实现方式。 时间复杂度o(n*n)。 逻辑分析: 依次比较数组中…

“兼职”运维的常用命令

自从产品转到了 dotNET Core 之后,更深入的接触 Linux和 Docker ,而我每天的工作中,有一部分时间相当于在“兼职”做一些运维的事情。下面是一些在日常中常用的命令,算是个备忘吧。环境操作系统:CentOS7Docker&#xf…

选择排序 C++

选择排序的时间复杂度为o(n*n)&#xff0c;空间复杂度为o(n)。 逻辑分析&#xff1a; 1 假设数组中的最小数为a[0]&#xff0c;然后比较数组中其他数与a[0]的大小&#xff0c;若a[i]<a[0]&#xff0c;则交换两者为止&#xff0c;如此循环下来&#xff0c;最小的数字就存在…

rabbitmq死信队列详解与使用

先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer将消息投递到broker或者直接到queue里了&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时…

归并排序算法 C++

感谢博客https://blog.csdn.net/a130737/article/details/38228369 归并排序的时间复杂度为o(nlgn)&#xff0c;空间复杂度为o(n)。是一种采用分治思想的排序方法。 逻辑分析&#xff1a; 假设输入数组a[] { 2, 1, 4, 5, 3, 8, 7, 9, 0, 6 }。 首先将数组二分成两个数组le…

使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

Demo下面我们就来实践一下。打开之前的项目&#xff0c;并建立CompaniesController&#xff1a; 这里有6个地方比较关键&#xff0c;我们挨个看一下&#xff1a; RESTful API 或者其它Web API的Controller都应该继承于 ControllerBase 这个类&#xff08;点此查看详细的官方文档…

C++ 链表

线性表&#xff08;顺序表&#xff09;有两种存储方式&#xff1a;链式存储和顺式存储&#xff0c;顺式存储如数组&#xff0c;其内存连续分配&#xff0c;且是静态分配。链式存储&#xff0c;内存是不连续的&#xff0c;且是动态分配。前一个元素存储数据&#xff0c;后一个元…