Что нужно для компиляции Linux на Arduino, если это вообще возможно?

25

Можно ли запустить Linux на Arduino? Если да, какие шаги и ограничения необходимо учитывать? Если нет, какие ограничения мешают этому?

Якуб Арнольд
источник
3
Вместо этого используйте RPi.
Анонимный Пингвин

Ответы:

19

Linux - очень сложная операционная система, но она может уместиться на Arduino. Что нужно учитывать:

  • Там нет текущего порта AVR исходного кода.
  • У вас не будет графики, вместо этого получите доступ к терминалу через UART.
  • Драйвер файловой системы должен быть переписан для доступа к внутренней флэш-памяти или внешней SD-карте.
  • Это было бы очень медленно! ATmega328 будет работать на частоте 16 МГц, или около 20 МГц (разогнан). Большинство компьютеров с Linux работают на частоте не менее 400 МГц, и больше с графикой.
  • Вам, вероятно, понадобится дополнительная оперативная память, вероятно, хорошая идея использовать ATmega2650 (тот, что в Mega), который в 16 раз больше оперативной памяти Uno. Вы также можете использовать Due (в 6 раз быстрее Uno, больше оперативной памяти).
  • Возможно, вам придется написать специальные USB-драйверы для OTG (на срок) или MAX3421EE (Mega ADK, хост-щит USB).

Короче говоря, это займет много времени и усилий и, вероятно, будет слишком медленным для повседневного использования. Если вы действительно хотите Arduino Linux, проверьте Yún.

Доктор
источник
2
Вы бы не «наверное» необходимость дополнительной оперативной памяти, вы действительно нуждаетесь в дополнительной оперативной памяти. Linux требует 1 МБ + оперативной памяти. Кроме того, отсутствие MMU будет означать, что вам придется выяснить, как его эмулировать (или запустить ucLinux). Реально, в лучшем случае, вы захотите эмулировать более мощный процессор в Atmega, который будет на порядок медленнее, чем собственный код. Даже у Arduino должного нет нигде рядом с требуемым бараном.
Коннор Вольф
Кроме того, ATmega328P имеет 2 КБ SRAM, а ATmega2560P - только 8 КБ. Это только в 4 раза больше, чем в 16 раз.
Коннор Вольф
16

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

Вместо этого вы можете использовать Arduino Yun или PCDuino ; хотя они не являются «стандартными» Arduinos, они поддерживают щиты Arduino и работают под управлением Linux.

Или всегда есть Raspberry Pi .

Manishearth
источник
Почему вы говорите, что Юн не "стандартный" Arduino? Я согласен, что это может быть не самым распространенным, но это действительно Arduino.
jfpoilpret
@jfpoilpret Большинство Arduinos - это платы atmega, которые запускают скомпилированный C ++ через avr-gcc и имеют чип обработки USB. Они бывают разных форм / размеров / степеней, но по сути они одинаковы (кроме Мега). Казалось довольно очевидным, что OP говорил об этом, а не о Yun / и т.д., отсюда и различие.
Manishearth
Также есть Arduino Tre , который скоро будет выпущен , по крайней мере, я надеюсь, что это скоро ;-)
Chris O
6

Короткий ответ: нет.

По сути, вам нужно гораздо больше оперативной памяти, чем даже самая большая ATmega изначально.

Это является теоретически возможным добавлять внешние устройства, а также программировать ATMEGA эмулировать более мощный процессор, и запустить Linux на этом. Однако на равнине Arduino это невозможно.

Было бы намного реалистичнее запускать linux на Arduino Due, который в основном является процессором AT91SAM3X8E. Тем не менее, вам все равно нужно добавить дополнительную SRAM и хранилище.

Есть такие вещи, как Arduino Yun, но это действительно совершенно отдельный модуль linux на той же печатной плате, что и ATmega32U4, поэтому я не знаю, действительно ли вы можете считать его Arduino.


Возможно актуально: что нужно для запуска встроенного Linux?

Коннор Вольф
источник
1

