La plus petite distribution Linux embarquée?

19

J'aime demander aux experts là-bas .. Quelle est la meilleure distribution Linux embarquée pour:

  • Mémoire flash ~ 700 Ko
  • RAM ~ 256 Ko
  • Processeur: cortex haut de gamme M3 (quelque chose de la famille STM32 par exemple)

Modules requis: - Noyau du noyau - Jeu de pilotes de base: USB / Réseau (pour WiFi - Pas d'AP, juste client, pas de sécurité) / SPI / Uart / I2C

Est-ce que c'est possible ou est-ce que je rêve?

L'idée est d'utiliser un CortexM3 haut de gamme à 5 $ et de ne pas utiliser de mémoires externes pour pouvoir profiter des pilotes prêts pour SDIO / WiFi, etc.

  • J'ai mis à jour la question avec des précisions sur le WiFi. WiFi dans le sens où il s'agit d'un simple client du moulin. Rien d'extraordinaire, peut-être pleurer si je peux l'adapter.

  • Une autre mise à jour: Et uCLinux?

Franc
la source

Réponses:

26

Je dirais que tu rêves. Le principal problème sera la RAM limitée.

En 2004, Eric Beiderman a réussi à obtenir un démarrage du noyau avec 2,5 Mo de RAM , avec beaucoup de fonctionnalités supprimées.

Cependant, c'était sur x86, et vous parlez d'ARM. J'ai donc essayé de construire le plus petit noyau ARM possible, pour la plate-forme «polyvalente» (l'une des plus simples). J'ai désactivé toutes les options configurables, y compris celles que vous recherchez (USB, WiFi, SPI, I2C), pour voir à quel point cela deviendrait petit. Maintenant, je me réfère simplement au noyau ici, et cela n'inclut aucun composant de l'espace utilisateur.

La bonne nouvelle: elle rentrera dans votre flash. Le zImage résultant est de 383204 octets.

La mauvaise nouvelle: avec 256 Ko de RAM, il ne pourra pas démarrer:

$ size obj/vmlinux
  text     data     bss     dec     hex filename
734580    51360   14944  800884   c3874 obj/vmlinux

Le segment .text est plus grand que votre RAM disponible, donc le noyau ne peut pas décompresser, encore moins allouer de la mémoire pour démarrer, et encore moins exécuter quoi que ce soit d'utile.

Une solution de contournement consisterait à utiliser le support d'exécution en place (CONFIG_XIP), si votre système le prend en charge (c'est-à-dire qu'il peut récupérer des instructions directement à partir de Flash). Cependant, cela signifie que votre noyau doit tenir non compressé en flash et 734 Ko> 700 Ko. De plus, les sections .data et .bss totalisent 66 Ko, laissant environ 190 Ko pour tout le reste (c'est-à-dire toutes les structures de données allouées dynamiquement dans le noyau).

C'est juste le noyau. Sans les pilotes dont vous avez besoin, ni aucun espace utilisateur.

Donc, oui, vous allez avoir besoin d'un peu plus de RAM.

Jeremy Kerr
la source
1
Excellente réponse .. Je suis surpris de voir que le noyau linux nu est aussi lourd .. J'ai une sorte de question de suivi .. Y a-t-il des enveloppes qui me permettent d'utiliser des pilotes linux avec d'autres OS? Ce que j'aime à propos de Linux, c'est la disponibilité des pilotes. Chaque matériel que je touche a un pilote linux et c'est toujours pénible de les porter, la seule raison pour laquelle je suis intéressé par Linux est vraiment les pilotes, d'où la question.
Frank
Juste une note sur le lien de démarrage du noyau, j'ai vu dans les articles suivants par Eric qu'il a réussi à obtenir l'image du noyau compressé à 190K et non compressé à 360K, donc théoriquement, vous pourriez l'ajuster dans votre flash non compressé. Plus d'informations: elinux.org/Linux_Tiny mais je ne sais pas quel est le statut du projet.
Mihailo
5

