Runtime: Arm6 Raspberry PI Zero — PI 1

Созданный на 31 мар. 2017  ·  68Комментарии  ·  Источник: dotnet/runtime

Предпринимаются ли какие-либо усилия для обеспечения поддержки платформы ARM6?
Я думаю, что PI Zero — идеальная платформа для множества различных проектов Интернета вещей, и было бы очень жаль, если бы у нее не было поддержки.

arch-arm32 area-VM-coreclr port

Самый полезный комментарий

Это выходит далеко за рамки Pi/Zero, чего бы это ни стоило. Поддержка ARMv6 открывает двери для широкого спектра микроконтроллеров. Наличие .NET в качестве выбора в этой экосистеме имело бы большое значение и обеспечило бы значительно больший интерес/охват аспектов IoT в CoreRT.

Я бы рассматривал этот шаг 1 в последовательности, которая в конечном итоге приведет к тому, что .NET станет вариантом для программирования в операционных системах реального времени. Другими словами, пожалуйста, не приравнивайте поддержку ARMv6 к поддержке Raspberry Pi Zero , так как в прямом смысле это идет гораздо дальше (многие другие микроконтроллеры, которые используют этот набор инструкций, и в ближайшее время он никуда не денется из-за низкого энергопотребления). /cost MCU) и другие миры в более абстрактном смысле (например, видение цели CoreRT PAL для FreeRTOS или аналогичной).

Все 68 Комментарий

Нет, такого усилия нет. Вероятно, самая большая проблема, которую необходимо решить, заключается в том, что JIT не поддерживает кодирование инструкций ARM6 Thumb.

Так чего мне ожидать? Есть ли шанс, что сообщество или MS возьмут на себя обязательство обеспечить поддержку Arm6, или единственный способ - это Mono?

Было бы замечательно, если бы была поддержка процессоров ARMv6, таких как Pi Zero и Pi Zero W. В некоторых случаях использования нет необходимости использовать более мощный ARMv7, такой как Pi 3.

Хотелось бы видеть поддержку ARMv6 :)

Я согласен, что вы должны включить поддержку ARMV6. Я хочу запустить ядро ​​​​dotnet в Pi Zero прямо сейчас, я застрял в моно.

Есть информация о поддержке armv6? У меня есть два нуля пи, которые просто ждут своей цели.

@janvorli Если проблема заключается в JIT, можем ли мы ожидать, что .Net Core на CoreRT включит это?

@dcuccia CoreRT использует тот же JIT-компилятор, что и CoreCLR, поэтому проблема остается.

@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 zero?

Или это все равно не удастся из-за наличия только ARMv6?

CppCodeGen слишком неполный для образца WebApi. Отражение и сборка мусора должны работать в первую очередь.

спасибо @jkotas - но тогда привет, мир и некоторые базовые вещи IO/httpclient будут работать?

httpclient — довольно сложный фрагмент кода. Вы можете попробовать, но я сомневаюсь, что сегодня это будет работать с CppCodeGen.

Есть ли намерение обеспечить поддержку ARMv6?

Я также очень заинтересован в поддержке ARMv6. Кажется, что ядро ​​приближается, однако я не компетентен, чтобы хорошо судить.

Добавляю +1 за поддержку ARMv6. Разрыв в цене между rPi0w и rPi3 составляет 25 долларов, что делает Pi Zero W гораздо более полезным для проектов IoT, где используется много устройств. Можем ли мы повторно использовать для этого некоторый код из Mono?

И я тоже склонен согласиться. Существует еще большее сообщество, которое хочет использовать гораздо лучший Linux на Pi, включая Pi Zero, чем только их поддерживаемые сообществом выпуски.

Это выходит далеко за рамки Pi/Zero, чего бы это ни стоило. Поддержка ARMv6 открывает двери для широкого спектра микроконтроллеров. Наличие .NET в качестве выбора в этой экосистеме имело бы большое значение и обеспечило бы значительно больший интерес/охват аспектов IoT в CoreRT.

Я бы рассматривал этот шаг 1 в последовательности, которая в конечном итоге приведет к тому, что .NET станет вариантом для программирования в операционных системах реального времени. Другими словами, пожалуйста, не приравнивайте поддержку ARMv6 к поддержке Raspberry Pi Zero , так как в прямом смысле это идет гораздо дальше (многие другие микроконтроллеры, которые используют этот набор инструкций, и в ближайшее время он никуда не денется из-за низкого энергопотребления). /cost MCU) и другие миры в более абстрактном смысле (например, видение цели CoreRT PAL для FreeRTOS или аналогичной).

