Fråga:
Vad krävs för att kompilera Linux på Arduino, om det är möjligt?
Jakub Arnold
2014-02-12 05:44:47 UTC
view on stackexchange narkive permalink

Är det möjligt att köra Linux på Arduino? Om ja, vilka steg och begränsningar måste övervägas? Om inte, vilka begränsningar hindrar detta?

http://hackaday.com/2012/03/28/building-the-worst-linux-pc-ever/
Använd en RPi istället.
Sex svar:
#1
+19
TheDoctor
2014-02-12 06:11:58 UTC
view on stackexchange narkive permalink

Linux är ett mycket komplext operativsystem, men det kan kanske passa på en Arduino. Saker att tänka på:

  • Det finns ingen aktuell AVR-port för källkoden.
  • Du skulle inte ha någon grafik, istället komma åt terminalen via UART.
  • Filsystemdrivrutinen måste skrivas om för att komma åt intern flash eller ett externt SD-kort.
  • Det skulle vara extremt långsamt! ATmega328 skulle köras vid 16 MHz, eller cirka 20 MHz max (överklockad). De flesta Linux-maskiner körs med minst 400 MHz och mer med grafik.
  • Du skulle antagligen behöva lite extra RAM, förmodligen en bra idé att använda en ATmega2650 (den i Mega), som har 16 gånger RAM för Uno. Du kan också använda en Due (6 gånger så snabbt som Uno, mer RAM).
  • Du kan behöva skriva speciella USB-drivrutiner för OTG (på grund) eller MAX3421EE (Mega ADK, USB-värdsköld) .

Kort sagt, det skulle ta mycket tid och ansträngning och förmodligen skulle det vara för långsamt för daglig användning. Om du verkligen vill ha Arduino Linux, kolla in Yún.

Du skulle "troligen" inte behöva extra ram, du ** behöver ** extra ram. Linux kräver 1 MB + ram. Bristen på en MMU skulle också innebära att du måste ta reda på hur du kan emulera en (eller köra ucLinux). Realistiskt, i bästa fall skulle du sluta emulera en mer kapabel processor i atmega, vilket skulle vara en storleksordning långsammare än inbyggd kod. Även arduino förfaller har inte någonstans nära den nödvändiga ram.
ATmega328P har också 2 KB SRAM och ATmega2560P har bara 8 KB. Det är bara 4X ram, inte 16x.
#2
+16
Manishearth
2014-02-12 06:13:00 UTC
view on stackexchange narkive permalink

Det har bara inte tillräckligt med RAM. Du måste också lära dig att starta från flashminnet, vilket skulle innebära att du skriver om bootloader.

Du kan istället använda en Arduino Yun eller en PCDuino; även om de inte är "vanliga" Arduinos stöder dessa Arduino-sköldar och kör Linux.

Eller så finns det alltid Raspberry Pi.

