Linux en la serie ARM Cortex-M3

Soy nuevo en ARM y estoy un poco confundido con todas las series diferentes.

Necesito construir una puerta de enlace de bajo consumo (ethernet, wifi...), así que supongo que un cortex-M o un cortex-R serán un buen punto de partida. Pero no encontró ninguna placa de desarrollo con, por ejemplo, un cortex-m3 (que parece ser bastante popular) compatible con Linux.

Parece posible linuxM3 , así que me pregunto por qué no hay un proyecto de linux en torno a un mbed o un LPCXpresso, por ejemplo.

¿Alguien puede indicarme la placa de desarrollo que busco o explicarme por qué "cortex m"+linux no ofrece más respuestas?

NXP tiene soporte de Linux para otros procesadores que no están seguros de ese específico.
¿Qué tan baja potencia tiene que ser? Logré construir un sistema Linux completo de 1/2 watt basado en el Freescale iMX283. 1/2 W durante carga normal sin Ethernet, 1 W con Ethernet, <1,5 W Ethernet con carga completa... El PHY de Ethernet es la mitad de la potencia del sistema con carga normal.

Respuestas (7)

Con respecto al ARM Cortex-M3:

Linux requiere una MMU (Unidad de gestión de memoria). El ARM Cortex-M3 no tiene uno. Es imposible ejecutar el núcleo principal de Linux en ARM Cortex-M3.

Sin embargo, existe una variante del kernel de Linux para procesadores sin MMU llamada uCLinux .

Guía de Linux en M3

Nota de aplicación de ST sobre uCLinux

Sin embargo, como han señalado otros, es poco probable que Linux sea práctico en el M3. No funcionará sin RAM externa. Creo que incluso las partes más grandes de Cortex-M3 solo tienen 1 MB de memoria flash, por lo que es probable que también necesite almacenamiento adicional.

Cortex-M no está a la altura, necesita el ARM926EJ-S

Una búsqueda de "Cortex-M + Linux" no arroja muchas respuestas porque Cortex-M no está diseñado para Linux. El ARM menos potente que generalmente se considera capaz de ejecutar un sistema operativo completo como Linux es la serie ARM926EJ-S , que utiliza la arquitectura ARMv5. Este es un procesador clásico, con una amplia adopción (se encuentra en muchas cajas NAS, teléfonos inteligentes más antiguos y el Chumby Classic) y mucho soporte, pero es un poco menos eficiente que sus sucesores. Tiene una arquitectura ARMv5 y funciona a un par de cientos de MHz.

Esto es lo que realmente quieres, pero no puedes tenerlo

Creo que el procesador que realmente desea es el Cortex-A5: diseñado para reemplazar (y ser un poco más potente que) el ARM11, pero mucho más eficiente en el consumo de energía y en un proceso más moderno. (Nota: nada que ver con el A5 de Apple, es un Cortex-A9 especial) Se anunció en 2009 y estamos esperando ver el silicio "en cualquier momento". Nadie ha producido aún un SoC de uso general para este procesador, porque los teléfonos inteligentes impulsan el mercado y el mercado entre un A9 más potente y un ARM11 más antiguo simplemente no es convincente. Consulte esta discusión para obtener más detalles: http://forum.beyond3d.com/archive/index.php/t-60145.html

Opciones más potentes

El ARMv6 en el ARM11 es un poco más eficiente, pero también más poderoso (por lo que es posible que no vea ningún ahorro en su presupuesto de energía). Funciona con teléfonos inteligentes menos antiguos como el iPhone 3G, así como con el iPod Touch, Kindle y Zune, y funciona a 500-800 MHz. La última arquitectura, ARMv7, es la serie Cortex. El Cortex-A8 y -A9 funcionan con los últimos teléfonos inteligentes y tabletas a 800 MHz - 1,2 GHz; es probable que desee quedarse con los procesadores más pequeños y lentos si busca un diseño minimalista. Los números de rendimiento por vatio de estos procesadores son fantásticos, pero podría ser más seguro (y ciertamente será menos complejo) usar solo las partes ARMv5.