@metanoic Я полностью с тобой согласен. И это также помогло бы портировать IoT Edge (https://github.com/Azure/iotedge/issues/12).

У нас должна быть IoT-платформа менее чем за 10$!

+1

Соглашаться. На самом деле я застрял с Моно :)

Создание некоторых вещей IoT на armv6. Пришел грустный. Хочу добавить мой +1 к этому вопросу.

У кого-нибудь есть новости о том, есть ли прогресс в этом? Я просто думал, что это будет работать так же, как на pi3b+. Я забыл, что это два разных процессора :(

У меня есть старая модель Raspberry Pi B (процессор armv6l), и я хотел бы запустить на ней несколько основных проектов dotnet.

У меня много мини-серверов на базе процессора ARMv6 с Linux и Mono. Хотел бы переключить их на ядро ​​.NET.

Также проголосовал бы за поддержку armv6! +1

+1 за поддержку armv6!

+1 было бы неплохо иметь

ДА!

Пожалуйста!

Это было бы действительно здорово!

Просто любопытно, есть ли техническая причина, по которой, например, среда выполнения Go может компилироваться во многие архитектуры с использованием одного и того же компилятора, но для CoreCLR добавление поддержки архитектур кажется гораздо более длительным процессом? https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63

@mms- да, есть техническая причина. Go предварительно скомпилирован. Он имеет два компилятора — gc, который поддерживает только x86 (32 и 64 бита), а также arm и gccgo, использующий GCC в качестве своего бэкенда. Таким образом, какие бы архитектуры ни поддерживались GCC, они получают их бесплатно.
CoreCLR использует JIT, поэтому мы самостоятельно добавляем поддержку новых архитектур.

Имеет смысл. Было бы интересно, если бы .Net Native можно было расширить, чтобы включить тот же путь для .Net Core на других архитектурах, где JIT еще не существует.

Добавляю свой голос за ARMv6

Нам это нужно!

ARMv6 имеет массу преимуществ помимо Raspberry Pi Zero. Например, Raspberry Pi Compute Module 1 работает под управлением ARMv6, что делает более безопасным использование dotnet. В настоящее время приходится использовать среду выполнения Mono, и это нормально, но мне бы очень хотелось иметь правильную поддержку dotnet.

@richlander

Поддержка ARMv6 была бы отличной.

Кто-нибудь может объяснить, почему Core нуждается в JIT и поэтому не может работать на Armv6, а Mono может? Конечно, у Mono есть JIT, так как для запуска требуется только IL-код, который должен быть JIT-коммутирован с локальным процессором?

Кто-нибудь может объяснить, почему 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 Zero!

И, как уже писали многие другие, речь идет не только о Raspberry Pi Zero, все устройства ARMv6 могут запускать приложения .NET Core.

Спустя 2,5 года мы все еще ждем 🙂

+1

В проекте времени выполнения есть PR, называемый поддержкой armv6: https://github.com/dotnet/runtime/pull/657 .

Пожалуйста, добавьте эту поддержку

Я тоже жду этой поддержки...

Поддержка ядра Armv6 для net core была бы потрясающей...

Есть информация о поддержке armv6? У меня есть два нуля пи, которые просто ждут своей цели.

Благодарить

Пожалуйста, добавьте поддержку 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 для IoT, Windows 10 IoT Enterprise, который может удовлетворить эти потребности.

Я могу интерпретировать это неправильно, но это заставляет меня беспокоиться о том, что больше не будет IoT Core для RPi, если только это не ARM64.

@miloush Я не думаю, что эта проблема связана с Windows IoT. Здесь речь идет о добавлении поддержки dotnet в процессор armv6, чтобы мы могли запускать dotnet на Raspberry Pi Zero.

@realivanjx действительно мой плохой

Из вышеизложенного кажется, что поддержка ARM6 маловероятна из-за работы, необходимой для набора инструкций большого пальца. У кого-нибудь еще есть опыт запуска ядра dotnet на другом недорогом оборудовании, таком как Orange Pi Zero?

PR #657 для добавления ARMv6 был закрыт...

Пришел сюда из-за проекта .NET Core, который нам нужно запустить на RPi Zeros в школе, поскольку для этого проекта у нас приобретено около 25x RPi Zeros. У нас нет и мы не собираемся покупать 25 новых RPi 3, потому что .NET Core не поддерживает ARMv6.

Думаю, я перепишу проект на Голанге...

@ eduncan911 Попробуйте пойти моно-маршрутом. Вот некоторые детали.

Net6 должен поддерживать несколько архитектур ЦП через моно-среду выполнения. может быть.

Я использую более тысячи процессорных устройств ARMv6 через моно. 3 года назад мы представили аппаратное обеспечение ARMv7, все еще на моно, но сейчас мы проводим рефакторинг и переходим на стандарт Net core/net, поэтому будут отличаться только небольшие исполняемые файлы, а библиотеки повторно используются между моно и сетевым ядром.

То же самое. Я управляю табло на крикетной площадке Лорда с пи 1
и Pi B+ с использованием Mono. Новый комплект работает на Pi 3 с использованием Net Core. Такой же
исходные файлы с основным объектом, который выполняет работу. В рамках
и основные приложения, он просто создает объект службы и загружает приложение
конфиг в него.

Брайан Кротаз
Серебряная кривая

К сожалению, в моно полно ошибок. Ошибки, которые, вероятно, никто никогда не исправит. Большинство из них связаны с сетью. Например, в некоторых сетях, когда DNS доступен, но с обычным трафиком возникают проблемы - потоки https/ssl имеют утечку памяти, которая может съесть всю память. Или моно не мог общаться в какой-то сети, не играя с размером MTU. Но у python или NET Core нет проблем с общением.

Удивительно, но иногда моно работает быстрее, чем чистое ядро, по крайней мере, на ARMv7. Не всегда, но я ожидал, что чистое ядро ​​выиграет гонку производительности с огромным отрывом.

Мне трудно поверить, что в Mono полно ошибок, но это может зависеть от приложения. Blazor WASM реализован в Mono, и если бы были проблемы, связанные с сетью, это было бы серьезной проблемой.

Mono: от Xamarin до WebAssembly, Blazor и .NET 5

cc @ марек-сафар

Я запускаю моно на нескольких тысячах машин и во многих сетевых конфигурациях. Эти ошибки возникают не на каждой машине и при каждой конфигурации сети. У них одинаковый образ линукса.

Проблема размера MTU — 0,3% установок — в этой сети воспроизводима на 100%. Я совершенно не понимаю, почему. Но в этих сетях работает ssh и то, что мне приходится менять размер mtu, обнаружилось случайно.

Утечка памяти SSL Stream — 2% установок. Это было очень сложно воспроизвести, в итоге удалось воспроизвести с 4G роутером с потребляемыми данными, поэтому работает только dns, остальные запросы не работают. Но мы не могли смоделировать это с помощью симулятора ошибок tcp в обычной локальной сети. Мы используем маршрутизатор 4G и специальную SIM-карту, чтобы имитировать эту утечку. Обычно происходит при установке с 4G или другими беспроводными сетями. Кажется, что если в случае установления TCP- и HTTPS-соединения TCP-подключение не завершается, это создает утечку.

Время от времени мы сталкиваемся с ошибкой, иногда ее исправляют в короткие сроки, иногда мы обходим ее, и однажды я исправил ее в моно, и запрос на включение был принят (также связанный с сетью) :) Но, честно говоря, на этой неделе я нашел (и сообщил) ошибку в NET5 RC1. Моно для меня отличная программа (работаю с ней 9 лет), но есть глюки в сетевом коде.

