Que faut-il pour compiler Linux sur Arduino, si possible?

25

Est-il possible d'exécuter Linux sur Arduino? Si oui, quelles étapes et limitations doivent être prises en compte? Sinon, quelles sont les limites qui empêchent cela?

Jakub Arnold
la source
3
Utilisez plutôt un RPi.
Anonymous Penguin

Réponses:

19

Linux est un système d'exploitation très complexe, mais il peut être compatible avec un Arduino. Choses à considérer:

  • Il n'y a pas de port AVR actuel du code source.
  • Vous n'auriez pas de graphiques, mais accédez au terminal via UART.
  • Le pilote du système de fichiers devrait être réécrit pour accéder à la mémoire flash interne ou à une carte SD externe.
  • Ce serait extrêmement lent! L'ATmega328 fonctionnerait à 16 MHz, soit environ 20 MHz max (overclocké). La plupart des machines Linux fonctionnent à un minimum de 400 MHz, et plus avec des graphiques.
  • Vous auriez probablement besoin de RAM supplémentaire, probablement une bonne idée d'utiliser un ATmega2650 (celui du Mega), qui a 16 fois la RAM de l'Uno. Vous pouvez également utiliser un Due (6x plus rapide que l'Uno, plus de RAM).
  • Vous devrez peut-être écrire des pilotes USB spéciaux pour OTG (en raison) ou MAX3421EE (Mega ADK, bouclier hôte USB).

En bref, cela prendrait beaucoup de temps et d'efforts, et serait probablement trop lent pour une utilisation quotidienne. Si vous voulez vraiment Arduino Linux, consultez le Yún.

Le docteur
la source
2
Vous ne seriez pas « probablement » besoin de RAM supplémentaire, vous avez besoin de RAM supplémentaire. Linux nécessite 1 Mo + RAM. En outre, l'absence d'une MMU signifierait que vous deviez trouver comment en émuler une (ou exécuter ucLinux). De façon réaliste, au mieux, vous finiriez par émuler un processeur plus performant dans l'atmega, qui serait un ordre de grandeur plus lent que le code natif. Même l'arduino dû n'a pas du tout le ram requis.
Connor Wolf
De plus, l'ATmega328P a 2 Ko de SRAM et l'ATmega2560P n'a que 8 Ko. Ce n'est que 4 fois le bélier, pas 16 fois.
Connor Wolf
16

Il n'a tout simplement pas assez de RAM. Vous devrez également lui apprendre à démarrer à partir de la mémoire flash, ce qui impliquerait la réécriture du chargeur de démarrage.

Vous pouvez à la place utiliser un Arduino Yun ou un PCDuino ; bien qu'ils ne soient pas des Arduinos «standard», ceux-ci prennent en charge les boucliers Arduino et exécutent Linux.

Ou il y a toujours le Raspberry Pi .

Manishearth
la source
Pourquoi dites-vous que Yun n'est pas un Arduino "standard"? Je suis d'accord que ce n'est peut-être pas le plus courant, mais c'est un Arduino en effet.
jfpoilpret
@jfpoilpret La plupart des Arduinos sont des cartes atmega qui exécutent C ++ compilé via avr-gcc et ont une puce de gestion USB. Ils viennent dans différentes formes / tailles / puissances, mais ils sont essentiellement les mêmes (Mega à part). Il semblait assez évident que l'OP en parlait et non du Yun / etc, d'où la distinction.
Manishearth
Il y a aussi l' Arduino Tre qui sortira bientôt , au moins j'espère que c'est bientôt ;-)
Chris O
6

La réponse courte est non.

Fondamentalement, vous auriez besoin de beaucoup plus de RAM que même le plus grand ATmega en natif.

Il est théoriquement possible d'ajouter du matériel externe, de programmer l'ATmega pour émuler un processeur plus puissant et d'exécuter Linux sur cela. Cependant, sur un Arduino simple, ce n'est pas possible.

Il serait beaucoup plus réaliste d'exécuter Linux sur un Arduino Due, qui est essentiellement un processeur AT91SAM3X8E. Cependant, vous devrez toujours ajouter de la mémoire SRAM et du stockage supplémentaires.

Il y a des choses comme l'Arduino Yun, mais c'est vraiment un module Linux entièrement séparé sur le même PCB qu'un ATmega32U4, donc je ne sais pas si vous pouvez vraiment le compter comme un arduino.


Peut-être pertinent: que faut-il pour exécuter Linux embarqué?

Connor Wolf
la source
1

Il existe une carte appelée pcDuino qui peut exécuter plusieurs variantes de Linux telles que Debian, Ubuntu, Open WRT, LEDE, Raspian PIXEL (pour n'en citer que quelques-unes). Cette carte n'est pas un Arduino natif, mais plutôt un Arduino AtHeart , et est fabriquée par LinkSprite .
pcDuino

Arduino a quelques cartes qui prennent en charge l'exécution d'une variante de Linux appelée Linino :

  • L' Arduino Yún est une carte microcontrôleur basée sur l'ATmega32u4 et l'Atheros AR9331. Le processeur Atheros prend en charge une distribution Linux basée sur OpenWrt nommée Linino OS. La carte a un support Ethernet et WiFi intégré, un port USB-A, un emplacement pour carte micro-SD, 20 broches d'entrée / sortie numériques (7 d'entre elles peuvent être utilisées comme sorties PWM et 12 comme entrées analogiques), un cristal 16 MHz oscillateur, une connexion micro USB, un en-tête ICSP et 3 boutons de réinitialisation.
  • La nouvelle carte Arduino Tian est alimentée par le microcontrôleur SAMD21 d'Atmel, comprenant un cœur ARM Cortex® M0 + 32 bits et un Qualcomm Atheros AR9342, qui est un processeur MIPS hautement intégré fonctionnant jusqu'à 533 MHz et IEEE802.11n 2x2 2.4 / riche en fonctionnalités. Module WiFi double bande 5 GHz. Qualcomm Atheros MIPS prend en charge une distribution Linux, basée sur OpenWRT nommée Linino. L'Arduino Tian possède également une mémoire eMMC intégrée de 4 Go qui peut être utile pour construire vos projets. Il est possible d'activer / désactiver le port Linux du MCU pour réduire la consommation d'énergie.
  • Arduino Industrial 101 est une carte d'évaluation pour le module Arduino 101 LGA. Le microcontrôleur ATmega32u4 est intégré dans la plinthe. Le module prend en charge une distribution Linux basée sur OpenWRT nommée LininoOS. La carte dispose du WiFi intégré (opérations IEEE 802.11b / g / n jusqu'à 150 Mbps 1x1 2,4 GHz), 3 GPIO (dont 2 peuvent être utilisées comme sorties PWM), 4 entrées analogiques, 1 USB, 1 signal Ethernet sur broche en-têtes et un convertisseur DC / DC intégré. Consultez le guide d'assemblage et connectez simplement votre carte à un ordinateur avec un câble micro USB pour commencer.
sa_leinad
la source
-1

C'est vieux de plusieurs années, mais peut-être plus pertinent car les Arduinos obtiennent plus de RAM et les AVR ATMega 32 bits, etc. Il y a un problème évident, notamment pas dans la réponse la plus populaire ici. L'Arduino utilise un MICROCONTRÔLEUR AVR, pas un MICROPROCESSEUR. C'est une des principales raisons pour lesquelles il n'y a pas de port Linux. Les microcontrôleurs sont conçus pour effectuer une tâche spécifique, des applications où la relation d'entrée et de sortie est bien définie. Les microprocesseurs sont conçus pour exécuter diverses applications sur les systèmes d'exploitation. Rappelez-vous que depuis le début, Linux avait besoin d'une unité de gestion de mémoire et ne pouvait pas fonctionner sur 8088 ou 286 PC. Ensuite, il y avait μClinux, qui ciblait à l'origine la famille de processeurs 68k embarqués Motorola DragonBall, pour Palm Pilots. Cela n'a jamais été particulièrement réussi. Vous pourriez avoir plus de succès à porter FreeDOS ou même Minix que Linux, peut-être quelque chose dans l'assembleur, mais la compilation d'un OS sur un microcontrôleur est très peu pratique. C'est peut-être un problème académique difficile,

Cuvtixo
la source
-2

C'est possible, mais ce serait pénible car il faudrait l'écrire en C. (sans parler du matériel supplémentaire nécessaire comme un bouclier de carte SD et des puces de mémoire supplémentaires) Quelque chose comme Ontas, un noyau dans lequel j'ai écrit C pour l'arduino, serait utile car il prend en charge l'ajout de pilotes, au détriment de la répétition plus lente de la fonction de boucle vide. (Ce n'est pas aussi grave que vous pourriez le penser) (Ontas est toujours en cours de développement et de nouvelles fonctionnalités sont ajoutées tout le temps)

Cliquez ici pour le lien vers le fichier .ino et les fichiers .h qui l'accompagnent

Luke Tindale
la source