Существует плата, называемая pcDuino, которая может работать с несколькими вариантами Linux, такими как Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (и это лишь некоторые из них). Эта плата не является родной Arduino, а Arduino AtHeart , и сделана LinkSprite .
pcDuino

У Arduino есть несколько плат, которые поддерживают запуск варианта Linux под названием Linino :

  • Arduino Юнь является микроконтроллер платы на основе ATmega32u4 и Atheros AR9331. Процессор Atheros поддерживает дистрибутив Linux на основе OpenWrt под названием Linino OS. Плата имеет встроенную поддержку Ethernet и WiFi, порт USB-A, слот для карты micro-SD, 20 цифровых входов / выходов (7 из них могут использоваться в качестве ШИМ-выходов и 12 в качестве аналоговых входов), кристалл 16 МГц осциллятор, разъем micro USB, разъем ICSP и 3 кнопки сброса.
  • Новая плата Arduino Tian оснащена микроконтроллером SAMD21 от Atmel с 32-разрядным ядром ARM Cortex® M0 + и Qualcomm Atheros AR9342, представляющим собой высокоинтегрированный процессор MIPS с тактовой частотой до 533 МГц и многофункциональным IEEE802.11n 2x2 2,4 /. Двухдиапазонный модуль WiFi 5 ГГц. Qualcomm Atheros MIPS поддерживает дистрибутив Linux, основанный на OpenWRT с именем Linino. Arduino Tian также имеет встроенную память емкостью 4 ГБ eMMC, которая может быть полезна для создания ваших проектов. Можно включить / выключить порт Linux от MCU, чтобы уменьшить энергопотребление.
  • Arduino Industrial 101 - это оценочная плата для модуля LGA Arduino 101. Микроконтроллер ATmega32u4 встроен в базовую плату. Модуль поддерживает дистрибутив Linux на основе OpenWRT с именем LininoOS. Плата имеет встроенный WiFi (IEEE 802.11b / g / n, работающий до 150 Мбит / с 1x1 2,4 ГГц), 3 GPIO (из которых 2 могут использоваться в качестве ШИМ-выходов), 4 аналоговых входа, 1 USB, 1 сигнал Ethernet на выводе Заголовки и встроенный DC / DC преобразователь. Ознакомьтесь с руководством по сборке и просто подключите вашу плату к компьютеру с помощью кабеля micro USB, чтобы начать работу.
sa_leinad
источник
-1

Этому несколько лет, но, возможно, он более уместен, так как Arduinos получает больше оперативной памяти и 32-битных видеорегистраторов ATMega и т. Д. Существует очевидная проблема, особенно не в самом популярном ответе. Arduino использует AVR MICROCONTROLLER, не МИКРОПРОЦЕССОР. Это главная причина, почему нет порта Linux. Микроконтроллеры предназначены для выполнения конкретной задачи, приложений, где взаимосвязь ввода и вывода четко определена. Микропроцессоры предназначены для запуска различных приложений в операционных системах. Помните, с самого начала Linux нуждался в блоке управления памятью и не мог работать на 8088 или 286 ПК. Затем был µClinux, который изначально предназначался для семейства встроенных процессоров 68k Motorola DragonBall для Palm Pilots. Это никогда не было особенно успешным. Возможно, вы добьетесь большего успеха при переносе FreeDOS или даже Minix, чем Linux, возможно, что-то в ассемблере, но компиляция ОС на микроконтроллере очень непрактична. Возможно, это сложная академическая проблема,

Cuvtixo
источник
-2

Это возможно, однако это было бы болезненно, потому что вам пришлось бы писать это на языке C. (не говоря уже о дополнительном оборудовании, необходимом, например, щит SD-карты и дополнительный чип (-ы) памяти) Что-то вроде Ontas, ядра, которое я написал в C для Arduino, поможет, так как имеет поддержку для добавления драйверов, за счет замедления повторения функции void loop. (Это не так важно, как вы думаете) (Ontas все еще находится в стадии разработки и все время добавляются новые функции)

Нажмите здесь для ссылки на .ino и сопровождающие .h файлы

Люк Тиндейл
источник