.NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考
.NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考
一,遗憾的尝试
前些天看到了张队公众推送的《Asp.Net终于可以在龙芯服务器上运行啦:Jexus成功完成对国产系列CPU的适配》,联想到上一周与朋友在龙芯捣鼓 .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 源码库,可以看到一些脚本和编译工具链。
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
.NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考的更多相关文章
- Buildroot 龙芯1C支持指南
本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide ...
- 【转贴】龙芯内核发展策略 已经支持k8s
龙芯内核发展策略 时间:2019-06-27 15:48 来源:未知 作者:龙芯中科 点击:1002次 http://www.loongson.cn/m/view.php?aid=1118 ...
- 测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
龙芯3A5000 已经上市,与龙芯3A5000配套的三大编译器GCC.LLVM.GoLang和三大虚拟机Java.JavaScript..NET均已完成开发,从老伙计哪里搞来一台3A5000 机器,安 ...
- 龙芯 3A4000 安装 Debian10 (via debootstrap)
由于一些原因,Debian 的内核不能直接在龙芯的 cpu 上使用.据悉 Linux 5.7 kernel 改进了对龙芯的支持,不久的将来我们应该就能更愉快地在龙芯上运行 Debian 了. 感谢龙芯 ...
- 华为云.NET Core支持情况调查
各大公有云都提供了开发者开发的SDK,今天我们来看看华为云对.NET Core的支持情况怎么样? .NET SDK地址 https://developer.huaweicloud.com/sdk#.N ...
- 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译
面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...
- [转帖]龙芯下一代处理器微结构GS464E细节曝光
龙芯下一代处理器微结构GS464E细节曝光 [日期:2015-05-26] 来源:Linux公社 作者:Linux [字体:大 中 小] http://www.linuxidc.com/Linux/ ...
- 龙芯fedora28日常生存指南
2021-01-30 v0.0.5 从0.0.1开始改了非常多,一月余时间的花费渴望为其他人提供一点帮助,能够快速上手. 这主要是这一年来我从3B1500到3A4000再到福珑2的日常使用记录,是之前 ...
- 龙芯发布.NET 6.0.100开发者试用版
龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者试用版 新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构. 目前支持LoongArch64架构和MIP ...
随机推荐
- Redis 复制过程详解
Redis 的复制功能分为同步( sync )和命令传播( command propagate )两个步骤: 同步用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态. 命令传播则用于在主服务 ...
- 前端Vue知识小白
感觉是已好久没写博文了.今日难得有时间,便写一篇文章.此文章是关于前端知识的,我本身是后端,因工作或其他需要,便学习了前端Vue.此文章是在菜鸟教程上学习的.那么下面进入正文! 首先,Vue.js是一 ...
- 算法学习之剑指offer(九)
一 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). public class Solution ...
- 因果推理的春天-实用HTE(Heterogeneous Treatment Effects)论文github收藏
一直以来机器学习希望解决的一个问题就是'what if',也就是决策指导: 如果我给用户发优惠券用户会留下来么? 如果患者服了这个药血压会降低么? 如果APP增加这个功能会增加用户的使用时长么? 如果 ...
- Python之网络编程Socket
Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...
- ESP8266开发之旅 基础篇④ ESP8266与EEPROM
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- Ubuntu18.04 安装谷歌BBR
说明:Ubuntu 18.04前几天发布了,改变挺大的,内核也直接升到了正式版4.15,而BBR内核要求为4.9,也就是说满足了,所以我们不需要换内核就可以很快的开启BBR,这里简单说下方法. 提示: ...
- Beetlex服务框架之Webapi版本访问控制
在应用服务中API更新是很普遍的事情,为了服务良好地运作很多时候需要新旧版本同时兼容:为了应对这一系列的需求FastHttpApi在新版中强化了Url重写机制来支持API访问版本控制,由原来固定的重写 ...
- 回头看 vue-router
回头看 vue-router 复习 我的github iSAM2016 目录 响应路由参数的变化 嵌套路由 函数式导航 路由的命名 示例:切换路由的时候可以修改页面的标题 导航钩子 全局钩子 实例:检 ...
- Redux的核心概念,实现代码与应用示例
Redux是一种JavaScript的状态管理容器,是一个独立的状态管理库,可配合其它框架使用,比如React.引入Redux主要为了使JavaScript中数据管理的方便,易追踪,避免在大型的Jav ...