Linux no ARM série Cortex-M3

29

Eu sou novo na ARM e um pouco confuso com todas as diferentes séries.

Eu preciso construir um gateway de baixa potência (ethernet, wifi ...), então acho que um córtex-M ou córtex-R será o bom ponto de partida. Mas não encontrou nenhuma placa de desenvolvimento com um córtex-m3 (o que parece ser bastante popular) suportando o linux.

Parece possível linuxM3 , então eu me pergunto por que não há projeto linux em torno de um mbed ou um LPCXpresso, por exemplo?

Alguém pode me apontar para o fórum de desenvolvimento que eu procuro, ou me explicar por que "córtex m" + linux não vem com mais respostas?

jojo l'abricot
fonte
O NXP possui suporte a Linux para outros processadores que não têm certeza sobre esse específico.
Kenny
2
Quão baixa energia precisa ser? Consegui construir um sistema Linux completo de 1/2 watt baseado no Freescale iMX283. 1 / 2W durante carga normal sem Ethernet, 1W com Ethernet, <1,5W Ethernet com carga máxima ... O Ethernet PHY é metade da energia do sistema em carga normal.
darron

Respostas:

18

Em relação ao ARM Cortex-M3:

O Linux requer uma MMU (Unidade de Gerenciamento de Memória). O ARM Cortex-M3 não possui um. É impossível executar o kernel principal do Linux no ARM Cortex-M3.

No entanto, existe uma variante do kernel do Linux para processadores sem MMU chamada uCLinux .

Guia Linux no M3

Nota de aplicação do ST no uCLinux

No entanto, como outros observaram, é improvável que o Linux seja prático no M3. Não será executado sem RAM externa. Acredito que mesmo as maiores partes do Cortex-M3 tenham apenas 1 MB de flash, então você provavelmente precisará de armazenamento extra também.

Toby Jaffey
fonte
12

Cortex-M não está pronto para o trabalho, você precisa do ARM926EJ-S

Uma pesquisa por "Cortex-M + Linux" não apresenta muitas respostas, porque o Cortex-M não foi projetado para Linux. O ARM menos poderoso geralmente considerado capaz de executar um sistema operacional completo como o Linux é a série ARM926EJ-S , que usa a arquitetura ARMv5. Este é um processador clássico, com ampla adoção (encontrado em muitas caixas NAS, smartphones mais antigos e no Chumby Classic) e muito suporte, mas é um pouco menos eficiente que seus sucessores. Possui uma arquitetura ARMv5 e roda a algumas centenas de MHz.

É isso que você realmente quer, mas não pode tê-lo

O processador que você realmente deseja, eu acho, é o Cortex-A5: projetado para substituir (e ser um pouco mais poderoso que) o ARM11, mas muito mais eficiente em termos de energia e em um processo mais moderno. (Nota: nada a ver com o A5 da Apple, esse é um Cortex-A9 especial) Foi anunciado em 2009 e estamos aguardando para ver o silício "a qualquer momento". Ninguém ainda produziu um SoC de uso geral para esse processador, porque os smartphones direcionam o mercado e o mercado entre um A9 mais poderoso e um ARM11 mais antigo, simplesmente não é atraente. Consulte esta discussão para obter mais detalhes: http://forum.beyond3d.com/archive/index.php/t-60145.html

Opções mais poderosas

O ARMv6 no ARM11 é um pouco mais eficiente, mas também mais poderoso (para que você não veja nenhuma economia no seu orçamento de energia). Ele alimenta smartphones menos antigos, como o iPhone 3G, assim como o iPod Touch, Kindle e Zune e roda entre 500 e 800 MHz. A arquitetura mais recente, ARMv7, é a série Cortex. O Cortex-A8 e -A9 estão alimentando os mais recentes smartphones e tablets de 800MHz a 1,2GHz, você provavelmente desejará usar os processadores menores e mais lentos se estiver buscando um design minimalista. Os números de desempenho por watt desses processadores são fantásticos, mas pode ser mais seguro (e certamente será menos complexo) usar apenas as peças do ARMv5.

