Cosa serve per compilare Linux su Arduino, se possibile?


Risposte:


19

Linux è un sistema operativo molto complesso, ma potrebbe essere in grado di adattarsi a un Arduino. Cose da considerare:

  • Non esiste una porta AVR corrente del codice sorgente.
  • Non avresti grafica, invece accedi al terminale tramite UART.
  • Il driver del filesystem dovrebbe essere riscritto per accedere al flash interno o ad una scheda SD esterna.
  • Sarebbe estremamente lento! L'ATmega328 funzionerebbe a 16 MHz, o circa 20 MHz max (overcloccato). La maggior parte delle macchine Linux funziona a un minimo di 400 MHz e più con grafica.
  • Probabilmente avresti bisogno di qualche RAM aggiuntiva, probabilmente una buona idea usare un ATmega2650 (quello nella Mega), che ha 16 volte la RAM di Uno. Puoi anche usare un Due (6 volte più veloce di Uno, più RAM).
  • Potrebbe essere necessario scrivere driver USB speciali per OTG (sul Due) o MAX3421EE (Mega ADK, schermo host USB).

In breve, ci vorrebbe molto tempo e fatica, e probabilmente sarebbe troppo lento per l'uso quotidiano. Se vuoi davvero Arduino Linux, dai un'occhiata a Yún.


2
Si potrebbe non "probabilmente" necessità di RAM in più, si fa bisogno di ram in più. Linux richiede 1 MB + RAM. Inoltre, la mancanza di un MMU significherebbe che dovresti capire come emularne uno (o eseguire ucLinux). Realisticamente, nella migliore delle ipotesi, finiresti per emulare un processore più capace nell'atmega, che sarebbe un ordine di grandezza più lento del codice nativo. Anche l'arduino dovuto non ha alcuno vicino all'ariete richiesto.
Connor Wolf,

Inoltre, ATmega328P ha SRAM da 2 KB e ATmega2560P ha solo 8 KB. Questo è solo 4 volte il pistone, non 16 volte.
Connor Wolf,

16

Semplicemente non ha abbastanza RAM. Dovresti anche insegnargli ad avviarsi dalla memoria flash, il che comporterebbe la riscrittura del bootloader.

Puoi invece usare un Arduino Yun o un PCDuino ; pur non essendo Arduinos "standard", supportano gli scudi Arduino ed eseguono Linux.

Oppure c'è sempre il Raspberry Pi .


Perché dici che Yun non è "standard" Arduino? Sono d'accordo che potrebbe non essere il più comune, ma è davvero un Arduino.
jfpoilpret,

@jfpoilpret La maggior parte degli Arduinos sono schede atmega che eseguono C ++ compilato tramite avr-gcc e hanno un chip di gestione USB. Vengono in varie forme / dimensioni / poteri, ma sono essenzialmente gli stessi (a parte Mega). Sembrava abbastanza ovvio che l'OP stava parlando di questi e non dello Yun / ecc., Quindi la distinzione.
Manishearth,

C'è anche il prossimo Arduino Tre , che almeno spero sia presto ;-)
Chris O

6

La risposta breve è no.

Fondamentalmente, avresti bisogno di MOLTE più ram di quanto anche il più grande ATmega abbia nativamente.

Si è teoricamente possibile aggiungere hardware esterno, e programmare l'ATmega per emulare una CPU più potente, ed eseguire Linux su questo. Tuttavia, su un semplice arduino, non è possibile.

Sarebbe molto più realistico eseguire Linux su un Arduino Due, che è fondamentalmente una CPU AT91SAM3X8E. Tuttavia, dovrai comunque aggiungere SRAM e spazio di archiviazione aggiuntivi.

Ci sono cose come Arduino Yun, ma questo è davvero un modulo linux completamente separato sullo stesso PCB di un ATmega32U4, quindi non so se puoi davvero contarlo come un arduino.


Forse pertinente: cosa serve per eseguire Linux incorporato?


1