Справедливо, но охарактеризовать Mono как полный ошибок немного несправедливо. Комбинация маршрутизатора 4G и SIM-карты, безусловно, кажется крайним случаем, я бы посоветовал вам создать проблему в репозитории Mono и предоставить как можно больше информации. Даже если она не будет решена, по крайней мере, другие люди с такой же проблемой могут обнаружить ошибку. Спасибо за ваш предыдущий вклад в репозитории Mono/NET5.

Ладно, извини, это несправедливо.

Но мы только что потеряли несколько сотен человеко-часов, выясняя, почему на некоторых установках возникают такие проблемы. Mono особенно удобен для недолговечных приложений, таких как мобильные. У нас есть несколько установок, время безотказной работы которых превышает год, но иногда это проблематично.

@michaldobrodenka, между прочим, ваш отзыв очень интересен!

Будет ли поддержка ARMv6 включена в .NET 6.0?

Ричард Ландер упомянул об этом в комментариях к анонсу .NET 5 Preview 4.
https://devblogs.microsoft.com/dotnet/announcing-net-5-preview-4-and-our-journey-to-one-net/#comment-5958

Я думаю, что мы будем использовать Mono для Armv6 как часть .NET 5.0. Мы почти все проекты, связанные с Mono/Xamarin, до версии 6.0. Я надеюсь, что мы сможем профинансировать сборку Mono Armv6 в версии 6.0.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

jzabroski picture jzabroski  ·  3Комментарии

iCodeWebApps picture iCodeWebApps  ·  3Комментарии

matty-hall picture matty-hall  ·  3Комментарии

btecu picture btecu  ·  3Комментарии

bencz picture bencz  ·  3Комментарии