Runtime: Arm6 Raspberry PI 零 - PI 1

创建于 2017-03-31  ·  68评论  ·  资料来源: dotnet/runtime

是否有任何努力为 ARM6 平台提供支持?
我认为 PI Zero 是许多不同 IOT 项目的完美平台,如果没有对它的支持,那就太可惜了。

arch-arm32 area-VM-coreclr port

最有用的评论

就其价值而言,这远远超出了 Pi/Zero。 支持 ARMv6 为大量微控制器打开了大门。 在该生态系统中将 .NET 作为一种选择将具有重要意义,并将提供对 CoreRT 物联网方面的更多兴趣/覆盖。

我会按照最终将 .NET 视为在实时操作系统中编程的选项的顺序来考虑此步骤 1。 换句话说,请不要简单地将 ARMv6 支持等同于 Raspberry Pi 零支持,因为它比直接意义上的支持要远得多(许多其他 MCU 使用该指令集,而且它不会很快实现低功耗) /cost MCUs),以及更抽象意义上的世界(例如,看到 FreeRTOS 或类似的 CoreRT PAL 目标)。

所有68条评论

不,没有这样的努力。 可能需要解决的最大问题是 JIT 不支持 ARM6 Thumb 指令编码。

那么我应该期待什么? 社区或 MS 是否有可能承诺带来 Arm6 支持,或者唯一的方法是 Mono?

如果支持像 Pi Zero 和 Pi Zero W 这样的 ARMv6 cpu,我会非常棒。对于某些用例,不需要使用更强大的 ARMv7,比如 Pi 3。

希望看到支持 ARMv6 :)

我同意你应该包括对 ARMV6 的支持。 我现在想在 Pi Zero 中运行 dotnet core,但我被单声道困住了。

有关于 armv6 支持的消息吗? 我有两个 pi 零只是在等待一个目的..

@janvorli如果 JIT 是问题所在,我们能否期望CoreRT 上的 .Net Core启用此功能?

@dcuccia CoreRT 使用与 CoreCLR 相同的 JIT 编译器,因此问题仍然存在。

@dcuccia@mikedn corert 有一种编译成 C++ 的模式,这样可以解决问题。 但是,我已经忘记了在该模式下实际有多少东西有效。 @jkotas你能提供一些细节吗?

CppCodeGen 运行简单的程序(hello world 等)。 来自https://github.com/dotnet/corert#platform -support :缺少的主要功能是反射、垃圾收集和异常处理。

我同意 CoreRT + CppCodeGen 是一个很好的平台覆盖选择。

@jkotas我读对了吗-按照corert的示例-> https://github.com/dotnet/corert/tree/master/samples/WebApi我可以用cppCodeGen编译它,它可以在我的rasp pi 零上运行吗?

或者它仍然会因为只有 ARMv6 而失败?

对于 WebApi 示例,CppCodeGen 太不完整。 反射和垃圾收集必须首先工作。

谢谢@jkotas - 但是你好世界和一些基本的IO / httpclient的东西会起作用吗?

httpclient 是一段相当复杂的代码。 你可以试一试,但我怀疑它今天是否能与 CppCodeGen 一起使用。

有没有打算提供对 ARMv6 的支持?

我也对看到 ARMv6 支持非常感兴趣。 似乎核心越来越接近,但我没有资格判断好。

为 ARMv6 支持添加我的 +1。 rPi0w 和 rPi3 之间的价格差距为 25 美元,这使得 Pi Zero W 对使用大量设备的物联网项目更加有用。 我们是否可以为此重用 Mono 中的一些代码?

我也倾向于同意。 有一个更大的社区想要在 Pi 上运行更好的 Linux,包括 Pi Zero,然后只是他们社区支持的版本。

就其价值而言,这远远超出了 Pi/Zero。 支持 ARMv6 为大量微控制器打开了大门。 在该生态系统中将 .NET 作为一种选择将具有重要意义,并将提供对 CoreRT 物联网方面的更多兴趣/覆盖。

我会按照最终将 .NET 视为在实时操作系统中编程的选项的顺序来考虑此步骤 1。 换句话说,请不要简单地将 ARMv6 支持等同于 Raspberry Pi 零支持,因为它比直接意义上的支持要远得多(许多其他 MCU 使用该指令集,而且它不会很快实现低功耗) /cost MCUs),以及更抽象意义上的世界(例如,看到 FreeRTOS 或类似的 CoreRT PAL 目标)。

@metanoic我完全同意你的看法。 这也将有助于 IoT Edge 的移植 (https://github.com/Azure/iotedge/issues/12)

我们应该以不到 10 美元的价格拥有一个物联网平台!

+1

同意。 实际上我被单声道困住了:)