Kevin Vermeer
fonte
2
Nota: o Cortex-A5 já está sendo distribuído e reivindicação Atmel para fornecer suporte Linux para sua versão: atmel.com/Microsite/sama5d3/...
pjc50
10

Por favor, verifique este site para algumas plataformas Cortex-M3 compatíveis com Linux (uClinux):

http://www.emcraft.com/

Executamos o uClinux com sucesso nos seguintes MCUs Cortex-M3: LPC1788 da NXP, STM32F2 da STmicro, SmartFusion da Actel e estamos adicionando suporte para mais alguns: Freescale Kinetis, STM32F4 (esses dois são o Cortex-M4 em vez do Cortex-M3) .

É verdade que o Linux (incluindo o uClinux) requer RAM externa para funcionar - a SRAM integrada do Cortex-M não é grande o suficiente, mesmo para uma configuração Linux minúscula; você precisa de pelo menos 4 MB de RAM externa para configurações práticas. Quanto mais melhor, de fato - se o seu aplicativo precisa de "recursos", o Linux suporta quase tudo e você não se arrependerá de ter adicionado mais RAM em vez de menos.

Em relação a dispositivos específicos a serem usados ​​para RAM externa, tudo é definido pela interface de memória externa fornecida por um MCU específico. STM32F e SmartFusion suportam apenas SRAM; você seria capaz de obter um PSRAM de 16 MB e 70ns (com um Modo de página para uma operação mais rápida) por US $ 6-7; O LPC1788 suporta memórias SDRAM mais rápidas; O Kinetis K70 suporta DDR2 (US $ 5 para um dispositivo de 64 MB) etc. Todas essas memórias consomem energia apenas nos níveis de uA em momentos estáticos.

Você precisa de algo para carregar um Linux inicializável, mas isso pode ser sobre qualquer coisa - rede, cartão SD, EIPROM SPI, NOR ou NAND Flash, etc.

No geral, ouso dizer que o Linux é uma opção totalmente prática para o design do Cortex-M3.

Atualizar

Existem muitos aplicativos sensíveis à energia nos quais o dispositivo fica ocioso a maior parte do tempo; no entanto, ao executar, ele precisa fazer muitas coisas que não serão fáceis de conseguir usando um RTOS menor. Conexões seguras, VLAN, encapsulamento TCP / IP, SNMP, cartão SD, dispositivo / host USB, WiFI, etc, e a lista de requisitos continua.

Com um RTOS menor, alguns desses recursos estarão disponíveis, outros não, no entanto, isso é apenas parte da história. O que vemos cada vez mais com nossos clientes é que os projetos incorporados usando o Cortex-M3 não precisam apenas de 1 ou 2 desses recursos avançados, eles precisam de muitos deles em um único dispositivo. Mesmo que um RTOS ofereça todos os recursos de que o projeto precisa em prateleira, colocar tudo na memória do chip será um desafio. No uClinux ou não, meu palpite é que a tendência será que mais e mais projetos baseados em Cortex-M usem memória externa. Obviamente, depois de obter RAM externa em seu design, o uClinux começa a fazer mais sentido.

Com relação ao baixo poder de processamento fornecido pelo Cortex-M (medido em relação aos requisitos do kernel Linux), como uma experiência recente, acabamos de ativar o uClinux no Freescale K70 MCU. Este é um Cortex-M4 (que é o mesmo que o Cortex-M3 mais as unidades FP e DSP de hardware); interfaces no chip para RAM de alta densidade (DDR2) e Flash (NAND), com caches no chip de 2x8 KB. Núcleo de 120Mhz Cortex-M, com peças de 150Mhz em breve.