Nota: el Cortex-A5 ya se está enviando y Atmel afirma proporcionar soporte de Linux para su versión: atmel.com/Microsite/sama5d3/…

Consulte este sitio para conocer algunas plataformas Cortex-M3 compatibles con Linux (uClinux):

http://www.emcraft.com/

Ejecutamos uClinux con éxito en los siguientes MCU Cortex-M3: LPC1788 de NXP, STM32F2 de STmicro, SmartFusion de Actel, y estamos en proceso de agregar soporte para un par más: Freescale Kinetis, STM32F4 (estos dos son Cortex-M4 en lugar de Cortex-M3) .

Cierto, Linux (uClinux incluido) requiere RAM externa para funcionar: la SRAM integrada de Cortex-M no es lo suficientemente grande ni siquiera para una configuración de Linux ultra pequeña; necesita al menos 4 MB de RAM externa para configuraciones prácticas. Cuanto más mejor, de hecho, si su aplicación necesita "características", Linux tiene soporte para casi cualquier cosa y no se arrepentirá de haber agregado más RAM en lugar de menos.

Con respecto a los dispositivos particulares que se usan para RAM externa, todo está definido por la interfaz de memoria externa proporcionada por una MCU particular. STM32F y SmartFusion solo admiten SRAM; podría obtener una PSRAM de 16 MB y 70 ns (con un modo de página para una operación más rápida) por $ 6-7; LPC1788 admite memorias SDRAM más rápidas; Kinetis K70 es compatible con DDR2 ($5 por un dispositivo de 64 MB), etc. Todas esas memorias consumen energía a niveles de uA en tiempos estáticos.

Necesita algo para cargar un Linux de arranque, pero esto puede ser cualquier cosa: red, tarjeta SD, SPI EEPROM, NOR o NAND Flash, etc.

En general, me atrevo a decir que Linux es una opción totalmente práctica para un diseño de Cortex-M3.

Actualizar

Hay muchas aplicaciones sensibles a la energía en las que su dispositivo está inactivo la mayor parte del tiempo; sin embargo, cuando se ejecuta, debe poder hacer muchas cosas que no serán fáciles de lograr con un RTOS más pequeño. Conexiones seguras, VLAN, tunelización TCP/IP, SNMP, tarjeta SD, dispositivo/host USB, WiFi, etc. y la lista de requisitos sigue y sigue.

Con un RTOS más pequeño, algunas de esas características estarán disponibles, otras no, sin embargo, es solo una parte de la historia. Lo que vemos cada vez más con nuestros clientes es que los diseños integrados que usan Cortex-M3 no solo necesitan 1 o 2 de esas características avanzadas, necesitan muchas de ellas desde un solo dispositivo. Incluso si un RTOS proporciona todas las funciones que un diseño necesita listo para usar, meterlo todo en la memoria del chip será un desafío. uClinux o no, supongo que la tendencia será que más y más diseños basados ​​en Cortex-M usen memoria externa. Por supuesto, una vez que obtiene RAM externa en su diseño, uClinux comienza a tener más sentido.

Con respecto a la baja potencia de procesamiento proporcionada por Cortex-M (medida en comparación con los requisitos del kernel de Linux), como experiencia reciente, acabamos de habilitar uClinux en la MCU Freescale K70. Este es un Cortex-M4 (que es lo mismo que Cortex-M3 más unidades de hardware FP y DSP); interfaces en chip para RAM de alta densidad (DDR2) y Flash (NAND), con cachés en chip de 2x8 KB. Núcleo de 120Mhz Cortex-M, con partes de 150Mhz que saldrán pronto.

Linux (uClinux) funciona maravillosamente en este dispositivo. Usando 'dhrystone', obtenemos alrededor del 50% del rendimiento que obtenemos en una caja Freescale PowerPC de 250Mhz. Arranque rápido, mucha RAM (el módulo TWR-K70 proporciona 128 MB de RAM y 256 MB de NAND Flash), redes, JFFS2, framebuffer, SSH, HTTPD, Qt/E: todo esto funciona perfectamente en K70. La experiencia general del usuario es su "Linux integrado" habitual en un microprocesador completo de MMU.

