¿Qué se necesita para compilar Linux en Arduino, si es posible?
25
¿Es posible ejecutar Linux en Arduino? En caso afirmativo, ¿qué pasos y limitaciones deben considerarse? Si no, ¿cuáles son las limitaciones que evitan esto?
Linux es un sistema operativo muy complejo, pero puede encajar en un Arduino. Cosas para 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 reescribirse para acceder a la memoria flash interna o una tarjeta SD externa.
¡Sería extremadamente lento! El ATmega328 funcionaría a 16 MHz, o aproximadamente 20 MHz 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 RAM adicional, probablemente una buena idea para usar un ATmega2650 (el del Mega), que tiene 16 veces la RAM del Uno. También podría usar 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 la fecha de vencimiento) o MAX3421EE (Mega ADK, escudo de host USB).
En resumen, tomaría mucho tiempo y esfuerzo, y probablemente sería demasiado lento para el uso diario. Si realmente quieres Arduino Linux, mira el Yún.
No "probablemente" necesitará ram adicional, sí necesita ram adicional. Linux requiere 1 MB + ram. Además, la falta de una MMU significaría que tendría que descubrir cómo emular una (o ejecutar ucLinux). Siendo realistas, en el mejor de los casos, terminaría 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 tiene cerca del carnero requerido.
Connor Wolf
Además, el ATmega328P tiene 2 KB de SRAM y el ATmega2560P solo tiene 8 KB. Eso es solo 4X el carnero, no 16x.
Connor Wolf
16
Simplemente no tiene suficiente RAM. También necesitaría enseñarle a arrancar desde la memoria flash, lo que implicaría reescribir el cargador de arranque.
En su lugar, puede usar un Arduino Yun o un PCDuino ; Si bien no son Arduinos "estándar", estos admiten escudos Arduino y ejecutan Linux.
¿Por qué dices que Yun no es Arduino "estándar"? Estoy de acuerdo en que puede no ser el más común, pero sí es un Arduino.
jfpoilpret
@jfpoilpret La mayoría de los Arduinos 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 los mismos (Mega aparte). Parecía bastante obvio que el OP estaba hablando de estos y no del Yun / etc, de ahí la distinción.
Manishearth
También está el Arduino Tre que se lanzará pronto , al menos espero que sea pronto ;-)
Chris O
6
La respuesta corta es no.
Básicamente, necesitarías MUCHO más carnero que incluso el ATmega más grande 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, aún necesitaría agregar algo de SRAM y almacenamiento adicionales.
Hay cosas como el Arduino Yun, pero ese es realmente un módulo Linux completamente separado en la misma PCB que un ATmega32U4, por lo que no sé si realmente puede contarlo como un arduino.
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 .
Arduino tiene un par de placas que admiten ejecutar una variante de Linux llamada Linino :
El Arduino Yún es una placa de microcontrolador basada en el ATmega32u4 y el Atheros AR9331. El procesador Atheros admite una distribución de Linux basada en OpenWrt llamada Linino OS. La placa tiene soporte incorporado para Ethernet y WiFi, un puerto USB-A, ranura para tarjeta micro-SD, 20 pines de entrada / salida digital (7 de ellos pueden usarse 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 está alimentada por la MCU SAMD21 de Atmel, que presenta un núcleo ARM Cortex® M0 + de 32 bits y un Qualcomm Atheros AR9342, que es un procesador MIPS altamente integrado que funciona a hasta 533MHz e IEEE802.11n 2x2 2.4 / rico en funciones Módulo WiFi de doble banda de 5 GHz. Qualcomm Atheros MIPS admite una distribución de Linux, basada en OpenWRT llamada Linino. El Arduino Tian también tiene una construcción en 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 el 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 (IEEE 802.11b / g / n operaciones hasta 150Mbps 1x1 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 pin encabezados y un convertidor DC / DC incorporado. Consulte la guía de ensamblaje y simplemente conecte su placa a una computadora con un cable micro USB para comenzar.
Esto tiene varios años, pero quizás sea más pertinente ya que los Arduinos obtienen más RAM y AVR ATMega de 32 bits, etc. Hay un problema obvio que no se encuentra en la respuesta más popular aquí. El Arduino usa un MICROCONTROLADOR AVR, no un MICROPROCESADOR. Esta es una razón importante por la que no hay 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 ejecutar una variedad de aplicaciones en sistemas operativos. Recuerde, desde el principio, Linux necesitaba una unidad de administración de memoria y no podía ejecutarse en PC 8088 o 286. Luego estaba μClinux, que originalmente se dirigió a la familia Motorola DragonBall de procesadores 68k integrados, 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 compilar un sistema operativo en un microcontrolador es muy poco práctico. Quizás es un problema académico desafiante,
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 extra) Algo como Ontas, un núcleo 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 que es) (Ontas todavía está en desarrollo y se agregan nuevas características todo el tiempo)
Respuestas:
Linux es un sistema operativo muy complejo, pero puede encajar en un Arduino. Cosas para considerar:
En resumen, tomaría mucho tiempo y esfuerzo, y probablemente sería demasiado lento para el uso diario. Si realmente quieres Arduino Linux, mira el Yún.
fuente
Simplemente no tiene suficiente RAM. También necesitaría enseñarle a arrancar desde la memoria flash, lo que implicaría reescribir el cargador de arranque.
En su lugar, puede usar un Arduino Yun o un PCDuino ; Si bien no son Arduinos "estándar", estos admiten escudos Arduino y ejecutan Linux.
O siempre está la Raspberry Pi .
fuente
La respuesta corta es no.
Básicamente, necesitarías MUCHO más carnero que incluso el ATmega más grande 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, aún necesitaría agregar algo de SRAM y almacenamiento adicionales.
Hay cosas como el Arduino Yun, pero ese es realmente un módulo Linux completamente separado en la misma PCB que un ATmega32U4, por lo que no sé si realmente puede contarlo como un arduino.
Posiblemente relevante: ¿Qué se necesita para ejecutar Linux incrustado?
fuente
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 .
Arduino tiene un par de placas que admiten ejecutar una variante de Linux llamada Linino :
fuente
Esto tiene varios años, pero quizás sea más pertinente ya que los Arduinos obtienen más RAM y AVR ATMega de 32 bits, etc. Hay un problema obvio que no se encuentra en la respuesta más popular aquí. El Arduino usa un MICROCONTROLADOR AVR, no un MICROPROCESADOR. Esta es una razón importante por la que no hay 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 ejecutar una variedad de aplicaciones en sistemas operativos. Recuerde, desde el principio, Linux necesitaba una unidad de administración de memoria y no podía ejecutarse en PC 8088 o 286. Luego estaba μClinux, que originalmente se dirigió a la familia Motorola DragonBall de procesadores 68k integrados, 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 compilar un sistema operativo en un microcontrolador es muy poco práctico. Quizás es un problema académico desafiante,
fuente
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 extra) Algo como Ontas, un núcleo 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 que es) (Ontas todavía está en desarrollo y se agregan nuevas características todo el tiempo)
Haga clic aquí para ver el enlace a .ino y los archivos .h que lo acompañan
fuente