¿Qué se necesita para compilar Linux en Arduino, si es posible?

¿Es posible ejecutar Linux en Arduino? En caso afirmativo, ¿qué pasos y limitaciones deben tenerse en cuenta? Si no es así, ¿cuáles son las limitaciones que lo impiden?

Comentarios

Respuesta

Linux es un sistema operativo muy complejo, pero puede caber en un Arduino. Cosas a considerar:

  • No hay un puerto AVR actual del código fuente.
  • No tendría gráficos, en su lugar acceda al terminal a través de UART.
  • El controlador del sistema de archivos tendría que ser reescrito para acceder al flash interno o una tarjeta SD externa.
  • ¡Sería extremadamente lento! El ATmega328 funcionaría a 16 MHz, o aproximadamente 20 MHz como máximo (overclockeado). La mayoría de las máquinas Linux funcionan a un mínimo de 400 MHz y más con gráficos.
  • Probablemente necesite algo de RAM adicional, probablemente una buena idea usar un ATmega2650 (el del Mega), que tiene 16 veces la RAM del Uno. También puede utilizar un Due (6 veces más rápido que el Uno, más RAM).
  • Es posible que deba escribir controladores USB especiales para OTG (en el Due) o MAX3421EE (Mega ADK, protector de host USB) .

En resumen, tomaría mucho de tiempo y esfuerzo, y probablemente sería demasiado lento para el uso diario. Si realmente quieres Arduino Linux, echa un vistazo a Yún.

Comentarios

  • No lo harías » probablemente » necesite ram extra, usted necesita ram extra. Linux requiere 1 MB + RAM. Además, la falta de una MMU significaría que ‘ tendrías que averiguar cómo emular una (o ejecutar ucLinux). Siendo realistas, en el mejor de los casos, ‘ terminarás emulando un procesador más capaz en el atmega, que sería un orden de magnitud más lento que el código nativo. Incluso el arduino debido no ‘ no tiene cerca de la RAM requerida.
  • Además, el ATmega328P tiene 2 KB de SRAM y el ATmega2560P solo tiene 8 KB. Eso es solo 4 veces la memoria RAM, no 16 veces.

Respuesta

Simplemente no tiene suficiente RAM. También necesitaría enseñarle a arrancar desde la memoria flash, lo que implicaría reescribir el gestor de arranque.

En su lugar, puede utilizar un Arduino Yun o un PCDuino ; si bien no son Arduinos «estándar», estos son compatibles con los protectores de Arduino y ejecutan Linux.

O siempre existe la Raspberry Pi .

Comentarios

  • ¿Por qué dices que Yun no es » estándar » ¿Arduino? Estoy de acuerdo en que puede que no sea el más común, pero de hecho es un Arduino.
  • @jfpoilpret La mayoría de los Arduino son placas atmega que ejecutan C ++ compilado a través de avr-gcc y tienen un chip de manejo USB. vienen en varias formas / tamaños / poderes, pero ‘ son esencialmente lo mismo (aparte de Mega). Parecía bastante obvio que el OP estaba hablando de estos y no del Yun / etc, de ahí la distinción.
  • Hay ‘ s también el Arduino Tre , al menos ‘ espero que ‘ sea pronto 😉

Respuesta

La respuesta corta es no.

Básico Y, necesitaría MUCHO más RAM que incluso el ATmega más grande que tiene de forma nativa.

Teóricamente es posible agregar hardware externo y programar el ATmega para emular una CPU más potente, y ejecutar Linux en eso. Sin embargo, en un arduino simple, no es posible.

Sería mucho más realista ejecutar Linux en un Arduino Due, que es básicamente una CPU AT91SAM3X8E. Sin embargo, todavía necesitaría agregar algo de almacenamiento y SRAM adicional.

Hay cosas como Arduino Yun, pero eso es realmente un módulo Linux completamente separado en la misma PCB que un ATmega32U4, así que no «No sé si realmente puedes contarlo como un arduino.


Posiblemente relevante: ¿Qué se necesita para ejecutar Linux embebido?

Respuesta