Varför säger du att Yun inte är "standard" Arduino? Jag håller med om att det kanske inte är det vanligaste, men det är verkligen en Arduino.
@jfpoilpret De flesta Arduinos är atmega-kort som kör kompilerad C ++ via avr-gcc och har ett USB-hanteringschip. De finns i olika former / storlekar / krafter, men de är i princip samma (Mega åt sidan). Det verkade ganska uppenbart att OP talade om dessa och inte Yun / etc, därav skillnaden.
Det finns också den snart kommer att släppas [Arduino Tre] (http://arduino.cc/en/Main/ArduinoBoardTre), åtminstone hoppas jag att det snart är ;-)
#3
+6
Connor Wolf
2014-02-12 12:24:58 UTC
view on stackexchange narkive permalink

Det korta svaret är nej.

I grund och botten skulle du behöva MYCKET mer ram än till och med den största ATmega som finns.

Det är teoretiskt möjligt för att lägga till extern hårdvara och programmera ATmega för att emulera en mer kraftfull CPU och köra Linux på det. Men på en vanlig arduino är det inte möjligt.

Det skulle vara mycket mer realistiskt att köra Linux på en Arduino Due, som i grunden är en AT91SAM3X8E-processor. Du måste dock fortfarande lägga till ytterligare SRAM och lagring.

Det finns saker som Arduino Yun, men det är verkligen en helt separat linuxmodul på samma PCB som en ATmega32U4, så jag vet inte om du verkligen kan räkna det som en arduino.


Eventuellt relevant: Vad krävs för att köra inbäddad Linux?

#4
+1
sa_leinad
2017-06-02 09:48:17 UTC
view on stackexchange narkive permalink

Det finns ett kort som heter pcDuino som kan köra flera varianter av Linux som Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (för att bara nämna några). Denna tavla är inte en infödd Arduino, snarare Arduino AtHeart, och är gjord av LinkSprite.
pcDuino

Arduino har ett par styrelser som stöder körning av en variant av Linux som heter Linino:

  • Arduino Yún är ett mikrokontrollkort baserat på ATmega32u4 och Atheros AR9331. Atheros-processorn stöder en Linux-distribution baserad på OpenWrt med namnet Linino OS. Kortet har inbyggt Ethernet- och WiFi-stöd, en USB-A-port, micro-SD-kortplats, 20 digitala ingångs- / utgångsstift (7 av dem kan användas som PWM-utgångar och 12 som analoga ingångar), en 16 MHz kristall oscillator, en mikro-USB-anslutning, ett ICSP-huvud och 3 återställningsknappar.
  • Det nya Arduino Tian -kortet drivs av Atmels SAMD21 MCU, med en 32-bitars ARM Cortex® M0 + -kärna och en Qualcomm Atheros AR9342, som är en mycket integrerad MIPS-processor som fungerar vid upp till 533 MHz och funktionsrika IEEE802.11n 2x2 2,4 / 5 GHz dual-band WiFi-modul. Qualcomm Atheros MIPS stöder en Linux-distribution, baserad på OpenWRT med namnet Linino. Arduino Tian har också ett inbyggt 4 GB eMMC-minne som kan vara till hjälp för att bygga dina projekt. Det är möjligt att slå PÅ / AV Linux-porten från MCU för att minska strömförbrukningen.
  • Arduino Industrial 101 är en utvärderingskort för Arduino 101 LGA-modul. ATmega32u4-mikrokontrollern är integrerad i basbordet. Modulen stöder en Linux-distribution baserad på OpenWRT med namnet LininoOS. Kortet har inbyggt WiFi (IEEE 802.11b / g / n-operationer upp till 150 Mbps 1x1 2,4 GHz), 3 GPIO (varav 2 kan användas som PWM-utgångar), 4 analoga ingångar, 1 USB, 1 Ethernet-signal på stift headers och en inbyggd DC / DC-omvandlare. Kolla in monteringsguiden och anslut bara ditt kort till en dator med en mikro-USB-kabel för att komma igång.
#5
-1
Cuvtixo
2018-06-01 03:38:37 UTC
view on stackexchange narkive permalink

Det här är flera år gammalt, men kanske mer relevant eftersom Arduinos får mer RAM och 32-bitars ATMega AVR, etc. Det finns ett uppenbart problem, särskilt inte i det mest populära svaret här. Arduino använder en AVR MICROCONTROLLER , inte en MICROPROCESSOR. Detta är en viktig anledning till att det inte finns någon port för Linux. Mikrokontroller är utformade för att utföra en specifik uppgift, applikationer där förhållandet mellan in- och utdata är väl definierat. Mikroprocessorer är utformade för att köra en mängd olika appar på operativsystem. Kom ihåg att Linux från början behövde en minneshanteringsenhet och kunde inte köras på 8088 eller 286 datorer. Sedan fanns det μClinux, som ursprungligen riktade sig till Motorola DragonBall-familjen av inbäddade 68 000 processorer, för Palm Pilots. Det var aldrig särskilt framgångsrikt. Du kanske har mer framgång med att porta FreeDOS eller till och med Minix än Linux, kanske något i assembler, men att kompilera ett operativsystem på en mikrokontroller är väldigt opraktiskt. Kanske är det ett utmanande akademiskt problem, men motsätter sig specifikt syftet med att använda en mikrokontroller istället för en mikroprocessor.

#6
-2
Luke Tindale
2017-06-02 08:11:07 UTC
view on stackexchange narkive permalink

Det är möjligt, men det skulle vara ont eftersom du skulle behöva skriva det i C. (för att inte tala om den extra hårdvaran som behövs som ett SD-kortskydd och extra minneskrets) Något som Ontas, en kärna Jag skrev i C för arduino, skulle hjälpa eftersom det har stöd för att lägga till drivrutiner, på bekostnad av att hålrumsfunktionen upprepas långsammare. (Det här är inte så stort av en affär som du kanske tror det är) (Ontas är fortfarande under utveckling och nya funktioner läggs till hela tiden)

Klicka här för länken till .ino och tillhörande .h-filer



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...