C'è una scheda chiamata pcDuino che può eseguire più varianti di Linux come Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (solo per citarne alcune). Questa scheda non è un nativo Arduino, ma piuttosto Arduino AtHeart ed è realizzato da LinkSprite .
pcDuino

Arduino ha un paio di schede che supportano l'esecuzione di una variante di Linux chiamata Linino :

  • L'Arduino Yun è una scheda basata sul microcontrollore ATMEGA32U4 e Atheros AR9331. Il processore Atheros supporta una distribuzione Linux basata su OpenWrt chiamato Linino OS. La scheda dispone di supporto Ethernet e WiFi integrato, una porta USB-A, slot per schede micro-SD, 20 pin di ingresso / uscita digitali (7 di questi possono essere utilizzati come uscite PWM e 12 come ingressi analogici), un cristallo da 16 MHz oscillatore, una connessione micro USB, un'intestazione ICSP e 3 pulsanti di ripristino.
  • La nuova scheda Arduino Tian è alimentata dalla MCU SAMD21 di Atmel, con un core ARM Cortex® M0 + a 32 bit e un Qualcomm Atheros AR9342, che è un processore MIPS altamente integrato che funziona fino a 533 MHz e ricco di funzionalità IEEE802.11n 2x2 2.4 / Modulo WiFi dual band 5 GHz. Qualcomm Atheros MIPS supporta una distribuzione Linux, basata su OpenWRT di nome Linino. Arduino Tian ha anche una memoria eMMC da 4 GB che può essere utile per realizzare i tuoi progetti. È possibile ACCENDERE / SPEGNERE la porta Linux dall'MCU per ridurre il consumo energetico.
  • Arduino Industrial 101 è una scheda di valutazione per il modulo LGA Arduino 101. Il microcontrollore ATmega32u4 è integrato nel battiscopa. Il modulo supporta una distribuzione Linux basata su OpenWRT di nome LininoOS. La scheda dispone di WiFi integrato (operazioni IEEE 802.11b / g / n fino a 150 Mbps 1x1 2,4 GHz), 3 GPIO (di cui 2 utilizzabili come uscite PWM), 4 ingressi analogici, 1 USB, 1 segnale Ethernet su pin intestazioni e un convertitore DC / DC incorporato. Consulta la guida al montaggio e collega la scheda a un computer con un cavo micro USB per iniziare.

-1

Questo ha diversi anni, ma forse è più pertinente in quanto gli Arduinos ottengono più RAM e AVR ATMega a 32 bit, ecc. C'è un problema ovvio, in particolare non nella risposta più popolare qui. Arduino utilizza un MICROCONTROLLER AVR, non un MICROPROCESSORE. Questo è uno dei motivi principali per cui non esiste una porta di Linux. I microcontrollori sono progettati per eseguire un'attività specifica, applicazioni in cui la relazione tra input e output è ben definita. I microprocessori sono progettati per eseguire una varietà di app sui sistemi operativi. Ricorda, fin dall'inizio, Linux aveva bisogno di un'unità di gestione della memoria e non poteva funzionare su PC 8088 o 286. Poi c'è stato μClinux, che inizialmente aveva come target la famiglia di processori embedded 68k Motorola DragonBall, per Palm Pilots. Non ha mai avuto particolarmente successo. Potresti avere più successo nel portare FreeDOS o anche Minix rispetto a Linux, forse qualcosa in assemblatore, ma compilare un sistema operativo su un microcontrollore è molto impraticabile. Forse è un problema accademico impegnativo,


-2

È possibile, tuttavia sarebbe un dolore perché dovresti scriverlo in C. (per non parlare dell'hardware aggiuntivo necessario come uno scudo per schede SD e chip di memoria extra) Qualcosa come Ontas, un kernel in cui ho scritto C per Arduino, sarebbe di aiuto in quanto ha il supporto per aggiungere driver, a scapito di rendere più lenta la ripetizione della funzione loop vuoto. (Questo non è un grosso problema come potresti pensare) (Ontas è ancora in fase di sviluppo e nuove funzionalità vengono aggiunte continuamente)

Fare clic qui per il collegamento al file .ino e ai relativi file .h

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.