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

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

, 👍32

Обсуждение

http://hackaday.com/2012/03/28/building-the-worst-linux-pc-ever/, @jippie

Вместо этого используйте RPi., @Anonymous Penguin


6 ответов


22

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

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

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

,

Вам не "вероятно" понадобится дополнительная оперативная память, вам **действительно** нужна дополнительная оперативная память. Linux требует 1 МБ+ оперативной памяти. Кроме того, отсутствие MMU означало бы, что вам придется выяснить, как эмулировать его (или запустить uClinux). Реально, в лучшем случае, вы будете эмулировать более мощный процессор в atmega, который будет на порядок медленнее, чем собственный код. Даже у arduino due нет даже близко необходимой оперативной памяти., @Connor Wolf

Кроме того, ATmega328P имеет 2 КБ SRAM, а ATmega2560P-только 8 КБ. Это всего лишь 4X оперативной памяти, а не 16x., @Connor Wolf


18

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

Вместо этого вы можете использовать Arduino Yun или pcDuino; хотя они и не являются "стандартными" Arduino, они поддерживают экраны Arduino и работают под управлением Linux.

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

,

Почему вы говорите, что это не "стандартный" Arduino? Я согласен, что это может быть не самое распространенное, но это действительно Arduino., @jfpoilpret

@jfpoilpret Большинство ардуино - это платы atmega, которые запускают скомпилированный C++ через avr-gcc и имеют чип обработки USB. Они бывают разных форм/размеров/мощности, но по сути они одинаковы (мега в стороне). Казалось довольно очевидным, что ОП говорил об этом, а не о Yun/etc, отсюда и различие., @Manishearth

Есть также скоро выпущенный [Arduino Tre](http://arduino.cc/en/Main/ArduinoBoardTre), по крайней мере, я надеюсь, что это скоро ;-), @Chris O


6

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

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

Теоретически можно добавить внешнее оборудование, запрограммировать ATmega на эмуляцию более мощного процессора и запустить на нем linux. Однако на обычном arduino это невозможно.

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

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


Возможно, это имеет значение: что нужно для запуска встроенного linux?

,

-2

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

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

,

2

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

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

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

0

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

,