La più piccola distribuzione Linux integrata?


19

Mi piace chiedere agli esperti là fuori. Qual è la migliore distribuzione Linux integrata per:

  • Memoria flash ~ 700Kb
  • Ram ~ 256Kb
  • Processore: High end arm cortx M3 (qualcosa della famiglia STM32 per es.)

Moduli richiesti: - Core del kernel - Set di driver di base: USB / Rete (per WiFi - Nessun AP, solo client, nessuna sicurezza) / SPI / Uart / I2C

È possibile o sto sognando?

L'idea è di utilizzare un CortexM3 di fascia alta da $ 5 e non utilizzare memorie esterne in modo da poter godere dei driver pronti per SDIO / WiFi ecc.

  • Ho aggiornato la domanda con chiarimenti su WiFi. WiFi nel senso che è un semplice client del mulino. Niente di speciale, forse piangere se posso adattarlo.

  • Un altro aggiornamento: che ne dici di uCLinux?

Risposte:


26

Direi che stai sognando. Il problema principale sarà la RAM limitata.

Nel 2004, Eric Beiderman è riuscito ad avviare un kernel con 2,5 MB di RAM , rimuovendo molte funzionalità.

Tuttavia, questo era su x86 e stai parlando di ARM. Quindi ho cercato di creare il kernel ARM più piccolo possibile, per la piattaforma 'versatile' (una delle più semplici). Ho disattivato tutte le opzioni configurabili, comprese quelle che stai cercando (USB, WiFi, SPI, I2C), per vedere quanto sarebbe piccolo. Ora, mi riferisco solo al kernel qui, e questo non include alcun componente dello spazio utente.

La buona notizia: si adatterà al tuo flash. La zImage risultante è di 383204 byte.

La cattiva notizia: con 256kB di RAM, non sarà in grado di avviarsi:

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

Il segmento .text è più grande della RAM disponibile, quindi il kernel non può decomprimersi, figuriamoci allocare memoria per l'avvio, per non parlare di eseguire qualcosa di utile.

Una soluzione alternativa sarebbe quella di utilizzare il supporto di esecuzione sul posto (CONFIG_XIP), se il tuo sistema lo supporta (ad esempio, può recuperare le istruzioni direttamente da Flash). Tuttavia, ciò significa che il kernel deve adattarsi non compresso in flash e 734 kB> 700 kB. Inoltre, le sezioni .data e .bss ammontano a 66 kB, lasciando circa 190 kB per tutto il resto (ovvero, tutte le strutture di dati allocate dinamicamente nel kernel).

Questo è solo il kernel. Senza i driver necessari, o alcuno spazio utente.

Quindi sì, avrai bisogno di un po 'più di RAM.


1
Ottima risposta .. Sono sorpreso di vedere che il kernel Linux nudo è così pesante .. Ho una sorta di domanda di follow-up .. C'è qualche wrapper là fuori che mi permette di usare i driver Linux con altri sistemi operativi? Quello che mi piace di Linux è la disponibilità dei driver. Ogni singolo hardware che tocco ha un driver Linux ed è sempre doloroso portarli, l'unica ragione per cui sono interessato a Linux sono i driver, quindi la domanda.
Frank,

Solo una nota sul link di avvio del kernel, ho visto nei seguenti post di Eric che è riuscito a ottenere l'immagine del kernel compresso a 190K e non compresso a 360K, quindi teoricamente potresti adattarlo al tuo flash non compresso. Maggiori informazioni: elinux.org/Linux_Tiny tuttavia non so quale sia lo stato del progetto.
Mihailo,

5

IMO, stai sognando. Soprattutto con USB, rete e 802.11 / wifi. Solo non penso che tu possa farlo e M3 è davvero un tratto.

OpenWRT è una delle distro Linux più piccole e integrabili che io conosca per il networking ed è difficile farlo a meno di 2 MB, specialmente con Wifi.

Prova a cercare chip ARM di fascia alta se è quello che vuoi davvero o vai con i SoC Broadcom o Atheros che sono attualmente comuni nei router.


potresti benissimo avere ragione, tuttavia ho aggiornato la domanda con chiarimenti su WiFi .. Non avrei bisogno di tutti i protocolli, dchp / ip e socket di base ..
Frank

4

Hai MMU sul processore? In caso contrario, potresti voler consultare: http://www.uclinux.org/ che dovrebbe darti dimensioni del kernel molto più piccole di quelle menzionate. Funziona con alcuni chip CortexM3 Atmel, quindi potrebbe funzionare anche per i tuoi. Non l'ho usato, quindi è solo speculativo. Doh, ho appena visto che la domanda era stata aggiornata - beh se non hai MMU (cosa che probabilmente non hai) non puoi usare un kernel "normale" e avresti bisogno di usare ucLinux.


@mihalo grazie per averci segnalato uclinux +1 per questo. Ho fatto una domanda al riguardo .. Apprezzo se puoi dare una mano ..
Frank

Sfortunatamente non ho molta esperienza con questo, ho guardato le porte di ucLinux e tutte le schede menzionate lì hanno RAM esterna. Il kernel più piccolo (non compresso) che ho visto era per ADI Blackfin - qualcosa come 400 KB ma che non è ARM e per ARM potrebbe essere significativamente più grande. Per i microprocessori ARM di Atmels erano circa 1,5 MB e utilizzavano tutti RAM esterna.
Mihailo

Grazie Mihailo per il tempo di guardarsi intorno ..
Frank,

2

Potresti voler considerare NuttX come alternativa se desideri davvero la conformità POSIX in una piattaforma piccola, non MMU.


3
Sembra abbastanza pulito, ma potrebbe valere la pena includere alcuni dei pro / contro rispetto a Linux per renderlo una risposta più completa.
PeterJ,

2

Non ricordo i dettagli, ma esiste una società che produce schede con STM32F4 che eseguono uCLinux, il software è scaricabile, ma hanno sia RAM esterna che flash su quelle schede.

Come nota a margine, il prezzo è così alto che è meglio ottenere un Pi o Pine64, a meno che non lo si desideri come esperienza di apprendimento. La nostra azienda lo ha esaminato e considerando i costi di sviluppo e ha deciso che se avessimo eseguito qualcosa su Linux incorporato usando stm32f4 fosse economicamente impossibile, contando solo il costo delle parti.


Articolo eccellente che include i costi della distinta base per l'esecuzione di uClinux su M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman,

0

uCLinux probabilmente funzionerà. Tuttavia non avrai protezione della memoria sul sistema in quanto non hai MMU. Ciò significa che qualsiasi arresto anomalo in qualsiasi applicazione potrebbe far crollare l'intero sistema. È inoltre possibile riscontrare problemi di frammentazione della memoria senza MMU. Perché non guardare uno dei Sitaras TI? Sono ancora abbastanza economici e su di essi puoi eseguire Linux completo che sarà molto più flessibile.

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.