dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.27k stars 4.73k forks source link

.NET Core Runtime ARM32 builds now available #8738

Closed richlander closed 4 years ago

richlander commented 7 years ago

.NET Core Runtime ARM32 builds now available

Update: ARM32 is now supported with .NET Core 2.1.

The .NET Core team is now producing ARM32 builds for .NET Core Runtime 2.0+, for both Linux and Windows. These builds are great for using on Raspberry Pi. The builds are not yet supported by Microsoft and have preview status. Please give us feedback.

Docker ARM32 images are also available at microsoft/dotnet. See microsoft/dotnet Docker Hub README adopts segmented OS/Arch style for a related announcement.

There are two good sources of .NET Core ARM32 samples that you can use to get started:

Details

The team is producing Runtime and not SDK builds for .NET Core. As a result, you need to build your applications on another operating system and then copy to a Raspberry Pi (or similar device) to run. The samples provided above show you how to do that.

You can get builds from the following links. Official builds are not yet provided.

Note that ARM32 is sometimes referred to as armhf, which refers to hardware floating point capability.

You can remote debug Linux ARM32 applications from a Windows, macOS or Linux machine.

The SDK has not been made available for ARM32 to yet as it doesn't fit within a reasonable performance envelope (space and time) for ARM32. We will resolve this although it isn't a top priority currently (unless feedback suggests otherwise). Our belief is that building on a desktop or build machine will be both more efficient and a reasonable work around to doing development on the Pi for the time being. We also wanted to prioritize the runtime being available since it's necessary for anything to work.

A more near-term need is unit testing on ARM32. There is no replacement for running tests on device. We intend to publish short-term workarounds for this and work on a longer-term solution that is easy to use.

Also published at dotnet/announcements dotnet/runtime#3861.

BruceForstall commented 7 years ago

cc @dotnet/arm32-contrib @dotnet/jit-contrib

yfakariya commented 7 years ago

I have two questions about the arm32 drop because I was waiting for it long time...

  1. What's really meaning "The builds ... have preview status."? Reliability, performance, or functionality(lack of SDK on arm)?
  2. When will be arm32 supported (or have "stable" status)?

Thanks

richlander commented 7 years ago

I am planing for ARM32 to go stable with .NET Core 2.1. We are still planning .NET Core 2.1.

Preview means two things:

richlander commented 7 years ago

Closing this issue since this was intended as an announcement. Feel free to comment here or open new issues, as appropriate.

nzain commented 6 years ago

We're using dotnet core 2.0 with great success on an embedded device (cortex A7, but not raspberry) running a self-compiled linux (using buildroot, not debian!). The device is running a minimalistic Asp.Net REST webservice to enable a high-level communication to complex sensors connected to the device. This was a perfect choice, since ...

Many issues are resolved by now, the most impactful open issues are for me:

dzuda11 commented 5 years ago

@nzain or anyone else, please, can you tell me how do you install .NET Core Runtime on buildroot? I have tried to do it just like on raspbbian lite, extract files from dotnet-runtime-2.2.6-linux-arm.tar.gz in /opt/dotnet and run command ln -s /opt/dotnet/dotnet /local/bin, but it doesn't work. When I type dotnet --info it returns in terminal sh: dotnet: not found.

My configuration for buildroot is raspberrypi3_defconfig with 240M instead of 120M

Please help me. Thank you :)

nzain commented 5 years ago

Not found means it's not there. This is not a dotnet problem. You should learn more about Linux shell (sh), symlinks (yours is probably not correct), and why people usually create symlinks: the /opt folder is typically used to install custom stuff manually, but executable programs are not found there automatically. This is similar to windows $PATH variable extension.

Miljan Džudović notifications@github.com schrieb am Do., 1. Aug. 2019, 07:35:

@nzain https://github.com/nzain, please, can you tell me how do you install .NET Core Runtime on buildroot? I have tried to do it just like on raspbbian lite, extract files from dotnet-runtime-2.2.6-linux-arm.tar.gz in /opt/dotnet and run command ln -s /opt/dotnet/dotnet /local/bin, but it doesn't work. When I type dotnet --info it returns in terminal sh: dotnet: not found. Please help me. Thank you :)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/dotnet/coreclr/issues/13369?email_source=notifications&email_token=ADKQV6ZHJ5TZIVYCHIT4KSLQCJY2TA5CNFSM4DW3HR4KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD3JLU6A#issuecomment-517126776, or mute the thread https://github.com/notifications/unsubscribe-auth/ADKQV63O4F2YBZ4W2BOJDJ3QCJY2TANCNFSM4DW3HR4A .

dzuda11 commented 5 years ago

For everyone how looking this issues with the same problem as me. .NET Core runtime on buildroot. Problem was the wrong C library, by default for Raspberry Pi configuration it's uClibc-ng, but for running dotnet runtime for ARM32 your have to choose glibc (Toolchain -> C library -> glibc) and symlinks should be ln -s /opt/dotnet/dotnet /usr/bin

alexanderwwagner commented 5 years ago

@dzuda11 At the moment Iḿ trying to install the .Net Core runtime on my embedded Linux (RaspberryPi/Buildroot) I did this like you...

It looks like, the install was successfully! If I type in: "dotnet" then I get the output:

/lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet) /lib/libstdc++.so.6:no version information available (required by dotnet)

Now I have the problem, that I can't start an application because of this: /lib/libstdc++.so.6:no version information available (required by dotnet)

Do you have an idea where the problem could be?

Thank you!

dzuda11 commented 5 years ago

First of all, @Test4564 you have very funny name xD

Check if you enable C++ support Toolchain -> [*] Enable C++ support and check do you have right binaries for RPi.

alexanderwwagner commented 5 years ago

To choose a good name is sometimes difficult :)

My Settings:

Toolchain: Toolchain type (Buildroot toolchain) C library (glibc) [*] Enable C++ support

Dotnet: dotnet-runtime-2.2.6-linux-arm.tar.gz (Arm32/Linux) => extract in /opt/dotnet

alex@ElementaryWork:/media/alex/ecb61cd0-ec68-46fb-92c3-4eaf194553fb/opt$ sudo ln -s /opt/dotnet/dotnet /media/alex/ecb61cd0-ec68-46fb-92c3-4eaf194553fb/usr/bin/

alexanderwwagner commented 5 years ago

So till now I solved the problem.

I adjust my Buildroot settings: [] Enable Fortran support []Build cross gdb for the host [*]Copy gconv librarys

Now the problem I described above is solved.