在 armv6 上构建一些物联网的东西。 伤心的来到这里。 想为此问题添加我的 +1。

如果在这方面取得进展,有人有任何更新吗? 我只是试着认为它会像在 pi3b+ 上一样工作。 我忘了他们是两个不同的处理器:(

我有一个旧的 Raspberry Pi 模型 B(armv6l CPU),很想在上面运行一些 dotnet 核心项目

我有许多基于 ARMv6 CPU 和 Linux 和 Mono 的迷你服务器。 想将它们切换到 .NET 核心。

也会投票支持armv6! +1

+1 支持 armv6!

+1 会很高兴

是的!

请!

真的很棒!

只是好奇,是否有技术原因,例如 Go 运行时可以使用相同的编译器编译到许多架构,但对于 CoreCLR,添加架构支持的过程似乎要长得多? https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63

@mms- 是的,有技术原因。 Go 是预编译的。 它有两个编译器 - 仅支持 x86(32 和 64 位)的 gc 以及将 GCC 作为其后端的 arm 和 gccgo。 因此,无论 GCC 支持什么架构,他们都可以免费获得它们。
CoreCLR 使用 JIT,所以我们自己添加对新架构的支持。

完全有道理。 如果可以扩展 .Net Native 以在尚不存在 JIT 的其他架构上为 .Net Core 启用相同的路径,那将会很有趣。

添加我对 ARMv6 的投票

我们需要这个!

ARMv6 在 Raspberry Pi Zero 之外还有很多吸引力。 例如,Raspberry Pi 计算模块 1 运行 ARMv6,它使依赖 dotnet 变得更加安全。 目前必须使用 Mono 运行时,这很好,但我真的很想要适当的 dotnet 支持。

@richlander

ARMv6 支持会很棒。

谁能解释为什么 Core 需要 JIT,因此不能在 Armv6 上运行,但 Mono 可以? Mono 肯定有 JIT,因为它只需要运行 IL 代码 - 必须 JIT 到本地 CPU?

谁能解释为什么 Core 需要 JIT,因此不能在 Armv6 上运行,但 Mono 可以?

Mono 有一个不同的 JIT,它支持 Armv6。 CoreCLR JIT 不支持它。 ARM 有两个指令集——ARM 和 THUMB。 ARM v6 有 THUMB,ARM v7 有 THUMB2。
Mono JIT 将所有内容编译成 ARM 指令集,因此它适用于 Armv6 和 v7,但这会导致代码的内存占用增加大约 30%。
Armv7 THUMB2 和 Armv6 THUMB 之间的差异非常大,添加对 Armv6 的支持需要对 CoreCLR JIT 进行大量更改。

.NET Core 3.0 已经发布,3.1 指日可待,5.0 正在计划中,并被宣传为统一平台
Blazor 使用 Mono,在创建新项目(选择目标)时不能选择 JIT,如果选择 ARMv7,则应使用 CoreCLR,如果 ARMv6,则应使用类似 Mono 的 JIT。

Raspberry Pi 4 至少为 35 美元,Pi Zero 为 5 美元,Pi Zero W 为 10 美元。 因此,以单个 Pi 4 的价格,您可以获得 7 个 Pi Zeros!

正如许多其他人之前所写,这不仅仅是关于 Raspberry Pi Zero,所有 ARMv6 设备都可以运行 .NET Core 应用程序。

2.5 年后我们还在等待🙂

+1

运行时项目中有一个叫armv6 support的PR: https ://github.com/dotnet/runtime/pull/657

请添加此支持

我也在等这个支持。。。

对网络核心的 Armv6 支持会很棒......

有关于 armv6 支持的消息吗? 我有两个 pi 零只是在等待一个目的..

感谢

请添加对 armv6 的支持

https://blogs.windows.com/windowsdeveloper/2020/05/26/build-your-iot-devices-with-windows-for-iot-a-comprehensive-platform-for-every-device-developer/

我们很高兴与大家分享这一点,有一个适用于物联网的 Windows 操作系统版本,即 Windows 10 IoT Enterprise 可以满足这些需求。

我可能解释错了,但这让我担心,除非是 ARM64,否则 RPi 将不再有 IoT Core。

@miloush我不认为这个问题与 Windows IoT 有任何关系。 这里的主题是为 armv6 处理器添加 dotnet 支持,以便我们可以在 Raspberry Pi Zero 上运行 dotnet。

@realivanjx确实是我的错

从上面的阅读来看,由于拇指指令集需要工作,似乎不太可能支持 ARM6。 其他人有在其他低成本硬件(如 Orange Pi Zero)上运行 dotnet 核心的经验吗?

添加 ARMv6 的 PR #657 已关闭...

来到这里是因为我们需要在学校的 RPi Zeros 上运行一个 .NET Core 项目,因为我们为此项目购买了大约 25 个 RPi Zeros。 我们没有,也不会购买 25 个新的 RPi 3,因为 .NET Core 不支持 ARMv6。

猜猜我会用 Golang 重写项目......

@eduncan911尝试走单声道路线。 这里有一些细节。

Net6 应该通过单声道运行时支持多个 cpu 架构。 或许。

我正在通过单声道运行超过一千个 ARMv6 cpu 设备。 3 年前我们推出了 ARMv7 硬件,仍然在单声道上,但现在我们正在重构和迁移到 Net core/net 标准,所以只有小的可执行文件会有所不同,并且库在 mono 和 net core 之间重用。

同样在这里。 我从 pi 1 开始在 Lord's 板球场运行记分牌
和 Pi B+ 使用 Mono。 较新的套件使用 Net Core 在 Pi 3 上运行。 相同的
源文件,具有完成工作的核心对象。 在框架内
和核心应用程序它只是创建服务对象并加载应用程序
配置进去。

布莱恩·克罗塔兹
银曲线

不幸的是,单声道充满了错误。 没有人可能会修复的错误。 其中大部分与网络有关。 例如,在某些网络上,当 dns 可用但正常流量存在问题时 - https/ssl 流存在内存泄漏,可能会占用整个内存。 或者如果不使用 MTU 大小,单声道无法在某些网络上通信。 但是 python 或 NET Core 没有通信问题。

令人惊讶的是,mono 有时比 net core 更快,至少在 ARMv7 上是这样。 并非总是如此,但我预计净核心会以巨大的优势赢得性能竞赛。

我很难相信 Mono 充满了错误,但它可能取决于应用程序。 Blazor WASM 在 Mono 中实现,如果存在与网络相关的问题,这将是一个主要问题。

Mono:从 Xamarin 到 WebAssembly、Blazor 和 .NET 5

抄送@马雷克萨法尔

我在几千台机器和许多网络配置上运行单声道。 这些错误不会出现在每台机器和网络配置上。 它们具有相同的 linux 映像。

MTU 大小问题——0.3% 的安装——在这些网络上是 100% 可重现的。 我完全不知道为什么。 但是 ssh 在这些网络上工作,而我必须更改 mtu 大小的事实只是偶然发现的。

SSL Stream 内存泄漏 - 2% 的安装。 复现非常困难,最后我们用4G路由器成功复现,消耗数据,所以只有dns在工作,其他请求不起作用。 但是我们无法在普通局域网上使用 tcp 错误模拟器来模拟它。 我们使用 4G 路由器和特定的 SIM 卡来模拟泄漏。 通常发生在安装 4G 或其他无线网络时。 似乎如果在建立 TCP 和 HTTPS 连接的情况下 TCP 握手未完成,则会造成泄漏。

有时我们会遇到一个错误,有时它会在短时间内修复,有时我们会解决它们,一旦我在单声道中修复它并且拉取请求被接受(也与网络有关):) 但公平地说,本周我在 NET5 RC1 中发现(并报告)了一个错误。 对我来说,mono 是一款出色的软件(我使用它 9 年),但在网络代码中存在一些故障。