O Linux (uClinux) roda muito bem neste dispositivo. Usando 'dhrystone', obtemos cerca de 50% de desempenho em uma caixa Freescale PowerPC de 250Mhz. Inicialização rápida, muita RAM (o módulo TWR-K70 fornece 128 MB de RAM e 256 MB de NAND Flash), rede, JFFS2, framebuffer, SSH, HTTPD, Qt / E - tudo isso funciona perfeitamente no K70. A experiência geral do usuário é o seu "Linux embarcado" regular em um microprocessador cheio de MMU.

Aqui está um ponteiro para o vídeo de uma sessão ao vivo do uClinux em execução no Freescale Kinetis K70 Cortex-M4 MCU:

http://www.youtube.com/watch?v=UZjJrLG9CeA

vladimir khusainov
fonte
5

Sem algum tipo de suporte para memória externa (RAM e Flash), é impossível ajustar até a menor distribuição linux (por exemplo, uclinux) nos recursos incorporados dos dispositivos mencionados.

Isso normalmente significa que um barramento de 32 bits é exposto para conectar chips adicionais. É por isso que é mais comum ver computadores SBC (linux single-board) com RAM e chips flash adicionais na faixa de megabytes usados ​​para executar o linux. Os microcontroladores que você listou não oferecem isso. Do meu ponto de vista, o córtex-m0 / m3 é mais voltado para aplicações em que um micro de 8 bits não seria (ou quase não é suficiente) - portanto, todos os recursos necessários são incorporados ao chip.

Para responder melhor a essa pergunta, seria sensato analisar os requisitos para o linux incorporado. Isso normalmente significa poder ajustar um gerenciador de inicialização, kernel e sistema de arquivos - e, é claro, o aplicativo do usuário e as bibliotecas reais necessários para executá-lo. Totalize isso e em breve você verá que pode precisar de alguns megabytes de RAM e Flash para fazer algo útil.

Jon L
fonte
3

Não há MMU no stm32, portanto você deve usar o ucLinux.

Um rápido google para o ucLinux o enviará na direção certa. https://www.google.com/search?q=stm32+uclinux

Mas, por outro lado, o Linux não é realmente tão útil nesse tipo de mcu pequeno e na maioria das vezes você precisa de ram externo e um cartão SD para executá-lo. E então o preço está fechando em projetos como o PI Rasperry, então você precisa pensar sobre quais são suas necessidades.

Talvez outro sistema operacional menor seja uma escolha melhor? Mesmo que seja bom ter Linux em todos os lugares ...

Johan
fonte
3

Existem alguns aplicativos de baixo consumo de energia, como o smart meetering, onde é realmente útil usar um Cortex-M3 com memória externa executando o Linux. Pense não em termos de custo total (as placas custarão quase o mesmo que com um Core mais rápido), mas em termos de consumo de energia.

Se você mora com uma bateria e fica no modo inativo na maioria das vezes, fazendo uma medição a cada minuto ou mais e enviando-a por uma rede, pode ser bom poder usar a infraestrutura trazida a você pelo linux para TCP / IP, criptografia etc.

Na Exposição Mundial incorporada deste ano, a Pengutronix mostrou um linux em uma placa de prototipagem da EnergyMicro executando o uCLinux em um Cortex-M3 com RAM externa e um consumo de energia de 1,6 mW quando no modo inativo. O Energy Micro possui alguns MCUs Cortex-M3 e M4 de baixo consumo de energia incríveis em seu portfólio, especificamente otimizados para aplicativos de baixo consumo de energia que precisam de aproximadamente 16mW de potência quando executados a 32MHz enquanto executam o código da RAM. Isso pode habilitar o Linux em uma variedade de dispositivos alimentados por bateria, onde processadores maiores e mais rápidos simplesmente não atendem ao seu orçamento de energia. Por outro lado, você também não terá muito poder de processamento ...

Então, basicamente, se você está usando uma bateria e não precisa de muito poder de processamento, isso pode ser uma solução para você; caso contrário, você pode optar por um ARM Core maior com MMU.

Dirk
fonte