OMI, tu rêves. Surtout avec USB, réseau et 802.11 / wifi. Je ne pense pas que vous puissiez le faire et M3 est vraiment un tronçon.

OpenWRT est l'une des distributions Linux les plus petites et les plus embarquables que je connaisse pour la mise en réseau et il est difficile de l'obtenir sous 2 Mo, en particulier avec le Wifi.

Essayez de chercher des puces ARM haut de gamme si c'est ce que vous voulez vraiment ou optez pour les SoC Broadcom ou Atheros qui sont actuellement courants dans les routeurs.

nemik
la source
vous pouvez très bien avoir raison, mais j'ai mis à jour la question avec des éclaircissements sur le WiFi .. Je n'aurais pas besoin de tous les protocoles, dchp / ip et sockets de base ..
Frank
4

Avez-vous du MMU sur le processeur? Si vous ne le faites pas, vous voudrez peut-être regarder: http://www.uclinux.org/ qui devrait vous donner une taille de noyau beaucoup plus petite que celle mentionnée. Cela fonctionne pour certaines puces CortexM3 Atmel, donc cela pourrait fonctionner pour la vôtre. Je ne l'ai pas utilisé donc ce n'est que spéculatif. Doh, je viens de voir que cette question a été mise à jour - eh bien, si vous n'avez pas de MMU (ce que vous n'avez probablement pas), vous ne pouvez pas utiliser le noyau "normal" et vous devrez utiliser ucLinux.

Mihailo
la source
@mihalo merci d'avoir signalé uclinux +1 pour cela. J'ai posé une question à ce sujet .. Appréciez si vous pouvez donner un coup de main ..
Frank
Malheureusement, je n'ai pas beaucoup d'expérience avec cela, j'ai regardé les ports ucLinux et toutes les cartes mentionnées y ont une RAM externe. Le plus petit noyau (non compressé) que j'ai vu était pour ADI Blackfin - quelque chose comme 400 Ko mais ce n'est pas ARM et pour ARM pourrait être beaucoup plus gros. Pour les microprocesseurs Atmels ARM, c'était environ 1,5 Mo et ils utilisaient tous de la RAM externe.
Mihailo
Mihailo merci d'avoir pris le temps de regarder autour de vous.
Frank
2

Vous voudrez peut-être considérer NuttX comme une alternative si vous voulez vraiment la conformité POSIX dans une petite plate-forme non MMU.

Thor
la source
3
Cela semble assez soigné, mais cela pourrait valoir la peine d'inclure certains des avantages / inconvénients par rapport à Linux pour en faire une réponse plus complète.
PeterJ
2

Je ne me souviens pas des détails, mais il existe une entreprise qui fabrique des cartes avec des STM32F4 exécutant uCLinux, le logiciel est téléchargeable, mais ils ont à la fois de la RAM externe et du flash sur ces cartes.

En remarque, le prix est si élevé que vous feriez mieux d'obtenir un Pi ou Pine64, à moins que vous ne vouliez cela comme une expérience d'apprentissage. Notre entreprise a examiné la question et en tenant compte des coûts de développement, elle a décidé que si nous devions exécuter quoi que ce soit sur Linux embarqué à l'aide de stm32f4, il est irréalisable économiquement, juste en comptant le coût des pièces.

Jan Dorniak
la source
Excellent article qui inclut les coûts de nomenclature pour exécuter uClinux sur M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman
0

uCLinux fonctionnera probablement. Cependant, vous n'aurez aucune protection de mémoire sur le système car vous n'avez pas de MMU. Cela signifie que tout plantage dans n'importe quelle application pourrait faire tomber l'ensemble du système. Vous pouvez également rencontrer des problèmes de fragmentation de la mémoire sans la MMU. Pourquoi ne pas regarder l'un des TI Sitaras? Ils sont encore assez bon marché et vous pouvez exécuter Linux sur eux, ce qui sera beaucoup plus flexible.

fred basset
la source