很公平,但是将 Mono 描述为充满错误有点不公平。 4G 路由器/SIM 卡组合当然看起来像是一个边缘案例,我鼓励您在Mono repo上创建一个问题并提供尽可能多的信息。 即使它没有得到解决,至少其他有相同问题的人可以发现这个错误。 感谢您之前对 Mono/NET5 存储库的贡献。

好吧,对不起,这不公平。

但是我们只是浪费了数百个工时来寻找为什么有些安装会出现这些问题。 Mono 尤其适用于寿命短的应用程序——比如移动应用程序。 我们有一些装置的正常运行时间超过一年,但有时会出现问题。

@michaldobrodenka顺便说一句,您的推荐信很有趣!

.NET 6.0 中会包含 ARMv6 支持吗?

Richard Lander 在 .NET 5 Preview 4 公告的评论中提到了一些关于它的内容
https://devblogs.microsoft.com/dotnet/announcing-net-5-preview-4-and-our-journey-to-one-net/#comment -5958

我的想法是我们将使用 Mono for Armv6 作为 .NET 5.0 的一部分。 我们将所有与 Mono/Xamarin 相关的项目都升级到 6.0。 我希望我们可以资助 6.0 中的 Mono Armv6 构建。

此页面是否有帮助?
0 / 5 - 0 等级