Aquí hay un puntero al video de una sesión de uClinux en vivo que se ejecuta en el MCU Freescale Kinetis K70 Cortex-M4:

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

Sin algún tipo de soporte para la memoria externa (tanto RAM como Flash), es imposible que pueda adaptarse incluso a la distribución de Linux más pequeña (por ejemplo, uclinux) en los recursos integrados de los dispositivos mencionados.

Esto generalmente significa que se expone un bus de 32 bits para conectar chips adicionales. Esta es la razón por la que es más común ver computadoras de placa única (SBC) de Linux con RAM adicional y chips flash en el rango de megabytes utilizados para ejecutar Linux. Los microcontroladores que ha enumerado no ofrecen esto. A mi modo de ver, el cortex-m0/m3 está diseñado más para aplicaciones en las que un micro de 8 bits no sería (o apenas) suficiente; por lo tanto, todos los recursos que necesita están integrados en el chip.

Para responder mejor a esta pregunta, sería conveniente analizar los requisitos para Linux integrado. Por lo general, esto significa poder instalar un cargador de arranque, un kernel y un sistema de archivos y, por supuesto, la aplicación de usuario real y las bibliotecas necesarias para ejecutarlo. Suma esto y pronto verás que es posible que necesites un par de megabytes de RAM y Flash para hacer algo útil.

No hay MMU en stm32, por lo que debe usar ucLinux.

Un rápido google para ucLinux lo enviará en la dirección correcta. https://www.google.com/search?q=stm32+uclinux

Pero, por otro lado, Linux no es realmente tan útil en este tipo de mcu pequeños y la mayoría de las veces necesitas una memoria RAM externa y una tarjeta SD para que funcione. Y luego, el precio se está cerrando en proyectos como Rasperry PI, por lo que debe pensar en cuáles son sus necesidades.

¿Quizás otro sistema operativo más pequeño es una mejor opción? Aunque es bueno tener Linux en todas partes...

Hay algunas aplicaciones de bajo consumo, como reuniones inteligentes, en las que es realmente útil usar un Cortex-M3 con memoria externa que ejecute Linux. No piense en términos de costo total (las placas costarán casi tanto como con un núcleo más rápido), sino en términos de consumo de energía.

Si vive de una batería y está en modo inactivo la mayor parte del tiempo, tomando una medida tal vez cada minuto y luego enviándola a través de una red, sería bueno poder usar la infraestructura que Linux le brinda para TCP. /IP, cifrado, etc.

En la Exposición mundial integrada de este año, Pengutronix mostró un Linux en una placa de prototipos de EnergyMicro que ejecuta uCLinux en un Cortex-M3 con RAM externa y un consumo de energía de 1,6 mW en modo inactivo. Energy Micro tiene algunos increíbles MCU Cortex-M3 y M4 de bajo consumo en su cartera optimizados específicamente para aplicaciones de bajo consumo que necesitan aproximadamente 16 mW de potencia cuando funcionan a 32 MHz mientras ejecutan código desde la RAM. Esto puede habilitar Linux en una variedad de dispositivos alimentados por batería donde los procesadores más grandes y rápidos simplemente no se ajustan a su presupuesto de energía. Por otro lado, tampoco obtendrás mucha potencia de procesamiento de estos...

Básicamente, si vive de una batería y no necesita mucha potencia de procesamiento, esta podría ser una solución para usted, si no, puede optar por un ARM Core más grande con MMU.

Creo que hay un par de proveedores de Cortex-M3 que ofrecen notas de aplicación sobre el uso de versiones simplificadas de Linux ( uCLinux ) que se ejecutan en sus ofertas de productos. Como anécdota, creo que ST Micro tenía algunas ofertas. Actualmente estoy trabajando con un Actel/Microsemi SmartFusion (Cortex-M3 + FPGA Fabric) que tiene una nota de aplicación en PDF que apunta a una oferta de Emcraft .