Menor distribuição Linux embutida?


19

Eu gostaria de perguntar aos especialistas por aí .. Qual é a melhor distribuição Linux embutida para:

  • Memória Flash ~ 700Kb
  • Ram ~ 256Kb
  • Processador: Córtex do braço de ponta M3 (algo da família STM32, por exemplo)

Módulos necessários: - Núcleo do kernel - Conjunto básico de drivers: USB / Rede (para WiFi - Sem AP, apenas cliente, sem segurança) / SPI / Uart / I2C

Isso é possível ou estou sonhando?

A idéia é usar um CortexM3 de 5 dólares e não usar memórias externas para que eu possa aproveitar os drivers prontos para SDIO / WiFi etc.

  • Atualizei a pergunta com esclarecimentos sobre o WiFi. WiFi no sentido de que é uma operação simples e simples do cliente do moinho. Nada extravagante, talvez chore se eu puder encaixar.

  • Outra atualização: e o uCLinux?

Respostas:


26

Eu diria que você está sonhando. O principal problema será a RAM limitada.

Em 2004, Eric Beiderman conseguiu inicializar um kernel com 2,5 MB de RAM , com muitas funcionalidades removidas.

No entanto, isso foi no x86, e você está falando sobre o ARM. Então, tentei criar o menor kernel ARM possível, para a plataforma 'versátil' (uma das mais simples). Desliguei todas as opções configuráveis, incluindo as que você está procurando (USB, WiFi, SPI, I2C), para ver o quão pequeno seria. Agora, estou apenas me referindo ao kernel aqui, e isso não inclui nenhum componente do espaço do usuário.

A boa notícia: caberá no seu flash. O zImage resultante é de 383204 bytes.

A má notícia: com 256kB de RAM, não será possível inicializar:

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

O segmento .text é maior que a RAM disponível, portanto o kernel não pode descompactar, muito menos alocar memória para inicializar, muito menos executar qualquer coisa útil.

Uma solução alternativa seria usar o suporte à execução no local (CONFIG_XIP), se o sistema suportar isso (por exemplo, ele pode buscar instruções diretamente do Flash). No entanto, isso significa que seu kernel precisa caber descomprimido no flash e 734kB> 700kB. Além disso, as seções .data e .bss totalizam 66kB, deixando cerca de 190kB para todo o resto (ou seja, todas as estruturas de dados alocadas dinamicamente no kernel).

Esse é apenas o núcleo. Sem os drivers que você precisa, ou qualquer espaço no usuário.

Então, sim, você precisará de um pouco mais de RAM.


1
Ótima resposta .. Estou surpreso ao ver que o kernel do linux bare é tão pesado .. Eu tenho uma pergunta de acompanhamento .. Existe algum wrapper por aí que me permita usar drivers do linux com outros sistemas operacionais? O que eu mais gosto no Linux é a disponibilidade do driver. Cada hardware que eu toco possui um driver Linux e é sempre difícil portá-los, a única razão pela qual estou interessado no Linux é realmente os drivers, daí a pergunta.
22411 Frank

Apenas uma observação sobre o link de inicialização do kernel, vi nos posts a seguir por Eric que ele conseguiu obter a imagem compactada do kernel para 190K e descompactada em torno de 360K, portanto, teoricamente, você pode ajustá-la ao seu flash descompactado. Mais informações: elinux.org/Linux_Tiny, no entanto, não sei qual é o status do projeto.
Mihailo 22/07

5

OMI, você está sonhando. Especialmente com USB, rede e 802.11 / wifi. Eu simplesmente não acho que você pode fazer isso e o M3 é realmente um trecho.

O OpenWRT é uma das menores e mais incorporáveis ​​distribuições Linux que conheço para redes e é difícil conseguir isso com menos de 2 MB, especialmente com Wifi.

Tente procurar chips ARM de última geração, se é isso que você realmente deseja ou use os SoC da Broadcom ou Atheros, que atualmente são comuns em roteadores.


você pode muito bem ser certo, porém eu atualizei a questão com esclarecimentos sobre WiFi .. eu não precisaria de todos os protocolos, DHCP / IP e soquetes básicos ..
Frank

4

Você tem MMU no processador? Caso contrário, você pode querer olhar para: http://www.uclinux.org/ que deve fornecer um tamanho de kernel muito menor do que o mencionado. Funciona para alguns chips CortexM3 Atmel, portanto, pode funcionar para o seu. Eu não o usei, então isso é apenas especulativo. Doh, acabei de ver que a pergunta foi atualizada - bem, se você não possui um MMU (o que provavelmente não possui), não pode usar o kernel "normal" e precisaria usar o ucLinux.


@mihalo obrigado por apontar o uclinux +1 para isso. Eu tenho uma pergunta sobre isso .. apreciar se você pode dar uma mão ..
Frank

Infelizmente, não tenho muita experiência com isso, observei as portas do ucLinux e todas as placas mencionadas possuem RAM externa. O menor kernel (não compactado) que vi foi para o ADI Blackfin - algo como 400KB, mas que não é ARM, e para ARM poderia ser significativamente maior. Para os microprocessadores Atmels ARM, era de cerca de 1,5 MB e todos usavam RAM externa.
Mihailo 25/07

Mihailo obrigado por tomar o tempo para olhar ao redor ..
Frank

2

Você pode considerar o NuttX como uma alternativa se realmente deseja a conformidade com POSIX em uma plataforma pequena e não MMU.


3
Parece bem legal, mas pode valer a pena incluir alguns dos prós / contras comparados ao Linux para torná-lo uma resposta mais completa.
precisa

2

Não me lembro das especificidades, mas há uma empresa que fabrica placas com STM32F4s executando o uCLinux, o software pode ser baixado, mas elas têm RAM e flash externos nessas placas.

Como observação, o preço é tão alto que é melhor você adquirir um Pi ou Pine64, a menos que queira isso como uma experiência de aprendizado. Nossa empresa analisou a questão e, considerando o custo de desenvolvimento, decidiu que, se rodássemos algo no Linux embarcado usando stm32f4, seria inviável economicamente, contando apenas o custo das peças.


Artigo excelente que inclui os custos de BOM para a execução do uClinux no M3 / M4 - electronicdesign.com/embedded/…
Scott Seidman

0

O uCLinux provavelmente funcionará. No entanto, você não terá proteção de memória no sistema, pois não possui MMU. Isso significa que qualquer falha em qualquer aplicativo pode derrubar todo o sistema. Você também pode encontrar problemas de fragmentação de memória sem a MMU. Por que não olhar para uma das TI Sitaras? Eles ainda são muito baratos e você pode rodar o Linux completo, o que será muito mais flexível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.