Hay una placa llamada pcDuino que puede ejecutar múltiples variantes de Linux como Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (solo por mencionar algunas). Esta placa no es un Arduino nativo, sino Arduino AtHeart , y está hecha por LinkSprite .
pcDuino

Arduino tiene un par de placas que admiten la ejecución de una variante de Linux llamado Linino :

  • El Arduino Yún es una placa de microcontrolador basada en ATmega32u4 y Atheros AR9331.El procesador Atheros admite una distribución de Linux basada en OpenWrt llamada Linino OS. La placa tiene soporte integrado para Ethernet y WiFi, un puerto USB-A, ranura para tarjeta micro-SD, 20 pines de entrada / salida digital (7 de ellos se pueden usar como salidas PWM y 12 como entradas analógicas), un cristal de 16 MHz oscilador, una conexión micro USB, un encabezado ICSP y 3 botones de reinicio.
  • La nueva placa Arduino Tian funciona con la MCU SAMD21 de Atmel, con un núcleo ARM Cortex® M0 + de 32 bits y un Qualcomm Atheros AR9342 , que es un procesador MIPS altamente integrado que funciona hasta 533MHz y un módulo WiFi de doble banda IEEE802.11n 2×2 2.4 / 5 GHz con muchas funciones. Qualcomm Atheros MIPS admite una distribución de Linux, basada en OpenWRT llamada Linino. El Arduino Tian también tiene una memoria eMMC de 4GB que puede ser útil para construir sus proyectos. Es posible encender / apagar el puerto Linux desde la MCU para reducir el consumo de energía.
  • Arduino Industrial 101 es una placa de evaluación para módulo Arduino 101 LGA. El microcontrolador ATmega32u4 está integrado en la placa base. El módulo admite una distribución de Linux basada en OpenWRT llamada LininoOS. La placa tiene WiFi incorporado (operaciones IEEE 802.11b / g / n hasta 150Mbps 1×1 2.4 GHz), 3 GPIO (de los cuales 2 se pueden usar como salidas PWM), 4 entradas analógicas, 1 USB, 1 señal Ethernet en el pin encabezados y un convertidor CC / CC incorporado. Consulte la guía de montaje y simplemente conecte su placa a una computadora con un cable micro USB para comenzar.

Respuesta

Esto tiene varios años, pero tal vez sea más pertinente a medida que los Arduinos obtienen más RAM y ATMega de 32 bits AVR, etc. Hay un problema obvio que no se encuentra en la respuesta más popular aquí. El Arduino usa un AVR MICROCONTROLLER , no un MICROPROCESADOR. Ésta es una de las principales razones por las que no hay un puerto de Linux. Los microcontroladores están diseñados para realizar una tarea específica, aplicaciones donde la relación de entrada y salida está bien definida. Los microprocesadores están diseñados para una variedad de aplicaciones en los sistemas operativos. Recuerde, desde el principio, Linux necesitaba una unidad de administración de memoria y no podía ejecutarse en 8088 o 286 PC. Luego estaba μClinux, que originalmente tenía como objetivo la familia Motorola DragonBall de procesadores incorporados 68k, para Palm Pilots . Nunca fue particularmente exitoso. Es posible que tenga más éxito al portar FreeDOS o incluso Minix que Linux, tal vez algo en ensamblador, pero co Instalar un sistema operativo en un microcontrolador es muy poco práctico. Quizás sea un problema académico desafiante, pero específicamente contrario al propósito de usar un microcontrolador en lugar de un microprocesador.

Respuesta

Es posible, sin embargo, sería una molestia porque tendrías que escribirlo en C. (sin mencionar el hardware adicional necesario como un protector de tarjeta SD y chip (s) de memoria adicionales) Algo como Ontas, un kernel que escribí en C para el arduino, ayudaría ya que tiene soporte para agregar controladores, a expensas de hacer que la función de bucle vacío se repita más lentamente (esto no es tan importante como podría pensar) (Ontas aún está en desarrollo y se agregan nuevas funciones todo el tiempo)

Haga clic aquí para ver el enlace a los archivos .ino y .h adjuntos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *