Was braucht es, um Linux auf Arduino zu kompilieren, wenn überhaupt möglich?

25

Ist es möglich, Linux auf Arduino auszuführen? Wenn ja, welche Schritte und Einschränkungen sind zu beachten? Wenn nicht, welche Einschränkungen verhindern dies?

Jakub Arnold
quelle
3
Verwenden Sie stattdessen ein RPi.
Anonymous Penguin

Antworten:

19

Linux ist ein sehr komplexes Betriebssystem, kann aber möglicherweise auf ein Arduino passen. Dinge, die man beachten muss:

  • Es gibt keinen aktuellen AVR-Port des Quellcodes.
  • Sie hätten keine Grafiken, greifen stattdessen über UART auf das Terminal zu.
  • Der Dateisystemtreiber muss neu geschrieben werden, um auf das interne Flash oder eine externe SD-Karte zugreifen zu können.
  • Es wäre extrem langsam! Der ATmega328 würde mit 16 MHz oder maximal etwa 20 MHz (übertaktet) laufen. Die meisten Linux-Computer arbeiten mit mindestens 400 MHz und mehr mit Grafiken.
  • Sie würden wahrscheinlich etwas zusätzlichen RAM benötigen, wahrscheinlich eine gute Idee, um einen ATmega2650 (den im Mega) zu verwenden, der 16-mal so viel RAM hat wie der Uno. Sie können auch einen Due verwenden (6x so schnell wie der Uno, mehr RAM).
  • Möglicherweise müssen Sie spezielle USB-Treiber für OTG (auf dem Due) oder MAX3421EE (Mega ADK, USB-Host-Shield) schreiben.

Kurz gesagt, es würde viel Zeit und Mühe kosten und für den täglichen Gebrauch wahrscheinlich zu langsam sein. Wenn Sie wirklich Arduino Linux wollen, schauen Sie sich den Yún an.

Der Doktor
quelle
2
Sie würden "wahrscheinlich" keinen zusätzlichen Widder benötigen, sondern einen zusätzlichen Widder. Linux benötigt 1 MB + RAM. Das Fehlen einer MMU würde auch bedeuten, dass Sie herausfinden müssen, wie man eine emuliert (oder ucLinux ausführt). Realistisch gesehen würden Sie bestenfalls einen leistungsfähigeren Prozessor in der Atmosphäre emulieren, der eine Größenordnung langsamer wäre als nativer Code. Auch der Arduino Due hat nicht annähernd den gewünschten Widder.
Connor Wolf
Außerdem verfügt der ATmega328P über 2 KB SRAM und der ATmega2560P nur über 8 KB. Das ist nur 4x der Widder, nicht 16x.
Connor Wolf
16

Es hat einfach nicht genug RAM. Sie müssten ihm auch beibringen, vom Flash-Speicher zu booten, wozu das Neuschreiben des Bootloaders gehört.

Sie können stattdessen ein Arduino Yun oder ein PCDuino verwenden . Arduinos sind zwar keine "Standard" -Arduinos, unterstützen jedoch Arduino-Shields und führen Linux aus.

Oder es gibt immer den Raspberry Pi .

Manishearth
quelle
Warum sagen Sie, Yun ist nicht "Standard" Arduino? Ich bin damit einverstanden, dass es nicht die häufigste ist, aber es ist in der Tat ein Arduino.
jfpoilpret
@jfpoilpret Die meisten Arduinos sind Atmega-Boards, die kompiliertes C ++ über avr-gcc ausführen und über einen USB-Handling-Chip verfügen. Sie gibt es in verschiedenen Formen / Größen / Stärken, aber sie sind im Wesentlichen gleich (Mega beiseite). Es schien ziemlich offensichtlich, dass das OP über diese und nicht über das Yun / etc sprach, daher die Unterscheidung.
Manishearth
Es gibt auch den bald erscheinenden Arduino Tre , zumindest hoffe ich, dass es bald soweit ist ;-)
Chris O
6

Die kurze Antwort lautet nein.

Grundsätzlich bräuchten Sie VIEL mehr RAM als selbst der größte ATmega von Haus aus.

Es ist theoretisch möglich, externe Hardware hinzuzufügen und den ATmega so zu programmieren, dass er eine leistungsstärkere CPU emuliert, und Linux darauf auszuführen. Auf einem einfachen Arduino ist dies jedoch nicht möglich.

Es wäre viel realistischer, Linux auf einem Arduino Due auszuführen, bei dem es sich im Grunde um eine AT91SAM3X8E-CPU handelt. Sie müssen jedoch noch zusätzlichen SRAM und Speicher hinzufügen.

Es gibt Dinge wie das Arduino Yun, aber das ist wirklich ein völlig separates Linux-Modul auf derselben Platine wie ein ATmega32U4, also weiß ich nicht, ob man es wirklich als Arduino zählen kann.


Möglicherweise relevant: Was braucht es, um Embedded Linux auszuführen?

Connor Wolf
quelle
1

Es gibt ein Board namens pcDuino , das verschiedene Linux-Varianten wie Debian, Ubuntu, Open WRT, LEDE und Raspian PIXEL ausführen kann (um nur einige zu nennen). Dieses Board ist kein Arduino, sondern Arduino AtHeart und wird von LinkSprite hergestellt .
pcDuino

Arduino hat einige Boards, die die Ausführung einer Linux-Variante namens Linino unterstützen :

  • Das Arduino Yún ist ein Mikrocontroller-Board, das auf dem ATmega32u4 und dem Atheros AR9331 basiert. Der Atheros-Prozessor unterstützt eine Linux-Distribution, die auf OpenWrt mit dem Namen Linino OS basiert. Die Karte verfügt über integrierte Ethernet- und WiFi-Unterstützung, einen USB-A-Anschluss, einen Micro-SD-Kartensteckplatz, 20 digitale Ein- / Ausgangspins (7 davon können als PWM-Ausgänge und 12 als analoge Eingänge verwendet werden) und einen 16-MHz-Quarz Oszillator, ein Micro-USB-Anschluss, ein ICSP-Header und 3 Reset-Tasten.
  • Das neue Arduino Tian- Board wird von Atmels SAMD21-MCU mit einem 32-Bit-ARM Cortex® M0 + -Kern und einem Qualcomm Atheros AR9342 betrieben, einem hochintegrierten MIPS-Prozessor mit einer Taktfrequenz von bis zu 533 MHz und einem funktionsreichen IEEE802.11n 2x2 2.4 / 5-GHz-Dualband-WLAN-Modul. Qualcomm Atheros MIPS unterstützt eine Linux-Distribution, die auf OpenWRT namens Linino basiert. Der Arduino Tian verfügt auch über einen eingebauten 4-GB-eMMC-Speicher, der beim Erstellen Ihrer Projekte hilfreich sein kann. Es ist möglich, den Linux-Port von der MCU aus ein- und auszuschalten, um den Stromverbrauch zu senken.
  • Arduino Industrial 101 ist eine Evaluierungskarte für das Arduino 101 LGA-Modul. Der ATmega32u4-Mikrocontroller ist in das Baseboard integriert. Das Modul unterstützt eine Linux-Distribution, die auf OpenWRT mit dem Namen LininoOS basiert. Die Karte verfügt über integriertes WLAN (IEEE 802.11b / g / n-Betrieb mit bis zu 150 Mbit / s, 1 x 1, 2,4 GHz), 3 GPIOs (von denen 2 als PWM-Ausgänge verwendet werden können), 4 analoge Eingänge, 1 USB und 1 Ethernet-Signal am Pin Header und ein eingebauter DC / DC-Wandler. Lesen Sie die Montageanleitung und schließen Sie Ihr Board einfach mit einem Micro-USB-Kabel an einen Computer an.
sa_leinad
quelle
-1

Dies ist einige Jahre alt, aber möglicherweise relevanter, da Arduinos mehr RAM und 32-Bit-ATMega-AVRs usw. erhalten. Es gibt ein offensichtliches Problem, insbesondere nicht in der beliebtesten Antwort hier. Der Arduino verwendet einen AVR MICROCONTROLLER, kein Mikroprozessor. Dies ist ein Hauptgrund, warum es keinen Linux-Port gibt. Mikrocontroller sind für die Ausführung einer bestimmten Aufgabe konzipiert, dh für Anwendungen, bei denen das Verhältnis von Eingabe und Ausgabe genau definiert ist. Mikroprozessoren können eine Vielzahl von Apps auf Betriebssystemen ausführen. Denken Sie daran, dass Linux von Anfang an eine Speicherverwaltungseinheit benötigte und nicht auf 8088- oder 286-PCs ausgeführt werden konnte. Dann gab es μClinux für Palm Pilots, das ursprünglich auf die Motorola DragonBall-Familie eingebetteter 68k-Prozessoren abzielte. Es war nie besonders erfolgreich. Möglicherweise haben Sie mehr Erfolg mit der Portierung von FreeDOS oder sogar Minix als mit Linux, vielleicht etwas in Assembler, aber das Kompilieren eines Betriebssystems auf einem Mikrocontroller ist sehr unpraktisch. Vielleicht ist es ein schwieriges akademisches Problem,

Cuvtixo
quelle
-2

Es ist möglich, aber es wäre ein Schmerz, weil Sie es in C schreiben müssten C für das Arduino würde helfen, da es die Unterstützung hat, Treiber hinzuzufügen, auf Kosten der verlangsamten Wiederholung der Void-Loop-Funktion. (Dies ist keine so große Sache, wie Sie vielleicht denken) (Ontas befindet sich noch in der Entwicklung und es werden ständig neue Funktionen hinzugefügt.)

Klicken Sie hier, um den Link zu den .ino- und den zugehörigen .h-Dateien zu erhalten

Luke Tindale
quelle